Fix NPE for array types

This commit is contained in:
Andreas Dangel
2018-07-30 21:40:25 +02:00
parent b22a94c4d4
commit 23f57b5819
2 changed files with 19 additions and 2 deletions

View File

@ -204,9 +204,10 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule {
String name = node.getImage();
boolean isJavaLang = name != null && name.startsWith("java.lang.");
if (isJavaLang && node.getType() != null) {
if (isJavaLang && node.getType() != null && node.getType().getPackage() != null) {
// valid would be ProcessBuilder.Redirect.PIPE but not java.lang.ProcessBuilder.Redirect.PIPE
String packageName = node.getType().getPackage().getName();
String packageName = node.getType().getPackage() // package might be null, if type is an array type...
.getName();
return "java.lang".equals(packageName);
} else if (isJavaLang) {
// only java.lang.* is implicitly imported, but not e.g. java.lang.reflection.*

View File

@ -469,6 +469,22 @@ public class ThreadStuff {
public Thread stuff() {
return new Thread(java.lang.Thread.currentThread());
}
}
]]></code>
</test-code>
<test-code>
<description>Nullpointer in isJavaLangImplicit for java.lang.String[] arrays</description>
<expected-problems>1</expected-problems>
<expected-linenumbers>6</expected-linenumbers>
<code><![CDATA[
public class TestArrayType {
String[] someArray = new String[0];
public void foo() {
boolean b1 = someArray instanceof String[];
boolean b2 = someArray instanceof java.lang.String[]; // unnecessary FQN
}
}
]]></code>
</test-code>