mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] disallow Convert Closure to Method intention from reference
This is needed to prevent loading AST during intention pass as the predicate queries target property initializer which is not stored in stubs.
This commit is contained in:
+9
-31
@@ -70,21 +70,10 @@ public class ConvertClosureToMethodIntention extends Intention {
|
||||
|
||||
@Override
|
||||
protected void processIntention(@NotNull PsiElement element, @NotNull Project project, Editor editor) throws IncorrectOperationException {
|
||||
final GrField field;
|
||||
if (element.getParent() instanceof GrField) {
|
||||
field = (GrField)element.getParent();
|
||||
}
|
||||
else {
|
||||
final PsiReference ref = element.getReference();
|
||||
LOG.assertTrue(ref != null);
|
||||
PsiElement resolved = ref.resolve();
|
||||
if (resolved instanceof GrAccessorMethod) {
|
||||
resolved = ((GrAccessorMethod)resolved).getProperty();
|
||||
}
|
||||
LOG.assertTrue(resolved instanceof GrField);
|
||||
field = (GrField)resolved;
|
||||
}
|
||||
final PsiElement parent = element.getParent();
|
||||
if (!(parent instanceof GrField)) return;
|
||||
|
||||
final GrField field = (GrField)parent;
|
||||
final HashSet<PsiReference> usages = new HashSet<>();
|
||||
usages.addAll(ReferencesSearch.search(field).findAll());
|
||||
final GrAccessorMethod[] getters = field.getGetters();
|
||||
@@ -97,7 +86,6 @@ public class ConvertClosureToMethodIntention extends Intention {
|
||||
}
|
||||
|
||||
final String fieldName = field.getName();
|
||||
LOG.assertTrue(fieldName != null);
|
||||
final Collection<PsiElement> fieldUsages = new HashSet<>();
|
||||
MultiMap<PsiElement, String> conflicts = new MultiMap<>();
|
||||
for (PsiReference usage : usages) {
|
||||
@@ -215,22 +203,12 @@ public class ConvertClosureToMethodIntention extends Intention {
|
||||
@Override
|
||||
public boolean satisfiedBy(@NotNull PsiElement element) {
|
||||
if (element.getLanguage() != GroovyLanguage.INSTANCE) return false;
|
||||
final PsiReference ref = element.getReference();
|
||||
GrField field;
|
||||
if (ref != null) {
|
||||
PsiElement resolved = ref.resolve();
|
||||
if (resolved instanceof GrAccessorMethod) {
|
||||
resolved = ((GrAccessorMethod)resolved).getProperty();
|
||||
}
|
||||
if (!(resolved instanceof GrField)) return false;
|
||||
field = (GrField)resolved;
|
||||
}
|
||||
else {
|
||||
final PsiElement parent = element.getParent();
|
||||
if (!(parent instanceof GrField)) return false;
|
||||
field = (GrField)parent;
|
||||
if (field.getNameIdentifierGroovy() != element) return false;
|
||||
}
|
||||
|
||||
final PsiElement parent = element.getParent();
|
||||
if (!(parent instanceof GrField)) return false;
|
||||
|
||||
final GrField field = (GrField)parent;
|
||||
if (field.getNameIdentifierGroovy() != element) return false;
|
||||
|
||||
final PsiElement varDeclaration = field.getParent();
|
||||
if (!(varDeclaration instanceof GrVariableDeclaration)) return false;
|
||||
|
||||
-4
@@ -59,10 +59,6 @@ public class ConvertMethodToClosureTest extends GrIntentionTestCase {
|
||||
doMethodToClosureTest();
|
||||
}
|
||||
|
||||
public void testClosureFromReference() {
|
||||
doClosureToMethodTest();
|
||||
}
|
||||
|
||||
public void testConstructorToClosure() { doMethodToClosureTest(false); }
|
||||
|
||||
public void testInvalidMethodName() {doMethodToClosureTest(false);}
|
||||
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
class X{
|
||||
def a;
|
||||
|
||||
static private final def foo = {def x, def y ->
|
||||
print x + a;
|
||||
print y;
|
||||
}
|
||||
}
|
||||
|
||||
X.f<caret>oo(2, 3)
|
||||
Vendored
-10
@@ -1,10 +0,0 @@
|
||||
class X{
|
||||
def a;
|
||||
|
||||
static private final def foo(def x, def y) {
|
||||
print x + a;
|
||||
print y;
|
||||
}
|
||||
}
|
||||
|
||||
X.f<caret>oo(2, 3)
|
||||
Reference in New Issue
Block a user