From 4d6d881059c14f7bc6a905f0ade1215e9bd392ed Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Thu, 19 May 2011 13:20:14 +0400 Subject: [PATCH] field generation --- .../convertToJava/ClassItemGeneratorImpl.java | 42 +++++++++++++++++-- .../convertToJava/GenerationUtil.java | 2 +- .../convertToJava/TypeProvider.java | 7 ++++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ClassItemGeneratorImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ClassItemGeneratorImpl.java index 2f2c343e0b51..924820e80f5c 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ClassItemGeneratorImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/ClassItemGeneratorImpl.java @@ -30,6 +30,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotationMemberValue; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrDefaultAnnotationValue; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariableDeclaration; import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; @@ -304,9 +305,44 @@ public class ClassItemGeneratorImpl implements ClassItemGenerator { } @Override - public void writeVariableDeclarations(StringBuilder builder, GrVariableDeclaration variableDeclaration) { - GenerationUtil.writeSimpleVarDeclaration(variableDeclaration, builder, context.extend()); - builder.append('\n'); + public void writeVariableDeclarations(StringBuilder mainBuilder, GrVariableDeclaration variableDeclaration) { + ExpressionContext extended = context.extend(); + GrVariable[] variables = variableDeclaration.getVariables(); + + StringBuilder builder = new StringBuilder(); + StringBuilder initBuilder = new StringBuilder("{\n"); + for (GrVariable variable : variables) { + PsiType type = extended.typeProvider.getVarType(variable); + ModifierListGenerator.writeModifiers(builder, variable.getModifierList()); + + writeType(builder, type, variable); + builder.append(" "); + + builder.append(variable.getName()); + final GrExpression initializer = variable.getInitializerGroovy(); + + if (initializer != null) { + int count = extended.myStatements.size(); + StringBuilder initializerBuilder = new StringBuilder(); + initializer.accept(new ExpressionGenerator(initializerBuilder, extended)); + if (extended.myStatements.size() == count) { //didn't use extra statements + builder.append(" = ").append(initializerBuilder); + } + else { + StringBuilder assignment = new StringBuilder(variable.getName()).append(" = ").append(initializerBuilder).append(';'); + GenerationUtil.writeStatement(initBuilder, assignment, null, extended); + } + } + + builder.append(";\n"); + } + + if (extended.myStatements.size()>0) { + initBuilder.append("}\n"); + mainBuilder.append(initBuilder); + } + + mainBuilder.append(builder); } @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/GenerationUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/GenerationUtil.java index a7bc173522fa..51ebdff8c415 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/GenerationUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/GenerationUtil.java @@ -376,7 +376,7 @@ public class GenerationUtil { //Set types = getVarTypes(variableDeclaration); //if (types.size() > 1) { - if (variableDeclaration.getParent() instanceof GrControlStatement) { + if (variables.length > 1 && variableDeclaration.getParent() instanceof GrControlStatement) { expressionContext.setInsertCurlyBrackets(); } for (GrVariable variable : variables) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/TypeProvider.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/TypeProvider.java index 19fbe1d225d3..8866b95efc7a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/TypeProvider.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/convertToJava/TypeProvider.java @@ -28,6 +28,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameterList; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrClosureSignature; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; @@ -46,6 +47,7 @@ public class TypeProvider { public TypeProvider() { } + @SuppressWarnings({"MethodMayBeStatic"}) @NotNull public PsiType getReturnType(PsiMethod method) { if (method instanceof GrMethod) { @@ -59,6 +61,7 @@ public class TypeProvider { return TypesUtil.getJavaLangObject(method); } + @SuppressWarnings({"MethodMayBeStatic"}) @NotNull public PsiType getVarType(GrVariable variable) { PsiType type = variable.getDeclaredType(); @@ -74,6 +77,10 @@ public class TypeProvider { @NotNull public PsiType getParameterType(PsiParameter parameter) { if (!(parameter instanceof GrParameter)) { + PsiElement scope = parameter.getDeclarationScope(); + if (scope instanceof GrAccessorMethod) { + return getVarType(((GrAccessorMethod)scope).getProperty()); + } return parameter.getType(); } /*GrTypeElement typeElementGroovy = ((GrParameter)parameter).getTypeElementGroovy();