diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/ClassScope.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/ClassScope.java index 2f107d598b..e58b8ee002 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/ClassScope.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/ClassScope.java @@ -307,6 +307,9 @@ public class ClassScope extends AbstractJavaScope { } private String qualifyTypeName(String typeImage) { + if (typeImage == null) { + return null; + } for (String qualified : this.getEnclosingScope(SourceFileScope.class).getQualifiedTypeNames().keySet()) { int fullLength = qualified.length(); int nameLength = typeImage.length(); diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/symboltable/ClassScopeTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/symboltable/ClassScopeTest.java index f3f1443198..df2e904057 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/symboltable/ClassScopeTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/symboltable/ClassScopeTest.java @@ -269,6 +269,11 @@ public class ClassScopeTest extends STBBaseTst { } + @Test + public void testNullType() { + parseCode(TEST_NULL_TYPE); + } + private static final String NESTED_CLASS_FIELD_AND_PARAM = "public class Foo {" + PMD.EOL + " class Test {" + PMD.EOL + @@ -376,6 +381,12 @@ public class ClassScopeTest extends STBBaseTst { " }" + PMD.EOL + "}"; + public static final String TEST_NULL_TYPE = + "public abstract class NullTypeTest {" + PMD.EOL + + " protected Comparator nodesComparator = (o1, o2) -> StringHelper.saveCompare(getFilterableString(o1), getFilterableString(o2));" + PMD.EOL + + " public abstract String getFilterableString(TreeNode node);" + PMD.EOL + + "}"; + public static junit.framework.Test suite() { return new junit.framework.JUnit4TestAdapter(ClassScopeTest.class); }