mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-244540 NPE at conversion local interface to class
GitOrigin-RevId: 13ec77e77a59cbb7aaa8a61cc6a515ee3b301bd0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
afeaa74e1d
commit
122075c17a
+3
-7
@@ -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 {}
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
class A {
|
||||
void foo() {
|
||||
abstract class Lo<caret>cal {}
|
||||
class X extends Local {}
|
||||
class X1 extends Local implements Cloneable {}
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user