From 0223fe4dff44c4a4e58f380a322ec8f7741168f7 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 31 Dec 2011 20:18:02 +0100 Subject: [PATCH] @TupleConstructor also serves final properties --- .../noncode/ConstructorAnnotationsProcessor.java | 10 ++++++---- .../groovy/lang/resolve/ResolveMethodTest.groovy | 3 ++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/noncode/ConstructorAnnotationsProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/noncode/ConstructorAnnotationsProcessor.java index 34344107c823..185ba9785ece 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/noncode/ConstructorAnnotationsProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/noncode/ConstructorAnnotationsProcessor.java @@ -20,6 +20,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.util.PropertyUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightMethodBuilder; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightParameter; @@ -119,10 +120,11 @@ public class ConstructorAnnotationsProcessor extends AstTransformContributor { } } - if (includeFields) { - final Map properties = PropertyUtil.getAllProperties(psiClass, true, false, false); - for (PsiField field : psiClass.getFields()) { - final String name = field.getName(); + final Map properties = PropertyUtil.getAllProperties(psiClass, true, false, false); + for (PsiField field : psiClass.getFields()) { + final String name = field.getName(); + if (includeFields || + includeProperties && field.hasModifierProperty(PsiModifier.FINAL) && field instanceof GrField && ((GrField)field).isProperty()) { if (!excludes.contains(name) && !field.hasModifierProperty(PsiModifier.STATIC) && !properties.containsKey(name)) { fieldsConstructor.addParameter(new GrLightParameter(name, field.getType(), fieldsConstructor).setOptional(optional)); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy index 8190f600573c..a23c62b0141e 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy @@ -277,10 +277,11 @@ public class ResolveMethodTest extends GroovyResolveTestCase { public void testTupleConstructor() { myFixture.addClass("package groovy.transform; public @interface TupleConstructor {}") - myFixture.addFileToProject('Classes.groovy', '@groovy.transform.TupleConstructor class Foo { int a; int b }') + myFixture.addFileToProject('Classes.groovy', '@groovy.transform.TupleConstructor class Foo { int a; final int b }') def ref = configureByText('new Foo(2, 3)') def target = ((GrNewExpression) ref.element.parent).advancedResolve().element assert target instanceof PsiMethod + assert target.parameterList.parametersCount == 2 assert target.navigationElement instanceof PsiClass }