[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:
Daniil Ovchinnikov
2017-08-16 17:24:40 +03:00
parent 07818b64da
commit 45f148640b
4 changed files with 9 additions and 55 deletions
@@ -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;
@@ -59,10 +59,6 @@ public class ConvertMethodToClosureTest extends GrIntentionTestCase {
doMethodToClosureTest();
}
public void testClosureFromReference() {
doClosureToMethodTest();
}
public void testConstructorToClosure() { doMethodToClosureTest(false); }
public void testInvalidMethodName() {doMethodToClosureTest(false);}
@@ -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)
@@ -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)