Revision: 7092
http://pmd.svn.sourceforge.net/pmd/?rev=7092&view=rev
Author: hooperbloob
Date: 2010-03-26 00:16:57 +0000 (Fri, 26 Mar 2010)
Log Message:
-----------
Preferences
* Rule activation checkboxes now operational - only the checked rules are used to evaluate code. No longer need to physically remove rules from the ruleset to bypass them. Settings are stored in preferences and the number of active rules is shown in the dialog when PMD runs a scan. Minor UI bug in group-by mode doesn't render parent node checks initially.
* New SelectAll/None buttons and a SortByChecked items button. Replaced several text buttons with icon versions
* Selected rules & property tabs retained by UI preferences between sessions
Fixes
* New column in rule table showing number of available fixes per rule (just two for now). The new 'Fixes' tab in the properties folders needs additional work to complete it. The Fix menu option in the violations context menu works now for the two rules that have them. Need to provide better storage for rule-fix associations - current approach only stores fix classnames - should support classname + static instance var.
CPD
* Added launch button for the Swing version of the CPD UI to the preference page. Need to migrate its better functionality to the SWT version.
Modified Paths:
--------------
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/messages.properties
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/plugin.xml
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/builder/MarkerUtil.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewCodeCmd.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/IPreferences.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferencesImpl.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferencesManagerImpl.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/PMDUiConstants.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/PMDCheckAction.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/model/FileRecord.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/model/RepositoryUtil.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/nls/StringKeys.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/CPDPreferencePage.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractRuleColumnDescriptor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/IconColumnDescriptor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ImageColumnDescriptor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PMDPreferencePage.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleFieldAccessor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleSetTreeItemProvider.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/TODO items
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/TextColumnDescriptor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/SWTUtil.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/panelmanagers/FormArranger.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/panelmanagers/PerRulePropertyPanelManager.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/quickfix/DeleteLineFix.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/quickfix/PMDResolutionGenerator.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/ViolationOutline.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/actions/AbstractViolationSelectionAction.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/actions/ReviewAction.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/actions/ShowRuleAction.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/util/Util.java
Added Paths:
-----------
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/add.gif
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/btn_prio0.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/checkAll.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/delete.gif
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/downArrow.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/editTool.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/export.gif
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/icon_empty.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/icon_greenCheck.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/import.gif
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/sortChecked.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/uncheckAll.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/upArrow.png
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferenceUIStore.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/RuleSetUtil.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractPMDPreferencePage.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ModifyListener.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PMDPreferencePage2.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleSelectionListener.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleTableManager.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/panelmanagers/ListManager.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/panelmanagers/QuickFixPanelManager.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/quickfix/AbstractFix.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/quickfix/CommentOutLineFix.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/quickfix/SearchAndReplace.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/actions/DisableRuleAction.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/properties/QuickFix.properties
Removed Paths:
-------------
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PreferenceUIStore.java
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/add.gif
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/add.gif
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/btn_prio0.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/btn_prio0.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/checkAll.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/checkAll.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/delete.gif
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/delete.gif
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/downArrow.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/downArrow.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/editTool.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/editTool.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/export.gif
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/export.gif
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/icon_empty.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/icon_empty.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/icon_greenCheck.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/icon_greenCheck.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/import.gif
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/import.gif
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/sortChecked.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/sortChecked.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/uncheckAll.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/uncheckAll.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/upArrow.png
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/upArrow.png
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/messages.properties
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/messages.properties 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/messages.properties 2010-03-26 00:16:57 UTC (rev 7092)
@@ -46,14 +46,19 @@
preference.ruleset.label.exclude_patterns_table = Exclude patterns
preference.ruleset.label.include_patterns_table = Include patterns
preference.ruleset.label.rules_grouped_by = Rules grouped by
+preference.ruleset.label.active_rule_count = Active rules:
+
+preference.ruleset.button.tooltip.check.all = Check all rules
+preference.ruleset.button.tooltip.uncheck.all = Uncheck all rules
+
preference.ruleset.column.language = Language
preference.ruleset.column.language.tooltip = Target language
preference.ruleset.column.dataflow = DFA
preference.ruleset.column.dataflow.tooltip = Dataflow analysis
preference.ruleset.column.ruleset = Rule set
preference.ruleset.column.ruleset.tooltip = Current rule set
-preference.ruleset.column.ruleset_name = Rule set name
-preference.ruleset.column.rule_name = Rule name
+preference.ruleset.column.ruleset_name = Rule set
+preference.ruleset.column.rule_name = Rule
preference.ruleset.column.rule_type = Type
preference.ruleset.column.example_count = Examples
preference.ruleset.column.example_count.tooltip = Number of examples
@@ -67,6 +72,7 @@
preference.ruleset.column.since = Since
preference.ruleset.column.since.tooltip = Incorporation within PMD
preference.ruleset.column.priority = Priority
+preference.ruleset.column.fixCount = Fixes
preference.ruleset.column.priority.tooltip = Relative priority
preference.ruleset.column.description = Description
preference.ruleset.column.property = Property
@@ -104,6 +110,7 @@
preference.ruleedit.tab.description = Description
preference.ruleedit.tab.filters = Filters
preference.ruleedit.tab.xpath = XPath
+preference.ruleedit.tab.fixes = Fixes
preference.ruleedit.tab.examples = Examples
preference.ruleedit.label.exclusion_regex = Exclusion regular expression
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/plugin.xml
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/plugin.xml 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/plugin.xml 2010-03-26 00:16:57 UTC (rev 7092)
@@ -90,13 +90,14 @@
<page
name="%preferences.rulesets"
category="net.sourceforge.pmd.eclipse.ui.preferences.generalPreferencesPage"
- class="net.sourceforge.pmd.eclipse.ui.preferences.br.PMDPreferencePage"
+ class="net.sourceforge.pmd.eclipse.ui.preferences.br.PMDPreferencePage2"
id="net.sourceforge.pmd.eclipse.ui.preferences.pmdPreferencePage">
</page>
-
- <page name="Ruleset preferences - BR" category="net.sourceforge.pmd.ui.preferences.generalPreferencesPage" class="net.sourceforge.pmd.eclipse.ui.preferences.br.PMDPreferencePage" id="net.sourceforge.pmd.ui.preferences.pmdPreferencePage">
+
+<!--
+ <page name="Ruleset preferences - BR" category="net.sourceforge.pmd.ui.preferences.generalPreferencesPage" class="net.sourceforge.pmd.eclipse.ui.preferences.br.PMDPreferencePage2" id="net.sourceforge.pmd.ui.preferences.pmdPreferencePage">
</page>
-
+-->
<page
name="%preferences.cpd"
category="net.sourceforge.pmd.eclipse.ui.preferences.generalPreferencesPage"
@@ -367,13 +368,15 @@
category="net.sourceforge.pmd.eclipse.ui.views"
name="%view.overview"
id="net.sourceforge.pmd.eclipse.ui.views.violationOverview"/>
-<!-- <view temporary placement, under construction
+<!--
+ <view
allowMultiple="false"
icon="icons/icon_overview.gif"
class="net.sourceforge.pmd.eclipse.ui.views.br.ViolationOverviewBR"
category="net.sourceforge.pmd.eclipse.ui.views"
name="Violation Overview BR"
- id="net.sourceforge.pmd.eclipse.ui.views.violationOverview.br"/> -->
+ id="net.sourceforge.pmd.eclipse.ui.views.violationOverview.br"/>
+-->
<view
allowMultiple="false"
icon="icons/icon_dataflow.png"
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/builder/MarkerUtil.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/builder/MarkerUtil.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/builder/MarkerUtil.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -3,10 +3,17 @@
import java.util.ArrayList;
import java.util.List;
+import net.sourceforge.pmd.Rule;
+import net.sourceforge.pmd.RuleSet;
+import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
+import net.sourceforge.pmd.eclipse.ui.PMDUiConstants;
+import net.sourceforge.pmd.util.StringUtil;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.runtime.CoreException;
/**
@@ -19,6 +26,85 @@
private MarkerUtil() { }
+ public static boolean hasAnyRuleMarkers(IResource resource) throws CoreException {
+
+ final boolean foundOne[] = new boolean[] { false };
+
+ IResourceVisitor ruleMarkerFinder = new IResourceVisitor() {
+
+ public boolean visit(IResource resource) {
+
+ if (foundOne[0]) return false;
+
+ if (resource instanceof IFile) {
+
+ IMarker[] ruleMarkers = null;
+ try {
+ ruleMarkers = resource.findMarkers(PMDRuntimeConstants.PMD_MARKER, true, IResource.DEPTH_INFINITE);
+ } catch (CoreException ex) {
+ // what do to?
+ }
+ if (ruleMarkers.length > 0) {
+ foundOne[0] = true;
+ return false;
+ }
+ }
+
+ return true;
+ }
+ };
+
+ try {
+ resource.accept(ruleMarkerFinder);
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return foundOne[0];
+ }
+
+ public static String ruleNameFor(IMarker marker) {
+ return marker.getAttribute(PMDUiConstants.KEY_MARKERATT_RULENAME, "");
+ }
+
+ public static int rulePriorityFor(IMarker marker) throws CoreException {
+ return ((Integer)marker.getAttribute(PMDUiConstants.KEY_MARKERATT_PRIORITY)).intValue();
+ }
+
+ public static List<Rule> rulesFor(IMarker[] markers) {
+
+ List<Rule> rules = new ArrayList<Rule>(markers.length);
+ RuleSet ruleset = PMDPlugin.getDefault().getPreferencesManager().getRuleSet();
+
+ for (IMarker marker : markers) {
+ String name = ruleNameFor(marker);
+ if (StringUtil.isEmpty(name)) continue;
+ Rule rule = ruleset.getRuleByName(name);
+ if (rule == null) continue;
+ rules.add(rule);
+ }
+
+ return rules;
+ }
+
+ /**
+ * Returns the name of the rule that is common to all markers
+ * or null if any one of them differ.
+ *
+ * @param IMarker[] markers
+ * @return String
+ */
+ public static String commonRuleNameAmong(IMarker[] markers) {
+
+ String ruleName = ruleNameFor(markers[0]);
+ for (int i=1; i<markers.length; i++) {
+ if (!ruleName.equals(ruleNameFor(markers[i]))) return null;
+ }
+
+ return ruleName;
+ }
+
public static void deleteAllMarkersIn(IResource resource) throws CoreException {
deleteMarkersIn(resource, PMDRuntimeConstants.ALL_MARKER_TYPES);
}
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewCodeCmd.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewCodeCmd.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewCodeCmd.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -48,8 +48,10 @@
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
import net.sourceforge.pmd.eclipse.runtime.builder.MarkerUtil;
+import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences;
import net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties;
import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException;
+import net.sourceforge.pmd.eclipse.ui.actions.RuleSetUtil;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IContainer;
@@ -93,6 +95,7 @@
private int ruleCount;
private int fileCount;
private long pmdDuration;
+ private String onErrorIssue = null;
private static final long serialVersionUID = 1L;
@@ -121,8 +124,9 @@
this.pmdDuration = 0;
beginTask("PMD checking...", getStepCount());
+
// Lancer PMD
- if (this.resources.isEmpty()) {
+ if (resources.isEmpty()) {
processResourceDelta();
} else {
processResources();
@@ -155,21 +159,19 @@
done();
// Log performance information
- if (this.fileCount > 0 && this.ruleCount > 0) {
+ if (fileCount > 0 && ruleCount > 0) {
logInfo(
- "Review code command terminated. " + this.ruleCount + " rules were executed against " + this.fileCount
- + " files. Actual PMD duration is about " + this.pmdDuration + "ms, that is about "
- + (float)this.pmdDuration / this.fileCount
+ "Review code command terminated. " + ruleCount + " rules were executed against " + fileCount
+ + " files. Actual PMD duration is about " + pmdDuration + "ms, that is about "
+ + (float)pmdDuration / fileCount
+ " ms/file, "
- + (float)this.pmdDuration / this.ruleCount
+ + (float)pmdDuration / ruleCount
+ " ms/rule, "
- + (float)this.pmdDuration / ((long) this.fileCount * (long) this.ruleCount)
+ + (float)pmdDuration / ((long) fileCount * (long) ruleCount)
+ " ms/filerule"
);
} else {
- logInfo(
- "Review code command terminated. " + this.ruleCount + " rules were executed against " + this.fileCount
- + " files. PMD was not executed.");
+ logInfo("Review code command terminated. " + ruleCount + " rules were executed against " + fileCount + " files. PMD was not executed.");
}
}
}
@@ -185,8 +187,8 @@
* @param resource The resource to set.
*/
public void setResources(final List<ISchedulingRule> resources) {
- this.resources.clear();
- this.resources.addAll(resources);
+ resources.clear();
+ resources.addAll(resources);
}
/**
@@ -199,7 +201,7 @@
throw new IllegalArgumentException("Resource parameter can not be null");
}
- this.resources.add(resource);
+ resources.add(resource);
}
/**
@@ -229,10 +231,11 @@
*/
@Override
public void reset() {
- this.resources.clear();
- this.markersByFile = new HashMap<IFile, Set<MarkerInfo>>();
- this.setTerminated(false);
- this.openPmdPerspective = false;
+ resources.clear();
+ markersByFile = new HashMap<IFile, Set<MarkerInfo>>();
+ setTerminated(false);
+ openPmdPerspective = false;
+ onErrorIssue = null;
}
/**
@@ -240,7 +243,7 @@
*/
@Override
public boolean isReadyToExecute() {
- return this.resources.size() != 0 || this.resourceDelta != null;
+ return resources.size() != 0 || resourceDelta != null;
}
/**
@@ -251,14 +254,14 @@
final IResourceRuleFactory ruleFactory = workspace.getRuleFactory();
ISchedulingRule rule = null;
- if (this.resources.isEmpty()) {
- rule = ruleFactory.markerRule(this.resourceDelta.getResource().getProject());
+ if (resources.isEmpty()) {
+ rule = ruleFactory.markerRule(resourceDelta.getResource().getProject());
} else {
- ISchedulingRule rules[] = new ISchedulingRule[this.resources.size()];
+ ISchedulingRule rules[] = new ISchedulingRule[resources.size()];
for (int i = 0; i < rules.length; i++) {
- rules[i] = ruleFactory.markerRule((IResource) this.resources.get(i));
+ rules[i] = ruleFactory.markerRule((IResource) resources.get(i));
}
- rule = new MultiRule(this.resources.toArray(rules));
+ rule = new MultiRule(resources.toArray(rules));
}
return rule;
@@ -270,7 +273,7 @@
* @throws CommandException
*/
private void processResources() throws CommandException {
- final Iterator<ISchedulingRule> i = this.resources.iterator();
+ final Iterator<ISchedulingRule> i = resources.iterator();
while (i.hasNext()) {
final IResource resource = (IResource) i.next();
@@ -290,7 +293,9 @@
try {
final IProject project = resource.getProject();
final IProjectProperties properties = PMDPlugin.getDefault().loadProjectProperties(project);
- final RuleSet ruleSet = properties.getProjectRuleSet();
+
+ final RuleSet ruleSet = filteredRuleSet(properties); //properties.getProjectRuleSet();
+
final PMDEngine pmdEngine = getPmdEngineForProject(project);
setStepCount(countResourceElement(resource));
log.debug("Visiting resource " + resource.getName() + " : " + getStepCount());
@@ -304,9 +309,9 @@
visitor.setProjectProperties(properties);
resource.accept(visitor);
- this.ruleCount = ruleSet.getRules().size();
- this.fileCount += visitor.getProcessedFilesCount();
- this.pmdDuration += visitor.getActualPmdDuration();
+ ruleCount = ruleSet.getRules().size();
+ fileCount += visitor.getProcessedFilesCount();
+ pmdDuration += visitor.getActualPmdDuration();
} catch (PropertiesException e) {
throw new CommandException(e);
@@ -355,7 +360,23 @@
throw new CommandException(e);
}
}
+
+ private void taskScope(int activeRuleCount, int totalRuleCount) {
+ setTaskName("Checking with " + Integer.toString(activeRuleCount) + " out of " + Integer.toString(totalRuleCount) + " rules");
+ }
+ private RuleSet filteredRuleSet(IProjectProperties properties) throws CommandException, PropertiesException {
+
+ final RuleSet ruleSet = properties.getProjectRuleSet();
+ IPreferences preferences = PMDPlugin.getDefault().getPreferencesManager().loadPreferences();
+ Set<String> activeRuleNames = preferences.getActiveRuleNames();
+
+ RuleSet filteredRuleSet = RuleSetUtil.newCopyOf(ruleSet);
+ RuleSetUtil.retainOnly(filteredRuleSet, activeRuleNames);
+ taskScope(filteredRuleSet.getRules().size(), ruleSet.getRules().size());
+ return filteredRuleSet;
+ }
+
/**
* Review a resource delta
*/
@@ -363,7 +384,9 @@
try {
final IProject project = this.resourceDelta.getResource().getProject();
final IProjectProperties properties = PMDPlugin.getDefault().loadProjectProperties(project);
- final RuleSet ruleSet = properties.getProjectRuleSet();
+
+ final RuleSet ruleSet = filteredRuleSet(properties); //properties.getProjectRuleSet();
+
final PMDEngine pmdEngine = getPmdEngineForProject(project);
this.setStepCount(countDeltaElement(this.resourceDelta));
log.debug("Visit of resource delta : " + getStepCount());
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/IPreferences.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/IPreferences.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/IPreferences.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -36,6 +36,8 @@
package net.sourceforge.pmd.eclipse.runtime.preferences;
+import java.util.Set;
+
import org.apache.log4j.Level;
/**
@@ -57,7 +59,16 @@
int MIN_TILE_SIZE_DEFAULT = 25;
String LOG_FILENAME_DEFAULT = "pmd-eclipse.log";
Level LOG_LEVEL = Level.WARN;
+ String ACTIVE_RULES = "";
+ boolean isActive(String rulename);
+
+ void isActive(String ruleName, boolean flag);
+
+ Set<String> getActiveRuleNames();
+
+ void setActiveRuleNames(Set<String> ruleNames);
+
/**
* Should the Project Build Path be used?
*/
Copied: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferenceUIStore.java (from rev 7084, trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PreferenceUIStore.java)
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferenceUIStore.java (rev 0)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferenceUIStore.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -0,0 +1,146 @@
+package net.sourceforge.pmd.eclipse.runtime.preferences.impl;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
+import net.sourceforge.pmd.eclipse.ui.preferences.br.RuleColumnDescriptor;
+import net.sourceforge.pmd.eclipse.ui.preferences.br.TextColumnDescriptor;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.SWTUtil;
+
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.preference.PreferenceStore;
+
+/**
+ *
+ *
+ * @author Brian Remedios
+ */
+public class PreferenceUIStore {
+
+ private PreferenceStore preferenceStore;
+
+ private static final String tableFraction = PMDPlugin.PLUGIN_ID + ".ruletable.fraction";
+ private static final String tableHiddenCols = PMDPlugin.PLUGIN_ID + ".ruletable.hiddenColumns";
+ private static final String tableColumnSortUp = PMDPlugin.PLUGIN_ID + ".ruletable.sortUp";
+ private static final String groupingColumn = PMDPlugin.PLUGIN_ID + ".ruletable.groupingColumn";
+ private static final String selectedRuleNames = PMDPlugin.PLUGIN_ID + ".ruletable.selectedRules";
+ private static final String selectedPropertyTab = PMDPlugin.PLUGIN_ID + ".ruletable.selectedPropertyTab";
+
+ private static final int tableFractionDefault = 55;
+ private static final char stringSeparator = ',';
+
+ private static final RuleColumnDescriptor[] defaultHiddenColumns = new RuleColumnDescriptor[] {
+ TextColumnDescriptor.externalURL, TextColumnDescriptor.minLangVers,
+ TextColumnDescriptor.exampleCount, TextColumnDescriptor.since
+ };
+
+ private static final boolean defaultSortUp = false;
+
+ public static final PreferenceUIStore instance = new PreferenceUIStore();
+
+ private static String defaultHiddenColumnNames() {
+ Set<String> colNames = new HashSet<String>(defaultHiddenColumns.length);
+ for (RuleColumnDescriptor rcDesc : defaultHiddenColumns) {
+ colNames.add(rcDesc.label());
+ }
+ return SWTUtil.asString(colNames, stringSeparator);
+ }
+
+ private PreferenceUIStore() {
+ initialize();
+ }
+
+ private void initialize() {
+
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ IPath path = root.getLocation();
+ String fileName = path.append(PreferencesManagerImpl.NEW_PREFERENCE_LOCATION).toString();
+
+ // TODO - replace this with the existing ViewMemento
+ preferenceStore = new PreferenceStore(fileName);
+
+ try {
+ preferenceStore.load();
+ } catch (IOException e) {
+ createNewStore();
+ }
+ }
+
+ private void createNewStore() {
+
+ preferenceStore.setValue(tableFraction, tableFractionDefault);
+ preferenceStore.setValue(tableHiddenCols, defaultHiddenColumnNames());
+ preferenceStore.setValue(tableColumnSortUp, defaultSortUp);
+ preferenceStore.setValue(groupingColumn, "");
+ preferenceStore.setValue(selectedRuleNames, "");
+ preferenceStore.setValue(selectedPropertyTab, 0);
+
+ save();
+ }
+
+ public void save() {
+
+ try {
+ preferenceStore.save();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public int tableFraction() {
+ return preferenceStore.getInt(tableFraction);
+ }
+
+ public void tableFraction(int aFraction) {
+ preferenceStore.setValue(tableFraction, aFraction);
+ }
+
+ public Set<String> hiddenColumnNames() {
+ String names = preferenceStore.getString(tableHiddenCols);
+ return SWTUtil.asStringSet(names, stringSeparator);
+ }
+
+ public void hiddenColumnNames(Set<String> names) {
+ String nameStr = SWTUtil.asString(names, stringSeparator);
+ preferenceStore.setValue(tableHiddenCols, nameStr);
+ }
+
+ public int selectedPropertyTab() {
+ return preferenceStore.getInt(selectedPropertyTab);
+ }
+
+ public void selectedPropertyTab(int anIndex) {
+ preferenceStore.setValue(selectedPropertyTab, anIndex);
+ }
+
+ public Set<String> selectedRuleNames() {
+ String names = preferenceStore.getString(selectedRuleNames);
+ return SWTUtil.asStringSet(names, stringSeparator);
+ }
+
+ public void selectedRuleNames(Collection<String> ruleNames) {
+ String nameStr = SWTUtil.asString(ruleNames, stringSeparator);
+ preferenceStore.setValue(selectedRuleNames, nameStr);
+ }
+
+ public boolean sortDirectionUp() {
+ return preferenceStore.getBoolean(tableColumnSortUp);
+ }
+
+ public void sortDirectionUp(boolean isUp) {
+ preferenceStore.setValue(tableColumnSortUp, isUp);
+ }
+
+ public String groupingColumnName() {
+ return preferenceStore.getString(groupingColumn);
+ }
+
+ public void groupingColumnName(String columnName) {
+ preferenceStore.setValue(groupingColumn, columnName);
+ }
+}
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferencesImpl.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferencesImpl.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferencesImpl.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -36,11 +36,14 @@
package net.sourceforge.pmd.eclipse.runtime.preferences.impl;
-import org.apache.log4j.Level;
+import java.util.HashSet;
+import java.util.Set;
import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences;
import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferencesManager;
+import org.apache.log4j.Level;
+
/**
* Implements the preferences information structure
*
@@ -49,16 +52,17 @@
*/
class PreferencesImpl implements IPreferences {
+
private IPreferencesManager preferencesManager;
- private boolean projectBuildPathEnabled;
- private boolean pmdPerspectiveEnabled;
- private int maxViolationsPerFilePerRule;
- private String reviewAdditionalComment;
- private boolean reviewPmdStyleEnabled;
- private int minTileSize;
- private String logFileName;
- private Level logLevel;
-
+ private boolean projectBuildPathEnabled;
+ private boolean pmdPerspectiveEnabled;
+ private int maxViolationsPerFilePerRule;
+ private String reviewAdditionalComment;
+ private boolean reviewPmdStyleEnabled;
+ private int minTileSize;
+ private String logFileName;
+ private Level logLevel;
+ private Set<String> activeRuleNames = new HashSet<String>();
/**
* Is constructed from a preferences manager
* @param preferencesManager
@@ -187,4 +191,24 @@
this.preferencesManager.storePreferences(this);
}
+ public boolean isActive(String ruleName) {
+ return activeRuleNames.contains(ruleName);
+ }
+
+ public void isActive(String ruleName, boolean flag) {
+ if (flag) {
+ activeRuleNames.add(ruleName);
+ } else {
+ activeRuleNames.remove(ruleName);
+ }
+ }
+
+ public Set<String> getActiveRuleNames() {
+ return activeRuleNames;
+ }
+
+ public void setActiveRuleNames(Set<String> ruleNames) {
+ activeRuleNames = ruleNames;
+ }
+
}
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferencesManagerImpl.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferencesManagerImpl.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/preferences/impl/PreferencesManagerImpl.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -60,6 +60,7 @@
import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException;
import net.sourceforge.pmd.eclipse.runtime.writer.IRuleSetWriter;
import net.sourceforge.pmd.eclipse.runtime.writer.WriterException;
+import net.sourceforge.pmd.util.StringUtil;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
@@ -88,10 +89,11 @@
private static final String MIN_TILE_SIZE = PMDPlugin.PLUGIN_ID + ".min_tile_size";
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 DISABLED_RULES = PMDPlugin.PLUGIN_ID + ".disabled_rules";
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";
- private static final String NEW_PREFERENCE_LOCATION = "/.metadata/.plugins/org.eclipse.core.runtime/.settings/net.sourceforge.pmd.eclipse.plugin.prefs";
+ public static final String NEW_PREFERENCE_LOCATION = "/.metadata/.plugins/org.eclipse.core.runtime/.settings/net.sourceforge.pmd.eclipse.plugin.prefs";
private static final String PREFERENCE_RULESET_FILE = "/ruleset.xml";
@@ -118,6 +120,7 @@
loadMinTileSize();
loadLogFileName();
loadLogLevel();
+ loadActiveRules();
}
return this.preferences;
@@ -175,6 +178,7 @@
storeMinTileSize();
storeLogFileName();
storeLogLevel();
+ storeActiveRules();
}
/**
@@ -270,6 +274,44 @@
}
/**
+ * Read the disabled rules
+ *
+ */
+ private void loadActiveRules() {
+ this.loadPreferencesStore.setDefault(DISABLED_RULES, IPreferences.ACTIVE_RULES);
+ this.preferences.setActiveRuleNames(asStringSet(loadPreferencesStore.getString(DISABLED_RULES), ","));
+ }
+
+ private static Set<String> asStringSet(String delimitedString, String delimiter) {
+
+ String[] values = delimitedString.split(delimiter);
+ Set<String> valueSet = new HashSet<String>(values.length);
+ for (int i=0; i<values.length; i++) {
+ String name = values[i].trim();
+ if (StringUtil.isEmpty(name)) continue;
+ valueSet.add(name);
+ }
+ return valueSet;
+ }
+
+ private static String asDelimitedString(Set<String>values, String delimiter) {
+
+ if (values == null || values.isEmpty()) return "";
+
+ StringBuilder sb = new StringBuilder();
+
+ for (String value : values) {
+ sb.append(delimiter).append(value);
+ }
+
+ return sb.toString();
+ }
+
+ private void storeActiveRules() {
+ storePreferencesStore.setValue(DISABLED_RULES, asDelimitedString(preferences.getActiveRuleNames(), ","));
+ }
+
+ /**
* Write the projectBuildPathEnabled flag
*/
private void storeProjectBuildPathEnabled() {
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/PMDUiConstants.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/PMDUiConstants.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/PMDUiConstants.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -80,7 +80,8 @@
public static final String ICON_PROJECT = "icons/obj_project.gif";
public static final String ICON_PACKAGE = "icons/obj_package.gif";
public static final String ICON_JAVACU = "icons/obj_javacu.gif";
-
+
+ public static final String ICON_BUTTON_PRIO0 = "icons/btn_prio0.png";
public static final String ICON_BUTTON_PRIO1 = "icons/btn_prio1.gif";
public static final String ICON_BUTTON_PRIO2 = "icons/btn_prio2.gif";
public static final String ICON_BUTTON_PRIO3 = "icons/btn_prio3.gif";
@@ -91,7 +92,8 @@
public static final String ICON_BUTTON_FILEMARKERS = "icons/btn_filemarkers.gif";
public static final String ICON_BUTTON_MARKERFILES = "icons/btn_markerfiles.gif";
public static final String ICON_BUTTON_FILES = "icons/btn_files.gif";
-
+
+ public static final String ICON_BUTTON_DISABLE = "icons/btn_disable.gif";
public static final String ICON_BUTTON_COLLAPSE = "icons/btn_collapse.gif";
public static final String ICON_BUTTON_REMVIO = "icons/btn_remvio.gif";
public static final String ICON_BUTTON_QUICKFIX = "icons/btn_quickfix.gif";
@@ -99,6 +101,21 @@
public static final String ICON_BUTTON_REFRESH = "icons/btn_refresh.gif";
public static final String ICON_BUTTON_CALCULATE = "icons/btn_calculate.gif";
+
+ public static final String ICON_BUTTON_UPARROW = "icons/upArrow.png";
+ public static final String ICON_BUTTON_DOWNARROW = "icons/downArrow.png";
+ public static final String ICON_BUTTON_ADD = "icons/add.gif";
+ public static final String ICON_BUTTON_DELETE = "icons/delete.gif";
+ public static final String ICON_BUTTON_CHECK_ALL = "icons/checkAll.png";
+ public static final String ICON_BUTTON_UNCHECK_ALL = "icons/uncheckAll.png";
+ public static final String ICON_BUTTON_IMPORT = "icons/import.gif";
+ public static final String ICON_BUTTON_EXPORT = "icons/export.gif";
+ public static final String ICON_BUTTON_EDITOR = "icons/editTool.png";
+ public static final String ICON_BUTTON_SORT_CHECKED = "icons/sortChecked.png";
+
+ public static final String ICON_GREEN_CHECK = "icons/icon_greenCheck.png";
+ public static final String ICON_EMPTY = "icons/icon_empty.png";
+
public static final String ID_PERSPECTIVE = PLUGIN_ID + ".views.pmdPerspective";
public static final String ID_OUTLINE = PLUGIN_ID + ".views.violationOutline";
public static final String ID_OVERVIEW = PLUGIN_ID + ".views.violationOverview";
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/PMDCheckAction.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/PMDCheckAction.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/PMDCheckAction.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -79,8 +79,7 @@
if (selection instanceof IStructuredSelection) {
reviewSelectedResources((IStructuredSelection) selection);
} else {
- log.debug("The selection is not an instance of IStructuredSelection. This is not supported: "
- + selection.getClass().getName());
+ log.debug("The selection is not an instance of IStructuredSelection. This is not supported: " + selection.getClass().getName());
}
}
@@ -90,8 +89,7 @@
if (editorInput instanceof IFileEditorInput) {
reviewSingleResource(((IFileEditorInput) editorInput).getFile());
} else {
- log.debug("The kind of editor input is not supported. The editor input if of type: "
- + editorInput.getClass().getName());
+ log.debug("The kind of editor input is not supported. The editor input if of type: " + editorInput.getClass().getName());
}
}
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/RuleSetUtil.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/RuleSetUtil.java (rev 0)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/RuleSetUtil.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -0,0 +1,50 @@
+package net.sourceforge.pmd.eclipse.ui.actions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import net.sourceforge.pmd.Rule;
+import net.sourceforge.pmd.RuleSet;
+
+/**
+ *
+ * @author Brian Remedios
+ */
+public class RuleSetUtil {
+
+ public static RuleSet newCopyOf(RuleSet original) {
+
+ RuleSet rs = new RuleSet();
+ rs.setName(original.getName());
+ rs.setDescription(original.getDescription());
+ rs.setFileName(original.getFileName());
+ rs.setExcludePatterns(original.getExcludePatterns());
+ rs.setIncludePatterns(original.getIncludePatterns());
+ rs.addRuleSet(original);
+
+ return rs;
+ }
+
+ /**
+ * This should not really work but the ruleset hands out its
+ * internal container....oops! :)
+ *
+ * @param ruleSet
+ * @param unwantedRuleNames
+ */
+ public static void retainOnly(RuleSet ruleSet, Set<String> wantedRuleNames) {
+
+ Collection<Rule> rules = ruleSet.getRules();
+ Collection<Rule> ruleCopy = new ArrayList<Rule>(rules.size());
+ ruleCopy.addAll(rules);
+
+ for (Rule rule : ruleCopy) {
+ if (!wantedRuleNames.contains(rule.getName())) {
+ rules.remove(rule);
+ }
+ }
+
+ }
+}
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/actions/RuleSetUtil.java
___________________________________________________________________
Added: svn:executable
+ *
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/model/FileRecord.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/model/FileRecord.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/model/FileRecord.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -159,12 +159,13 @@
while (markerIterator.hasNext()) {
final IMarker marker = markerIterator.next();
- MarkerRecord markerRecord = allMarkerMap.get(marker.getAttribute(PMDUiConstants.KEY_MARKERATT_RULENAME));
+ MarkerRecord markerRecord = allMarkerMap.get(MarkerUtil.ruleNameFor(marker));
if (markerRecord == null) {
- String ruleName = (String)marker.getAttribute(PMDUiConstants.KEY_MARKERATT_RULENAME);
+ String ruleName = MarkerUtil.ruleNameFor(marker);
markerRecord = new MarkerRecord(this, // NOPMD by Sven on 13.11.06 11:57
ruleName,
- ((Integer)marker.getAttribute(PMDUiConstants.KEY_MARKERATT_PRIORITY)).intValue());
+ MarkerUtil.rulePriorityFor(marker)
+ );
markerRecord.addViolation(marker);
allMarkerMap.put(ruleName, markerRecord);
} else {
@@ -430,7 +431,7 @@
return RepositoryUtil.hasRepositoryAccess() ?
RepositoryUtil.authorNameFor(resource) :
- "<unknown>";
+ null;
}
/**
* @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getResourceType()
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/model/RepositoryUtil.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/model/RepositoryUtil.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/model/RepositoryUtil.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -3,6 +3,7 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.team.core.RepositoryProvider;
+import org.eclipse.team.core.history.IFileHistoryProvider;
import org.eclipse.team.core.history.IFileRevision;
/**
@@ -20,7 +21,7 @@
if (hasRepositoryAccess != null) return hasRepositoryAccess;
try {
- Object cls = Class.forName("org.eclipse.team.core.RepositoryProvider");
+ Class.forName("org.eclipse.team.core.RepositoryProvider");
hasRepositoryAccess = Boolean.TRUE;
} catch (ClassNotFoundException e) {
hasRepositoryAccess = Boolean.FALSE;
@@ -29,13 +30,25 @@
return hasRepositoryAccess;
}
+ /**
+ * Returns the name of the resource author if the resource was parked in
+ * a repository or null if it wasn't.
+ *
+ * @param resource
+ * @return String
+ */
public static String authorNameFor(IResource resource) {
IProject project = resource.getProject();
String authorName = null;
try {
RepositoryProvider provider = RepositoryProvider.getProvider(project);
- IFileRevision revision = provider.getFileHistoryProvider().getWorkspaceFileRevision(resource);
+ if (provider == null) return null;
+
+ IFileHistoryProvider fhProvider = provider.getFileHistoryProvider();
+ if (fhProvider == null) return null;
+
+ IFileRevision revision = fhProvider.getWorkspaceFileRevision(resource);
authorName = revision.getAuthor();
} catch (Exception ex) {
ex.printStackTrace();
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/nls/StringKeys.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/nls/StringKeys.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/nls/StringKeys.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -96,6 +96,7 @@
public static final String MSGKEY_PREF_RULESET_COLUMN_FILTERS_XPATH = "preference.ruleset.column.filters.xpath";
public static final String MSGKEY_PREF_RULESET_COLUMN_MIN_VER = "preference.ruleset.column.minimum_version";
public static final String MSGKEY_PREF_RULESET_COLUMN_PRIORITY = "preference.ruleset.column.priority";
+ public static final String MSGKEY_PREF_RULESET_COLUMN_FIXCOUNT = "preference.ruleset.column.fixCount";
public static final String MSGKEY_PREF_RULESET_COLUMN_PROPERTIES = "preference.ruleset.column.properties";
public static final String MSGKEY_PREF_RULESET_COLUMN_DESCRIPTION = "preference.ruleset.column.description";
public static final String MSGKEY_PREF_RULESET_COLUMN_PROPERTY = "preference.ruleset.column.property";
@@ -121,11 +122,16 @@
public static final String MSGKEY_PREF_RULESET_DIALOG_PROPERTY_NAME = "preference.ruleset.dialog.property_name";
public static final String MSGKEY_PREF_RULESET_RULES_GROUPED_BY = "preference.ruleset.label.rules_grouped_by";
+ public static final String MSGKEY_PREF_RULESET_ACTIVE_RULE_COUNT = "preference.ruleset.label.active_rule_count";
+ public static final String MSGKEY_PREF_RULESET_BUTTON_CHECK_ALL = "preference.ruleset.button.tooltip.check.all";
+ public static final String MSGKEY_PREF_RULESET_BUTTON_UNCHECK_ALL = "preference.ruleset.button.tooltip.uncheck.all";
+
public static final String MSGKEY_PREF_RULESET_TAB_PROPERTIES = "preference.ruleedit.tab.properties";
public static final String MSGKEY_PREF_RULESET_TAB_DESCRIPTION = "preference.ruleedit.tab.description";
public static final String MSGKEY_PREF_RULESET_TAB_FILTERS = "preference.ruleedit.tab.filters";
public static final String MSGKEY_PREF_RULESET_TAB_XPATH = "preference.ruleedit.tab.xpath";
+ public static final String MSGKEY_PREF_RULESET_TAB_FIXES = "preference.ruleedit.tab.fixes";
public static final String MSGKEY_PREF_RULESET_TAB_EXAMPLES = "preference.ruleedit.tab.examples";
public static final String MSGKEY_LABEL_XPATH_EXCLUSION = "preference.ruleedit.label.xpath_exclusion";
@@ -208,6 +214,7 @@
public static final String MSGKEY_VIEW_COLUMN_LOCATION = "view.column.location";
public static final String MSGKEY_VIEW_TOOLTIP_PROJECT = "view.tooltip.project";
public static final String MSGKEY_VIEW_TOOLTIP_FILE = "view.tooltip.file";
+ public static final String MSGKEY_VIEW_TOOLTIP_DISABLE = "view.tooltip.disable";
public static final String MSGKEY_VIEW_TOOLTIP_ERRORHIGH_FILTER = "view.tooltip.errorhigh_filter";
public static final String MSGKEY_VIEW_TOOLTIP_ERROR_FILTER = "view.tooltip.error_filter";
public static final String MSGKEY_VIEW_TOOLTIP_WARNINGHIGH_FILTER = "view.tooltip.warninghigh_filter";
@@ -219,7 +226,9 @@
public static final String MSGKEY_VIEW_TOOLTIP_REVIEW = "view.tooltip.review";
public static final String MSGKEY_VIEW_TOOLTIP_QUICKFIX = "view.tooltip.quickfix";
public static final String MSGKEY_VIEW_TOOLTIP_CALCULATE_STATS = "view.tooltip.calc_stats";
+ public static final String MSGKEY_VIEW_TOOLTIP_COMPUTE_METRICS = "view.tooltip.compute_metrics";
public static final String MSGKEY_VIEW_ACTION_PROJECT = "view.action.project";
+ public static final String MSGKEY_VIEW_ACTION_DISABLE = "view.action.disable";
public static final String MSGKEY_VIEW_ACTION_FILE = "view.action.file";
public static final String MSGKEY_VIEW_ACTION_ERRORHIGH = "view.action.errorhigh";
public static final String MSGKEY_VIEW_ACTION_ERROR = "view.action.error";
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/CPDPreferencePage.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/CPDPreferencePage.java 2010-03-09 18:30:54 UTC (rev 7091)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/CPDPreferencePage.java 2010-03-26 00:16:57 UTC (rev 7092)
@@ -1,20 +1,22 @@
package net.sourceforge.pmd.eclipse.ui.preferences;
-import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
+import net.sourceforge.pmd.cpd.GUI;
import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences;
import net.sourceforge.pmd.eclipse.ui.nls.StringKeys;
+import net.sourceforge.pmd.eclipse.ui.preferences.br.AbstractPMDPreferencePage;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
+imp...
[truncated message content] |