diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/SemanticErrorReporter.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/SemanticErrorReporter.java index 608b3736e3..0eb88fdb20 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/SemanticErrorReporter.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/SemanticErrorReporter.java @@ -29,7 +29,8 @@ public interface SemanticErrorReporter { /** * Report an error at the given location. Errors abort subsequent analysis. - * The produced error can be thrown by the caller. + * The produced error can be thrown by the caller if it cannot be recovered + * from. * * @param location Location where the error should be reported * @param message Message (rendered using a {@link MessageFormat}) diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/TypeDisambiguationTest.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/TypeDisambiguationTest.kt index 05af1baf19..304b9fbbf2 100644 --- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/TypeDisambiguationTest.kt +++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/TypeDisambiguationTest.kt @@ -10,6 +10,7 @@ import net.sourceforge.pmd.lang.ast.test.* import net.sourceforge.pmd.lang.ast.test.shouldBe import net.sourceforge.pmd.lang.java.symbols.JClassSymbol import net.sourceforge.pmd.lang.java.symbols.table.internal.JavaSemanticErrors +import net.sourceforge.pmd.lang.java.symbols.table.internal.JavaSemanticErrors.* import net.sourceforge.pmd.lang.java.types.JClassType import kotlin.test.assertEquals import kotlin.test.assertNull @@ -86,7 +87,7 @@ class TypeDisambiguationTest : ParserTestSpec({ doTest("Unresolved inner type should produce a warning") { - val (node, args) = logger.warnings[JavaSemanticErrors.CANNOT_RESOLVE_MEMBER]!![0] + val (node, args) = logger.warnings[CANNOT_RESOLVE_MEMBER]!![0] args.map { it.toString() } shouldBe listOf("Bar", "com.Foo", "an unresolved type") node.shouldBeA { } } @@ -128,12 +129,12 @@ class TypeDisambiguationTest : ParserTestSpec({ doTest("Ambiguous inner type should produce an error (ref in Foo)") { - val (_, args) = logger.errors[JavaSemanticErrors.AMBIGUOUS_NAME_REFERENCE]?.first { it.first == refInFoo }!! + val (_, args) = logger.errors[AMBIGUOUS_NAME_REFERENCE]?.first { it.first == refInFoo }!! args.map { it.toString() } shouldBe listOf("Mem", "p.Scratch.A.Mem", "p.Scratch.B.Mem") } doTest("Ambiguous inner type should produce an error (ref in Scratch)") { - val (_, args) = logger.errors[JavaSemanticErrors.AMBIGUOUS_NAME_REFERENCE]?.first { it.first == refInScratch }!! + val (_, args) = logger.errors[AMBIGUOUS_NAME_REFERENCE]?.first { it.first == refInScratch }!! args.map { it.toString() } shouldBe listOf("Mem", "p.Scratch.A.Mem", "p.Scratch.B.Mem") } @@ -177,14 +178,14 @@ class TypeDisambiguationTest : ParserTestSpec({ acu.descendants(ASTFieldDeclaration::class.java).map { it.typeNode as ASTClassOrInterfaceType }.toList() fun assertErrored(t: ASTClassOrInterfaceType, expected: Int, actual: Int) { - val errs = logger.errors[JavaSemanticErrors.MALFORMED_GENERIC_TYPE]?.filter { it.first == t } + val errs = logger.errors[MALFORMED_GENERIC_TYPE]?.filter { it.first == t } ?: emptyList() assertEquals(errs.size, 1, "`${t.text}` should have produced a single error") errs.single().second.toList() shouldBe listOf(expected, actual) } fun assertNoError(t: ASTClassOrInterfaceType) { - val err = logger.errors[JavaSemanticErrors.MALFORMED_GENERIC_TYPE]?.firstOrNull { it.first == t } + val err = logger.errors[MALFORMED_GENERIC_TYPE]?.firstOrNull { it.first == t } assertNull(err, "`${t.text}` should not have produced an error") } @@ -259,14 +260,14 @@ class TypeDisambiguationTest : ParserTestSpec({ acu.descendants(ASTAnnotation::class.java).map { it.typeNode }.toList() fun assertErrored(t: ASTClassOrInterfaceType) { - val errs = logger.errors[JavaSemanticErrors.EXPECTED_ANNOTATION_TYPE]?.filter { it.first == t } + val errs = logger.errors[EXPECTED_ANNOTATION_TYPE]?.filter { it.first == t } ?: emptyList() assertEquals(errs.size, 1, "`${t.text}` should have produced a single error") errs.single().second.toList() shouldBe emptyList() } fun assertNoError(t: ASTClassOrInterfaceType) { - val err = logger.errors[JavaSemanticErrors.MALFORMED_GENERIC_TYPE]?.firstOrNull { it.first == t } + val err = logger.errors[MALFORMED_GENERIC_TYPE]?.firstOrNull { it.first == t } assertNull(err, "`${t.text}` should not have produced an error") } diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/VarDisambiguationTest.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/VarDisambiguationTest.kt index 7081ce162c..d890ddd97d 100644 --- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/VarDisambiguationTest.kt +++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/VarDisambiguationTest.kt @@ -12,6 +12,7 @@ import net.sourceforge.pmd.lang.java.JavaParsingHelper import net.sourceforge.pmd.lang.java.symbols.JClassSymbol import net.sourceforge.pmd.lang.java.symbols.JTypeParameterSymbol import net.sourceforge.pmd.lang.java.symbols.table.internal.JavaSemanticErrors +import net.sourceforge.pmd.lang.java.symbols.table.internal.JavaSemanticErrors.* class VarDisambiguationTest : ParserTestSpec({ @@ -153,7 +154,7 @@ class Foo { doTest("Unresolved field") { - logger.getWarning(JavaSemanticErrors.CANNOT_RESOLVE_MEMBER, 0) { node, args -> + logger.getWarning(CANNOT_RESOLVE_MEMBER, 0) { node, args -> args shouldBe listOf("noField", "com.foo.bar.Foo.Inner", "a field access") node.shouldMatchN { @@ -170,7 +171,7 @@ class Foo { doTest("Unresolved field chain") { - logger.getWarning(JavaSemanticErrors.CANNOT_RESOLVE_MEMBER, 1) { node, args -> + logger.getWarning(CANNOT_RESOLVE_MEMBER, 1) { node, args -> args shouldBe listOf("noField", "com.foo.bar.Foo.Inner", "a field access") node.shouldMatchN { @@ -189,7 +190,7 @@ class Foo { doTest("Unresolved type var member") { - logger.getWarning(JavaSemanticErrors.CANNOT_RESOLVE_MEMBER, 2) { node, args -> + logger.getWarning(CANNOT_RESOLVE_MEMBER, 2) { node, args -> args shouldBe listOf("fofo", "type variable T", "a field access") node.shouldMatchN { @@ -206,7 +207,7 @@ class Foo { doTest("Unresolved type var member (in type ctx)") { - logger.getWarning(JavaSemanticErrors.CANNOT_RESOLVE_MEMBER, 3) { node, args -> + logger.getWarning(CANNOT_RESOLVE_MEMBER, 3) { node, args -> args shouldBe listOf("Fofo", "type variable T", "an unresolved type") node.shouldMatchN {