From afc0f257955caf978a2f4808b52aace960010c30 Mon Sep 17 00:00:00 2001 From: Frits Jalvingh Date: Mon, 4 Jul 2016 08:51:27 +0200 Subject: [PATCH 1/3] Fix for 1501: CyclomaticComplexity rule causes OOM when class reporting is disabled --- .../lang/java/rule/codesize/StdCyclomaticComplexityRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codesize/StdCyclomaticComplexityRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codesize/StdCyclomaticComplexityRule.java index 488671b93d..5f8efed33c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codesize/StdCyclomaticComplexityRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codesize/StdCyclomaticComplexityRule.java @@ -166,8 +166,8 @@ public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { entryStack.push( new Entry( node ) ); super.visit( node, data ); + Entry classEntry = entryStack.pop(); if ( showClassesComplexity ) { - Entry classEntry = entryStack.pop(); if ( classEntry.getComplexityAverage() >= reportLevel || classEntry.highestDecisionPoints >= reportLevel ) { addViolation( data, node, new String[] { From 0660097db2f7133fcdba6bfcb21c8ff2ace70a8e Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 7 Jul 2016 21:56:09 +0200 Subject: [PATCH 2/3] Add unit test for #1501 [java] CyclomaticComplexity rule causes OOM when class reporting is disabled --- .../StdCyclomaticComplexityRuleTest.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codesize/StdCyclomaticComplexityRuleTest.java diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codesize/StdCyclomaticComplexityRuleTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codesize/StdCyclomaticComplexityRuleTest.java new file mode 100644 index 0000000000..88181451cb --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codesize/StdCyclomaticComplexityRuleTest.java @@ -0,0 +1,42 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ +package net.sourceforge.pmd.lang.java.rule.codesize; + +import java.io.StringReader; +import java.util.Arrays; + +import org.junit.Assert; +import org.junit.Test; + +import net.sourceforge.pmd.RuleContext; +import net.sourceforge.pmd.lang.LanguageRegistry; +import net.sourceforge.pmd.lang.LanguageVersion; +import net.sourceforge.pmd.lang.Parser; +import net.sourceforge.pmd.lang.ParserOptions; +import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.java.JavaLanguageModule; + +public class StdCyclomaticComplexityRuleTest { + + /** + * Make sure the entry stack is empty, if show classes complexity is disabled. + * + * @see bug #1501 + */ + @Test + public void entryStackMustBeEmpty() { + StdCyclomaticComplexityRule rule = new StdCyclomaticComplexityRule(); + rule.setProperty(StdCyclomaticComplexityRule.SHOW_CLASSES_COMPLEXITY_DESCRIPTOR, Boolean.FALSE); + + RuleContext ctx = new RuleContext(); + LanguageVersion javaLanguageVersion = LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.8"); + ParserOptions parserOptions = javaLanguageVersion.getLanguageVersionHandler().getDefaultParserOptions(); + Parser parser = javaLanguageVersion.getLanguageVersionHandler().getParser(parserOptions); + Node node = parser.parse("test", new StringReader("public class SampleClass {}")); + + rule.apply(Arrays.asList(node), ctx); + + Assert.assertTrue(rule.entryStack.isEmpty()); + } +} From 648e697ab07ab18b5fdad40abdfe4ec68d27769e Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 7 Jul 2016 22:29:30 +0200 Subject: [PATCH 3/3] Update changelog --- src/site/markdown/overview/changelog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index 946a0eac61..9134a03d26 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -13,9 +13,12 @@ **Pull Requests:** * [#35](https://github.com/adangel/pmd/pull/35): Javascript tokenizer now ignores comment tokens. +* [#103](https://github.com/pmd/pmd/pull/103): \[java] \[apex] Fix for 1501: CyclomaticComplexity rule causes OOM when class reporting is disabled **Bugfixes:** +* Java + * [#1501](https://sourceforge.net/p/pmd/bugs/1501/): \[java] \[apex] CyclomaticComplexity rule causes OOM when class reporting is disabled * java-design/CloseResource * [#1479](https://sourceforge.net/p/pmd/bugs/1479/): CloseResource false positive on Statement * java-unusedcode/UnusedLocalVariable