New report preferences page. Only saves active selections at the moment, all other settings are read-only.
git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@7298 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin
CHANGELOG.txtbuild.propertiesplugin.propertiesplugin.xml
src/net/sourceforge/pmd/eclipse
runtime/preferences
ui
@ -1,20 +1,22 @@
|
||||
Change log for the PMD Eclipse plugin
|
||||
|
||||
v4.0.0 - xxx 2010?
|
||||
v4.0.0 - xxx 2011?
|
||||
. New integrated AST View and XPath test area
|
||||
. New rule creation wizard
|
||||
. New report setup panel
|
||||
. User-definable rule violation markers
|
||||
Highest priority markers also decorate folders & projects (selectable)
|
||||
. Colour syntax highlighting in code viewers/editors
|
||||
. Overhauled rule preferences screen
|
||||
. Allows users to group/edit rules by multiple criteria
|
||||
. New ability to enable/disable rules without removing them
|
||||
. allows users to group/edit rules by multiple criteria
|
||||
. new ability to enable/disable rules without removing them from rulesets
|
||||
. larger editors for the various fields
|
||||
. support for non-Java languages
|
||||
. group editing of filter exclusion rules
|
||||
. highlighting of non-default property values
|
||||
. Color-tagged expressions in shown in rule table
|
||||
. colour-tagged expressions in shown in rule table
|
||||
. new property editors are fully type-aware
|
||||
. misconfigured rules are highlighted
|
||||
. Huge code cleanup
|
||||
. Several usability fixes for the Dataflow view
|
||||
. Updated to use latest SWT widgets wherever possible
|
||||
|
@ -19,12 +19,6 @@ bin.includes = META-INF/,\
|
||||
plugin_ru.properties,\
|
||||
plugin_tr.properties,\
|
||||
schema/,\
|
||||
CHANGELOG.txt,\
|
||||
CREDITS.txt,\
|
||||
LICENSE.txt,\
|
||||
PATTERNS LIBRARY LICENSE.txt,\
|
||||
RELNOTES.txt,\
|
||||
TODO.txt,\
|
||||
about.ini,\
|
||||
toc.xml,\
|
||||
welcome.xml,\
|
||||
|
@ -13,18 +13,19 @@ plugin.name = PMD Plug-in
|
||||
plugin.provider = PMD Project
|
||||
|
||||
preferences.pmd = PMD
|
||||
preferences.rulesets = Rules Configuration
|
||||
preferences.rulesets = Rule Configuration
|
||||
preferences.cpd = CPD Preferences
|
||||
preferences.report = Reports
|
||||
properties.pmd = PMD
|
||||
|
||||
menu.pmd = PMD
|
||||
action.checkcpd = Find Suspect Cut And Paste...
|
||||
action.checkpmd = Check Code With PMD
|
||||
action.clearpmd = Clear PMD Violations
|
||||
action.checkpmd = Check Code
|
||||
action.clearpmd = Clear Violations
|
||||
action.clearall = Clear All PMD Violations
|
||||
action.ast = Generate Abstract Syntax Tree
|
||||
action.clearreviews = Clear violations reviews
|
||||
action.generatereport = Generate reports
|
||||
action.clearreviews = Clear Violation Reviews
|
||||
action.generatereport = Generate Reports
|
||||
action.showdataflow = Show Method Dataflow
|
||||
|
||||
view.category = PMD
|
||||
@ -33,5 +34,4 @@ view.violation = PMD Violations
|
||||
view.outline = Violations Outline
|
||||
view.overview = Violations Overview
|
||||
view.dataflowview = Dataflow View
|
||||
view.cpd = CPD View
|
||||
view.cpd2 = CPD View2
|
||||
view.cpd = CPD View
|
@ -190,6 +190,14 @@
|
||||
class="net.sourceforge.pmd.eclipse.ui.preferences.CPDPreferencePage"
|
||||
id="net.sourceforge.pmd.eclipse.ui.preferences.cpdPreferencePage">
|
||||
</page>
|
||||
|
||||
<page
|
||||
name="%preferences.report"
|
||||
category="net.sourceforge.pmd.eclipse.ui.preferences.generalPreferencesPage"
|
||||
class="net.sourceforge.pmd.eclipse.ui.reports.ReportPreferencesPage"
|
||||
id="net.sourceforge.pmd.eclipse.ui.preferences.reportsPreferencePage">
|
||||
</page>
|
||||
|
||||
</extension>
|
||||
|
||||
<extension
|
||||
|
@ -65,6 +65,7 @@ public interface IPreferences {
|
||||
String LOG_FILENAME_DEFAULT = "pmd-eclipse.log";
|
||||
Level LOG_LEVEL = Level.WARN;
|
||||
String ACTIVE_RULES = "";
|
||||
String ACTIVE_RENDERERS = "";
|
||||
|
||||
boolean boolFor(String prefId);
|
||||
|
||||
@ -74,6 +75,8 @@ public interface IPreferences {
|
||||
|
||||
void isActive(String ruleName, boolean flag);
|
||||
|
||||
boolean isActiveRenderer(String rendererName);
|
||||
|
||||
Set<String> getActiveRuleNames();
|
||||
|
||||
void setActiveRuleNames(Set<String> ruleNames);
|
||||
@ -192,6 +195,16 @@ public interface IPreferences {
|
||||
|
||||
// later...
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
Set<String> activeReportRenderers();
|
||||
|
||||
/**
|
||||
*
|
||||
* @param names
|
||||
*/
|
||||
void activeReportRenderers(Set<String> names);
|
||||
|
||||
/**
|
||||
* Synchronize the preferences with the preferences store
|
||||
|
@ -71,6 +71,7 @@ class PreferencesImpl implements IPreferences {
|
||||
private String logFileName;
|
||||
private Level logLevel;
|
||||
private Set<String> activeRuleNames = new HashSet<String>();
|
||||
private Set<String> activeRendererNames = new HashSet<String>();
|
||||
|
||||
private Map<RulePriority, PriorityDescriptor> uiDescriptorsByPriority = new HashMap<RulePriority, PriorityDescriptor>(5);
|
||||
|
||||
@ -230,6 +231,10 @@ class PreferencesImpl implements IPreferences {
|
||||
return activeRuleNames.contains(ruleName);
|
||||
}
|
||||
|
||||
public boolean isActiveRenderer(String rendererName) {
|
||||
return activeRendererNames.contains(rendererName);
|
||||
}
|
||||
|
||||
public void isActive(String ruleName, boolean flag) {
|
||||
if (flag) {
|
||||
activeRuleNames.add(ruleName);
|
||||
@ -262,4 +267,12 @@ class PreferencesImpl implements IPreferences {
|
||||
useCustomPriorityNames = flag;
|
||||
}
|
||||
|
||||
public Set<String> activeReportRenderers() {
|
||||
return activeRendererNames;
|
||||
}
|
||||
|
||||
public void activeReportRenderers(Set<String> names) {
|
||||
activeRendererNames = names;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -107,6 +107,7 @@ class PreferencesManagerImpl implements IPreferencesManager {
|
||||
private static final String LOG_FILENAME = PMDPlugin.PLUGIN_ID + ".log_filename";
|
||||
private static final String LOG_LEVEL = PMDPlugin.PLUGIN_ID + ".log_level";
|
||||
private static final String ACTIVE_RULES = PMDPlugin.PLUGIN_ID + ".active_rules";
|
||||
private static final String ACTIVE_RENDERERS = PMDPlugin.PLUGIN_ID + ".active_renderers";
|
||||
|
||||
private static final String OLD_PREFERENCE_PREFIX = "net.sourceforge.pmd.runtime";
|
||||
private static final String OLD_PREFERENCE_LOCATION = "/.metadata/.plugins/org.eclipse.core.runtime/.settings/net.sourceforge.pmd.runtime.prefs";
|
||||
@ -166,6 +167,7 @@ class PreferencesManagerImpl implements IPreferencesManager {
|
||||
loadLogFileName();
|
||||
loadLogLevel();
|
||||
loadActiveRules();
|
||||
loadActiveReportRenderers();
|
||||
loadRulePriorityDescriptors();
|
||||
|
||||
return preferences;
|
||||
@ -226,6 +228,7 @@ class PreferencesManagerImpl implements IPreferencesManager {
|
||||
storeLogFileName();
|
||||
storeLogLevel();
|
||||
storeActiveRules();
|
||||
storeActiveReportRenderers();
|
||||
storePriorityDescriptors();
|
||||
}
|
||||
|
||||
@ -304,6 +307,11 @@ class PreferencesManagerImpl implements IPreferencesManager {
|
||||
preferences.setActiveRuleNames(asStringSet(loadPreferencesStore.getString(ACTIVE_RULES), ","));
|
||||
}
|
||||
|
||||
private void loadActiveReportRenderers() {
|
||||
loadPreferencesStore.setDefault(ACTIVE_RENDERERS, IPreferences.ACTIVE_RENDERERS);
|
||||
preferences.activeReportRenderers(asStringSet(loadPreferencesStore.getString(ACTIVE_RENDERERS), ","));
|
||||
}
|
||||
|
||||
private void loadRulePriorityDescriptors() {
|
||||
|
||||
for (Map.Entry<RulePriority, String> entry : StoreKeysByPriority.entrySet()) {
|
||||
@ -344,6 +352,10 @@ class PreferencesManagerImpl implements IPreferencesManager {
|
||||
storePreferencesStore.setValue(ACTIVE_RULES, asDelimitedString(preferences.getActiveRuleNames(), ","));
|
||||
}
|
||||
|
||||
private void storeActiveReportRenderers() {
|
||||
storePreferencesStore.setValue(ACTIVE_RENDERERS, asDelimitedString(preferences.activeReportRenderers(), ","));
|
||||
}
|
||||
|
||||
private void storeProjectBuildPathEnabled() {
|
||||
storePreferencesStore.setValue(PROJECT_BUILD_PATH_ENABLED, preferences.isProjectBuildPathEnabled());
|
||||
}
|
||||
|
@ -1,16 +1,10 @@
|
||||
package net.sourceforge.pmd.eclipse.ui.actions;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import name.herlin.command.CommandException;
|
||||
import net.sourceforge.pmd.eclipse.runtime.cmd.RenderReportsCmd;
|
||||
import net.sourceforge.pmd.eclipse.ui.PMDUiConstants;
|
||||
import net.sourceforge.pmd.eclipse.ui.nls.StringKeys;
|
||||
import net.sourceforge.pmd.renderers.CSVRenderer;
|
||||
import net.sourceforge.pmd.renderers.HTMLRenderer;
|
||||
import net.sourceforge.pmd.renderers.TextRenderer;
|
||||
import net.sourceforge.pmd.renderers.VBHTMLRenderer;
|
||||
import net.sourceforge.pmd.renderers.XMLRenderer;
|
||||
import net.sourceforge.pmd.eclipse.ui.reports.ReportManager;
|
||||
import net.sourceforge.pmd.renderers.Renderer;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
@ -25,12 +19,21 @@ import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
* Generate a HTML report on the current project.
|
||||
*
|
||||
* @author Philippe Herlin
|
||||
*
|
||||
* @author Brian Remedios
|
||||
*/
|
||||
public class GenerateReportAction extends AbstractUIAction {
|
||||
|
||||
private static final Logger log = Logger.getLogger(GenerateReportAction.class);
|
||||
|
||||
private static final String DefaultReportName = "pmd-report";
|
||||
|
||||
private void registerRenderers(RenderReportsCmd cmd) {
|
||||
|
||||
for (Renderer renderer : ReportManager.instance.activeRenderers()) {
|
||||
cmd.registerRenderer(renderer, DefaultReportName + "." + renderer.defaultFileExtension());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.ui.IActionDelegate#run(IAction)
|
||||
*/
|
||||
@ -44,15 +47,7 @@ public class GenerateReportAction extends AbstractUIAction {
|
||||
final RenderReportsCmd cmd = new RenderReportsCmd();
|
||||
cmd.setProject(project);
|
||||
cmd.setUserInitiated(true);
|
||||
|
||||
// FIXME PMD 5.0
|
||||
Properties props = new Properties();
|
||||
cmd.registerRenderer(new HTMLRenderer(props), PMDUiConstants.HTML_REPORT_NAME);
|
||||
cmd.registerRenderer(new CSVRenderer(props), PMDUiConstants.CSV_REPORT_NAME);
|
||||
cmd.registerRenderer(new XMLRenderer(props), PMDUiConstants.XML_REPORT_NAME);
|
||||
cmd.registerRenderer(new TextRenderer(props), PMDUiConstants.TXT_REPORT_NAME);
|
||||
cmd.registerRenderer(new VBHTMLRenderer(props), PMDUiConstants.VBHTML_REPORT_NAME);
|
||||
|
||||
registerRenderers(cmd);
|
||||
cmd.performExecute();
|
||||
}
|
||||
} catch (CommandException e) {
|
||||
@ -73,7 +68,7 @@ public class GenerateReportAction extends AbstractUIAction {
|
||||
* @param selection
|
||||
* @return
|
||||
*/
|
||||
private IProject getProject(final IStructuredSelection selection) {
|
||||
private static IProject getProject(final IStructuredSelection selection) {
|
||||
IProject project = null;
|
||||
final Object object = selection.getFirstElement();
|
||||
if (object != null && object instanceof IAdaptable) {
|
||||
|
38
pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/reports/ReportColumnUI.java
Normal file
38
pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/reports/ReportColumnUI.java
Normal file
@ -0,0 +1,38 @@
|
||||
package net.sourceforge.pmd.eclipse.ui.reports;
|
||||
|
||||
import net.sourceforge.pmd.eclipse.ui.ItemColumnDescriptor;
|
||||
import net.sourceforge.pmd.eclipse.ui.ItemFieldAccessor;
|
||||
import net.sourceforge.pmd.eclipse.ui.ItemFieldAccessorAdapter;
|
||||
import net.sourceforge.pmd.renderers.Renderer;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Brian Remedios
|
||||
*/
|
||||
public interface ReportColumnUI {
|
||||
|
||||
ItemFieldAccessor<String, Renderer> nameAcc = new ItemFieldAccessorAdapter<String, Renderer>(null) {
|
||||
public String valueFor(Renderer renderer) { return renderer.getName(); }
|
||||
};
|
||||
|
||||
ItemFieldAccessor<String, Renderer> descriptionAcc = new ItemFieldAccessorAdapter<String, Renderer>(null) {
|
||||
public String valueFor(Renderer renderer) { return renderer.getDescription(); }
|
||||
};
|
||||
|
||||
ItemFieldAccessor<Boolean, Renderer> showSuppressedAcc = new ItemFieldAccessorAdapter<Boolean, Renderer>(null) {
|
||||
public Boolean valueFor(Renderer renderer) { return renderer.isShowSuppressedViolations(); }
|
||||
};
|
||||
|
||||
ItemFieldAccessor<String, Renderer> propertiesAcc = new ItemFieldAccessorAdapter<String, Renderer>(null) {
|
||||
public String valueFor(Renderer renderer) { return ReportManager.asString(renderer.getPropertyDefinitions()); }
|
||||
};
|
||||
|
||||
ItemColumnDescriptor<String, Renderer> name = new ItemColumnDescriptor<String, Renderer>("", "Name", SWT.LEFT, 55, true, nameAcc);
|
||||
ItemColumnDescriptor<String, Renderer> description = new ItemColumnDescriptor<String, Renderer>("", "Format", SWT.LEFT, 99, true, descriptionAcc);
|
||||
ItemColumnDescriptor<Boolean, Renderer> suppressed = new ItemColumnDescriptor<Boolean, Renderer>("", "Show suppressed", SWT.LEFT, 40, true, showSuppressedAcc);
|
||||
ItemColumnDescriptor<String, Renderer> properties = new ItemColumnDescriptor<String, Renderer>("", "Properties", SWT.LEFT, 99, true, propertiesAcc);
|
||||
|
||||
ItemColumnDescriptor[] VisibleColumns = new ItemColumnDescriptor[] { name, suppressed, properties };
|
||||
}
|
87
pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/reports/ReportManager.java
Normal file
87
pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/reports/ReportManager.java
Normal file
@ -0,0 +1,87 @@
|
||||
package net.sourceforge.pmd.eclipse.ui.reports;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
|
||||
import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences;
|
||||
import net.sourceforge.pmd.renderers.CSVRenderer;
|
||||
import net.sourceforge.pmd.renderers.HTMLRenderer;
|
||||
import net.sourceforge.pmd.renderers.Renderer;
|
||||
import net.sourceforge.pmd.renderers.TextRenderer;
|
||||
import net.sourceforge.pmd.renderers.VBHTMLRenderer;
|
||||
import net.sourceforge.pmd.renderers.XMLRenderer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Brian Remedios
|
||||
*/
|
||||
public class ReportManager {
|
||||
|
||||
private final Renderer[] allRenderers;
|
||||
|
||||
public static final ReportManager instance = new ReportManager();
|
||||
|
||||
private ReportManager() {
|
||||
allRenderers = knownRenderers();
|
||||
}
|
||||
|
||||
public Renderer[] allRenderers() { return allRenderers; }
|
||||
|
||||
private Renderer[] knownRenderers() {
|
||||
|
||||
Properties props = new Properties();
|
||||
|
||||
return new Renderer[] {
|
||||
new HTMLRenderer(props),
|
||||
new CSVRenderer(props),
|
||||
new XMLRenderer(props),
|
||||
new TextRenderer(props),
|
||||
new VBHTMLRenderer(props)
|
||||
};
|
||||
}
|
||||
|
||||
// public Renderer[] availableRenderers2() {
|
||||
//
|
||||
// List<Renderer> renderers = new ArrayList<Renderer>();
|
||||
//
|
||||
// for (String reportName : RendererFactory.REPORT_FORMAT_TO_RENDERER.keySet()) {
|
||||
// renderers.add(
|
||||
// RendererFactory.createRenderer(reportName, new Properties())
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// return renderers.toArray(new Renderer[renderers.size()]);
|
||||
// }
|
||||
|
||||
public List<Renderer> activeRenderers() {
|
||||
|
||||
List<Renderer> actives = new ArrayList<Renderer>();
|
||||
IPreferences prefs = PMDPlugin.getDefault().loadPreferences();
|
||||
|
||||
for (Renderer renderer : allRenderers) {
|
||||
if (prefs.isActiveRenderer(renderer.getName())) actives.add(renderer);
|
||||
}
|
||||
|
||||
return actives;
|
||||
}
|
||||
|
||||
public static String asString(Map<String, String> propertyDefinitions) {
|
||||
|
||||
if (propertyDefinitions.isEmpty()) return "";
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String[] keys = propertyDefinitions.keySet().toArray(new String[propertyDefinitions.size()]);
|
||||
|
||||
sb.append(keys[0]).append(": ").append(propertyDefinitions.get(keys[0]));
|
||||
|
||||
for (int i=1; i<keys.length; i++) {
|
||||
sb.append(", ").append(keys[i]).append(": ").append(propertyDefinitions.get(keys[i]));
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
454
pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/reports/ReportPreferencesPage.java
Normal file
454
pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/reports/ReportPreferencesPage.java
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user