From 256ae4283003d94a0204f8edea4c08e25dff4abc Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 29 Jun 2023 11:52:02 +0200 Subject: [PATCH] [apex] Fix rule test for UnusedMethod Refs #4453 --- .../apex/rule/design/UnusedMethodRule.java | 3 +++ .../apex/rule/design/UnusedMethodTest.java | 18 +++++++++++++++--- .../UnusedMethod/project1/sfdx-project.json | 3 ++- .../design/UnusedMethod/project1/src/Foo.cls | 9 +++++++-- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethodRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethodRule.java index 581e19600e..f76271c643 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethodRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethodRule.java @@ -11,6 +11,9 @@ public class UnusedMethodRule extends AbstractApexRule { @Override public Object visit(ASTMethod node, Object data) { + if (node.isSynthetic()) { + return data; + } // Check if any 'Unused' Issues align with this method node.getRoot().getGlobalIssues().stream() diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethodTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethodTest.java index 59e1811f7e..cda9afc56b 100644 --- a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethodTest.java +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethodTest.java @@ -11,6 +11,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import net.sourceforge.pmd.PMDConfiguration; import net.sourceforge.pmd.PmdAnalysis; @@ -25,22 +26,33 @@ import net.sourceforge.pmd.lang.apex.ApexLanguageModule; import net.sourceforge.pmd.lang.apex.ApexLanguageProperties; import net.sourceforge.pmd.reporting.GlobalAnalysisListener; +import com.nawforce.pkgforce.path.PathFactory; +import com.nawforce.pkgforce.path.PathLike; +import com.nawforce.runtime.platform.Environment; +import scala.Option; + class UnusedMethodTest { + @TempDir + private Path tempDir; @Test void findUnusedMethodsWithSfdxProject() throws Exception { Path testProjectDir = Paths.get("src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1"); Report report = runRule(testProjectDir); assertEquals(1, report.getViolations().size()); - assertViolation(report.getViolations().get(0), "Foo.cls", 6); + assertViolation(report.getViolations().get(0), "Foo.cls", 10); // line 10 is method unusedMethod() } private void assertViolation(RuleViolation violation, String fileName, int lineNumber) { - assertEquals("Foo.cls", violation.getFileId().getFileName()); - assertEquals(6, violation.getBeginLine()); // line 6 is method unusedMethod() + assertEquals(fileName, violation.getFileId().getFileName()); + assertEquals(lineNumber, violation.getBeginLine()); } private Report runRule(Path testProjectDir) throws IOException { + Option pathLikeOption = Option.apply(PathFactory.apply(tempDir.toString())); + Option> cachDirOption = Option.apply(pathLikeOption); + Environment.setCacheDirOverride(cachDirOption); + Language apexLanguage = ApexLanguageModule.getInstance(); LanguageVersion languageVersion = apexLanguage.getDefaultVersion(); PMDConfiguration configuration = new PMDConfiguration(); diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1/sfdx-project.json b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1/sfdx-project.json index 2a8523faaf..dba67ee8c1 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1/sfdx-project.json +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1/sfdx-project.json @@ -4,5 +4,6 @@ "path": "src", "default": true } - ] + ], + "namespace": "foo_ns" } diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1/src/Foo.cls b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1/src/Foo.cls index 3149220fab..08bd87f565 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1/src/Foo.cls +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/design/UnusedMethod/project1/src/Foo.cls @@ -3,10 +3,15 @@ */ public class Foo { + // this method is needed, otherwise the whole class is considered as unused, as it would contain + // then only one unused method. + private void other() {} + public void unusedMethod() { // รครครครค // at least 4 umlauts are required in order to - // reproduce the ArrayIndexOutOfBoundsException - Integer a; + // reproduce the ArrayIndexOutOfBoundsException (#4453) + // up to 7.0.0-rc3 with export PMD_JAVA_OPTS="-Dfile.encoding=ISO-8859-15" (e.g. platform encoding is not UTF-8) + other(); // note: there should be no additional characters // after this method, only the two closing brackets }