1212import java .util .HashMap ;
1313import java .util .HashSet ;
1414import java .util .Iterator ;
15+ import java .util .List ;
1516import java .util .Map ;
1617import java .util .Set ;
1718
5455import org .slf4j .LoggerFactory ;
5556
5657import net .sourceforge .pmd .PMDConfiguration ;
58+ import net .sourceforge .pmd .Rule ;
5759import net .sourceforge .pmd .RuleSet ;
5860import net .sourceforge .pmd .RuleSetFactory ;
5961import net .sourceforge .pmd .RuleSetNotFoundException ;
7678import net .sourceforge .pmd .eclipse .runtime .writer .impl .WriterFactoryImpl ;
7779import net .sourceforge .pmd .eclipse .ui .RuleLabelDecorator ;
7880import net .sourceforge .pmd .eclipse .ui .ShapePainter ;
81+ import net .sourceforge .pmd .eclipse .ui .actions .RuleSetUtil ;
7982import net .sourceforge .pmd .eclipse .ui .nls .StringKeys ;
8083import net .sourceforge .pmd .eclipse .ui .nls .StringTable ;
8184import net .sourceforge .pmd .eclipse .ui .priority .PriorityDescriptorCache ;
8487import net .sourceforge .pmd .lang .LanguageRegistry ;
8588import net .sourceforge .pmd .lang .LanguageVersion ;
8689import net .sourceforge .pmd .lang .java .JavaLanguageModule ;
90+ import net .sourceforge .pmd .lang .rule .RuleReference ;
8791
8892/**
8993 * The activator class controls the plug-in life cycle
@@ -594,6 +598,7 @@ private void registerStandardRuleSets() {
594598 RuleSet ruleSet ;
595599 while (iterator .hasNext ()) {
596600 ruleSet = iterator .next ();
601+ ruleSet = removeDeprecatedRuleReferences (ruleSet );
597602 manager .registerRuleSet (ruleSet );
598603 manager .registerDefaultRuleSet (ruleSet );
599604 }
@@ -602,6 +607,21 @@ private void registerStandardRuleSets() {
602607 }
603608 }
604609
610+ private RuleSet removeDeprecatedRuleReferences (RuleSet ruleSet ) {
611+ List <Rule > rules = new ArrayList <>(ruleSet .getRules ());
612+ Iterator <Rule > it = rules .iterator ();
613+ while (it .hasNext ()) {
614+ Rule rule = it .next ();
615+ if (rule .isDeprecated () && rule instanceof RuleReference ) {
616+ LOG .debug ("Removed deprecated rule reference {} from ruleset {}" , rule .getName (), ruleSet .getName ());
617+ it .remove ();
618+ }
619+ }
620+ RuleSet result = RuleSetUtil .clearRules (ruleSet );
621+ result = RuleSetUtil .addRules (result , rules );
622+ return result ;
623+ }
624+
605625 /**
606626 * Register additional rulesets that may be provided by a fragment. Find extension points implementation and call
607627 * them
0 commit comments