static methods from superclass imported with subclass qualifier

This commit is contained in:
Maxim.Medvedev
2012-04-25 18:00:56 +04:00
parent ed0afd2ce7
commit 3989c13041
3 changed files with 40 additions and 6 deletions
@@ -92,18 +92,18 @@ public class GrImportStatementImpl extends GroovyPsiElementImpl implements GrImp
final String refName = ref.getReferenceName();
if (nameHint == null || name.equals(nameHint.getName(state))) {
final PsiField field = clazz.findFieldByName(refName, false);
final PsiField field = clazz.findFieldByName(refName, true);
if (field != null && field.hasModifierProperty(PsiModifier.STATIC)) {
if (!processor.execute(field, state)) return false;
}
for (PsiMethod method : clazz.findMethodsByName(refName, false)) {
for (PsiMethod method : clazz.findMethodsByName(refName, true)) {
if (method.hasModifierProperty(PsiModifier.STATIC)) {
if (!processor.execute(method, state)) return false;
}
}
final PsiClass innerClass = clazz.findInnerClassByName(refName, false);
final PsiClass innerClass = clazz.findInnerClassByName(refName, true);
if (innerClass != null && innerClass.hasModifierProperty(PsiModifier.STATIC) && !processor.execute(innerClass, state)) return false;
}
@@ -474,17 +474,17 @@ public class GrCodeReferenceElementImpl extends GrReferenceElementImpl<GrCodeRef
PsiResolveHelper helper = JavaPsiFacade.getInstance(clazz.getProject()).getResolveHelper();
List<GroovyResolveResult> result = new ArrayList<GroovyResolveResult>();
final PsiField field = clazz.findFieldByName(refName, false);
final PsiField field = clazz.findFieldByName(refName, true);
if (field != null && field.hasModifierProperty(PsiModifier.STATIC)) {
result.add(new GroovyResolveResultImpl(field, helper.isAccessible(field, ref, null)));
}
final PsiMethod[] methods = clazz.findMethodsByName(refName, false);
final PsiMethod[] methods = clazz.findMethodsByName(refName, true);
for (PsiMethod method : methods) {
result.add(new GroovyResolveResultImpl(method, helper.isAccessible(method, ref, null)));
}
final PsiClass innerClass = clazz.findInnerClassByName(refName, false);
final PsiClass innerClass = clazz.findInnerClassByName(refName, true);
if (innerClass != null && innerClass.hasModifierProperty(PsiModifier.STATIC)) {
result.add(new GroovyResolveResultImpl(innerClass, helper.isAccessible(innerClass, ref, null)));
}
@@ -992,4 +992,38 @@ def foo(Integer a) {
''')
assertNotNull(ref.resolve())
}
public void testStaticImportFromSuperClass() {
def ref = configureByText('''\
import static Derived.fo<caret>o
class Base {
static foo(){print 'foo'}
}
class Derived extends Base {
}
foo()
''')
assertNotNull(ref.resolve())
}
public void testUsageOfStaticImportFromSuperClass() {
def ref = configureByText('''\
import static Derived.foo
class Base {
static foo(){print 'foo'}
}
class Derived extends Base {
}
fo<caret>o()
''')
assertNotNull(ref.resolve())
}
}