IDEA-244540 NPE at conversion local interface to class

GitOrigin-RevId: 13ec77e77a59cbb7aaa8a61cc6a515ee3b301bd0
This commit is contained in:
Tagir Valeev
2020-06-26 05:40:42 +03:00
committed by intellij-monorepo-bot
parent afeaa74e1d
commit 122075c17a
4 changed files with 19 additions and 8 deletions
@@ -191,25 +191,21 @@ public class ConvertInterfaceToClassIntention extends Intention {
}
private static void moveSubClassImplementsToExtends(PsiClass oldInterface, Collection<PsiClass> inheritors) {
final PsiJavaCodeReferenceElement oldInterfaceReference =
JavaPsiFacade.getElementFactory(oldInterface.getProject()).createClassReferenceElement(oldInterface);
for (PsiClass inheritor : inheritors) {
final PsiReferenceList implementsList = inheritor.getImplementsList();
final PsiReferenceList extendsList = inheritor.getExtendsList();
if (implementsList != null) {
moveReference(implementsList, extendsList, oldInterfaceReference);
moveReference(implementsList, extendsList, oldInterface);
}
}
}
private static void moveReference(@NotNull PsiReferenceList source,
@Nullable PsiReferenceList target,
@NotNull PsiJavaCodeReferenceElement reference) {
@NotNull PsiClass oldInterface) {
final PsiJavaCodeReferenceElement[] implementsReferences = source.getReferenceElements();
final String qualifiedName = reference.getQualifiedName();
for (PsiJavaCodeReferenceElement implementsReference : implementsReferences) {
final String implementsReferenceQualifiedName = implementsReference.getQualifiedName();
if (qualifiedName.equals(implementsReferenceQualifiedName)) {
if (implementsReference.isReferenceTo(oldInterface)) {
if (target != null) {
final PsiJavaCodeReferenceElement[] referenceElements = target.getReferenceElements();
if (referenceElements.length > 0) {
@@ -0,0 +1,7 @@
class A {
void foo() {
interface Lo<caret>cal {}
class X implements Local {}
class X1 implements Cloneable, Local {}
}
}
@@ -0,0 +1,7 @@
class A {
void foo() {
abstract class Lo<caret>cal {}
class X extends Local {}
class X1 extends Local implements Cloneable {}
}
}
@@ -13,6 +13,7 @@ public class ConvertInterfaceToClassTest extends IPPTestCase {
public void testInnerInterface() { doTest(); }
public void testStaticMethods() { doTest(); }
public void testInterfaceExtendsClass() { doTest(); }
public void testLocalInterface() { doTest(); }
public void testFunctionalExpressions() {
try {
@@ -54,6 +55,6 @@ public class ConvertInterfaceToClassTest extends IPPTestCase {
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {
return JAVA_8;
return JAVA_15;
}
}