@TupleConstructor also serves final properties

This commit is contained in:
peter
2012-01-01 23:14:30 +01:00
parent 1be90c1c0f
commit 0223fe4dff
2 changed files with 8 additions and 5 deletions
@@ -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<String,PsiMethod> properties = PropertyUtil.getAllProperties(psiClass, true, false, false);
for (PsiField field : psiClass.getFields()) {
final String name = field.getName();
final Map<String,PsiMethod> 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));
}
@@ -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 Fo<caret>o(2, 3)')
def target = ((GrNewExpression) ref.element.parent).advancedResolve().element
assert target instanceof PsiMethod
assert target.parameterList.parametersCount == 2
assert target.navigationElement instanceof PsiClass
}