mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
java create class from new: don't create non-static inner if new expression can't be used afterwards (IDEA-97433)
GitOrigin-RevId: 89616c077ca5141db53b624ae08bc54b04d53cae
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f535bd830e
commit
1c6857ec2d
@@ -16,6 +16,7 @@ import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Segment;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
@@ -206,7 +207,7 @@ public class CreateClassFromNewFix extends CreateFromUsageBaseFix {
|
||||
@Override
|
||||
protected boolean isAvailableImpl(int offset) {
|
||||
PsiNewExpression expression = getNewExpression();
|
||||
if (rejectQualifier(expression.getQualifier())) {
|
||||
if (rejectContainer(expression)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -225,8 +226,20 @@ public class CreateClassFromNewFix extends CreateFromUsageBaseFix {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean rejectQualifier(PsiExpression qualifier) {
|
||||
return qualifier != null;
|
||||
protected boolean rejectContainer(PsiNewExpression expression) {
|
||||
if (expression.getQualifier() != null) {
|
||||
return true;
|
||||
}
|
||||
PsiJavaCodeReferenceElement classReference = expression.getClassOrAnonymousClassReference();
|
||||
if (classReference != null && classReference.isQualified()) {
|
||||
PsiJavaCodeReferenceElement containerReference = ObjectUtils.tryCast(classReference.getQualifier(), PsiJavaCodeReferenceElement.class);
|
||||
if (containerReference != null) {
|
||||
PsiElement targetClass = containerReference.resolve();
|
||||
return !(targetClass instanceof PsiClass) || !InheritanceUtil.hasEnclosingInstanceInScope((PsiClass)targetClass, expression, true, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected @IntentionName String getText(final String varName) {
|
||||
|
||||
@@ -53,7 +53,7 @@ public class CreateInnerClassFromNewFix extends CreateClassFromNewFix {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean rejectQualifier(PsiExpression qualifier) {
|
||||
protected boolean rejectContainer(PsiNewExpression qualifier) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import java.util.*;
|
||||
|
||||
public class Test {
|
||||
public static void main() {
|
||||
public void main() {
|
||||
Collection c = new Test.MyCollection(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// "Create class 'MyCollection'" "true"
|
||||
import java.util.*;
|
||||
|
||||
class Test extends Foo {
|
||||
public void main() {
|
||||
Collection c = new Foo.MyCollection(1);
|
||||
}
|
||||
}
|
||||
|
||||
class Foo {
|
||||
public class MyCollection implements Collection {
|
||||
public MyCollection(int i) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
import java.util.*;
|
||||
|
||||
public class Test {
|
||||
public static void main() {
|
||||
public void main() {
|
||||
Collection c = new Test.My<caret>Collection(1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Create class 'MyCollection'" "true"
|
||||
import java.util.*;
|
||||
|
||||
class Test extends Foo {
|
||||
public void main() {
|
||||
Collection c = new Foo.My<caret>Collection(1);
|
||||
}
|
||||
}
|
||||
|
||||
class Foo {}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Create class 'MyCollection'" "false"
|
||||
import java.util.*;
|
||||
|
||||
public class Test {
|
||||
public static void main() {
|
||||
Collection c = new Foo.My<caret>Collection(1);
|
||||
}
|
||||
}
|
||||
|
||||
class Foo {}
|
||||
Reference in New Issue
Block a user