IDEA-90896 complete properties from base class which have fields

This commit is contained in:
Max Medvedev
2012-09-12 11:33:45 +04:00
parent 3423dce4ee
commit f61c07fd06
2 changed files with 34 additions and 9 deletions
@@ -341,14 +341,16 @@ public class CompleteReferenceExpression {
}
private static Set<String> addAllRestrictedProperties(GrReferenceExpression place) {
if (place.getQualifier() != null) {
return Collections.emptySet();
}
Set<String> propertyNames = new HashSet<String>();
if (place.getQualifier()==null) {
for (GrTypeDefinition containingClass = PsiTreeUtil.getParentOfType(place, GrTypeDefinition.class);
containingClass != null;
containingClass = PsiTreeUtil.getParentOfType(containingClass, GrTypeDefinition.class)) {
for (PsiField field : containingClass.getAllFields()) {
propertyNames.add(field.getName());
}
for (GrTypeDefinition containingClass = PsiTreeUtil.getParentOfType(place, GrTypeDefinition.class);
containingClass != null;
containingClass = PsiTreeUtil.getParentOfType(containingClass, GrTypeDefinition.class)) {
for (PsiField field : containingClass.getFields()) {
propertyNames.add(field.getName());
}
}
return propertyNames;
@@ -360,8 +362,8 @@ public class CompleteReferenceExpression {
}
private static class CompleteReferenceProcessor extends ResolverProcessor implements Consumer<Object> {
private static final Logger LOG = Logger.getInstance(
"#org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.CompleteReferenceExpression.CompleteReferenceProcessor");
private static final Logger LOG = Logger.getInstance(CompleteReferenceProcessor.class);
private final Consumer<LookupElement> myConsumer;
private final PrefixMatcher myMatcher;
private final CompletionParameters myParameters;
@@ -1442,6 +1442,29 @@ class Inh<T> implements Base<T>{}
def foo(Base<String> b){}
foo(new Inh<String>()<caret>)
''')
}
void testPropertiesOfBaseClass() {
myFixture.addFileToProject('Base.groovy', '''\
class Base {
protected String foooo = 'field'
public String getFoooo() {'getter'}
}
''')
doBasicTest('''\
class Inheritor extends Base {
def test() {
assert fooo<caret> == 'getter'
}
}
''', '''\
class Inheritor extends Base {
def test() {
assert foooo<caret> == 'getter'
}
}
''')
}
}