diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java index 720920c4a0bc..8562586c1965 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java @@ -218,7 +218,7 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase { JVMElementFactory factory = JVMElementFactories.requireFactory(aClass.getLanguage(), aClass.getProject()); CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(manager.getProject()); - PsiMethod constructor = factory.createMethodFromText(aClass.getName() + "() {}", aClass); + PsiMethod constructor = factory.createConstructor(aClass.getName(), aClass); String modifier = getConstructorModifier(aClass); if (modifier != null) { PsiUtil.setModifierProperty(constructor, modifier, true); @@ -259,14 +259,15 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase { JavaCodeStyleManager javaStyle = JavaCodeStyleManager.getInstance(aClass.getProject()); - final PsiMethod dummyConstructor = factory.createMethodFromText(constructor.getText(), null); + final PsiMethod dummyConstructor = factory.createConstructor(aClass.getName()); + dummyConstructor.getParameterList().replace(constructor.getParameterList().copy()); List fieldParams = new ArrayList(); for (PsiField field : fields) { String fieldName = field.getName(); String name = javaStyle.variableNameToPropertyName(fieldName, VariableKind.FIELD); String parmName = javaStyle.propertyNameToVariableName(name, VariableKind.PARAMETER); parmName = javaStyle.suggestUniqueVariableName(parmName, dummyConstructor, true); - PsiParameter parm = factory.createParameter(parmName, field.getType()); + PsiParameter parm = factory.createParameter(parmName, field.getType(), aClass); final NullableNotNullManager nullableManager = NullableNotNullManager.getInstance(field.getProject()); final String notNull = nullableManager.getNotNull(field); @@ -275,6 +276,7 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase { } constructor.getParameterList().add(parm); + dummyConstructor.getParameterList().add(parm.copy()); fieldParams.add(parm); } diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index 32197e1dd1c6..abb541ebf40d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -394,9 +394,9 @@ public class GenerateMembersUtil { private static PsiMethod createMethod(@NotNull JVMElementFactory factory, @NotNull PsiMethod method, PsiElement target) { if (method.isConstructor()) { - return factory.createMethodFromText(method.getName() + "(){}", target); + return factory.createConstructor(method.getName(), target); } - return factory.createMethodFromText("void " + method.getName() + "(){}", target); + return factory.createMethod(method.getName(), PsiType.VOID); } private static void substituteReturnType(@NotNull PsiManager manager, diff --git a/java/java-psi-api/src/com/intellij/psi/JVMElementFactory.java b/java/java-psi-api/src/com/intellij/psi/JVMElementFactory.java index 3691b97029b9..19e64ea1d7f4 100644 --- a/java/java-psi-api/src/com/intellij/psi/JVMElementFactory.java +++ b/java/java-psi-api/src/com/intellij/psi/JVMElementFactory.java @@ -184,6 +184,7 @@ public interface JVMElementFactory { */ @NotNull PsiMethod createConstructor(@NotNull @NonNls String name); + PsiMethod createConstructor(@NotNull @NonNls String name, PsiElement context); /** * Creates a class type for the specified class, using the specified substitutor diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java index d4fc65863f64..f871d972bc11 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java @@ -256,6 +256,11 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps return (PsiMethod)CodeStyleManager.getInstance(myManager.getProject()).reformat(method); } + @Override + public PsiMethod createConstructor(@NotNull @NonNls String name, PsiElement context) { + return createMethodFromText(name + "() {}", context); + } + @NotNull @Override public PsiClassInitializer createClassInitializer() throws IncorrectOperationException { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java index fbdf45fb449e..f860f40c37ba 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java @@ -1019,6 +1019,11 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { return createConstructorFromText(name, name + "(){}", null); } + @Override + public PsiMethod createConstructor(@NotNull @NonNls String name, PsiElement context) { + return createConstructorFromText(name, name + "(){}", context); + } + @NotNull @Override public PsiClassType createType(@NotNull PsiClass resolve, @NotNull PsiSubstitutor substitutor) {