diff --git a/java/java-impl/src/com/intellij/lang/java/actions/CreateConstructorAction.kt b/java/java-impl/src/com/intellij/lang/java/actions/CreateConstructorAction.kt index 021ffe58e938..5869961a181a 100644 --- a/java/java-impl/src/com/intellij/lang/java/actions/CreateConstructorAction.kt +++ b/java/java-impl/src/com/intellij/lang/java/actions/CreateConstructorAction.kt @@ -50,12 +50,15 @@ private class JavaConstructorRenderer( private val factory = JavaPsiFacade.getElementFactory(project)!! fun doMagic() { + //calculate expected parameter types before constructor is inserted + //to avoid possible overload conflicts + val parameters = request.expectedParameters var constructor = renderConstructor() constructor = insertConstructor(constructor) constructor = forcePsiPostprocessAndRestoreElement(constructor) ?: return val builder = TemplateBuilderImpl(constructor) - createTemplateContext(builder).setupParameters(constructor, request.expectedParameters) + createTemplateContext(builder).setupParameters(constructor, parameters) val superConstructor = setupSuperCall(targetClass, constructor, builder) constructor = forcePsiPostprocessAndRestoreElement(constructor) ?: return diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterInferredType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterInferredType.java new file mode 100644 index 000000000000..76c5d317b0e0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterInferredType.java @@ -0,0 +1,18 @@ +// "Create constructor" "true" +class MyTest { + T id(T t) { + return t; + } + + { + Foo f = new Foo(id("name")); + } +} + +class Foo { + public Foo() {} + + public Foo(String name) { + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeInferredType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeInferredType.java new file mode 100644 index 000000000000..9e7d7e4fb6fc --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeInferredType.java @@ -0,0 +1,14 @@ +// "Create constructor" "true" +class MyTest { + T id(T t) { + return t; + } + + { + Foo f = new Foo(id("name")); + } +} + +class Foo { + public Foo() {} +} \ No newline at end of file