diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java index a902b28eb5d9..a81faacac7ea 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java @@ -105,13 +105,7 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImplss''') assert !ref.resolve() } + void 'test custom map properties'() { + myFixture.addFileToProject 'classes.groovy', '''\ +class Pojo { + def pojoProperty + def anotherPojoProperty +} + +class SomeMapClass extends HashMap { + + public static final CONSTANT = 1 + + static class Inner { + public static final INNER_CONSTANT = 4 + } +} +''' + (configureByText('SomeMapClass.CONSTANT').element as GrReferenceExpression).with { ref -> + assert ref.resolve() instanceof GrField + assert ref.type.equalsToText('java.lang.Integer') + } + (configureByText('SomeMapClass.Inner').element as GrReferenceExpression).with { ref -> + assert ref.resolve() instanceof GrClassDefinition + assert ref.type.equalsToText('java.lang.Class') + } + assert configureByText('SomeMapClass.Inner.INNER_CONSTANT').resolve() instanceof GrField + + assert !configureByText('def m = new SomeMapClass(); m.CONSTANT').resolve() + assert !configureByText('def m = new SomeMapClass(); m.Inner').resolve() + + configureByText('def m = new SomeMapClass(); m.CONSTANT.pojoProperty').resolve().with { resolved -> + assert resolved instanceof GrAccessorMethod + assert resolved.containingClass.name == 'Pojo' + } + configureByText('def m = new SomeMapClass(); m.Inner.anotherPojoProperty').resolve().with { resolved -> + assert resolved instanceof GrAccessorMethod + assert resolved.containingClass.name == 'Pojo' + } + } + public void testResolveInsideWith0() { def resolved = resolve('a.groovy', GrAccessorMethod) assertEquals(resolved.containingClass.name, 'A')