From 1782d678a7cd00e166391858ffea58e40c9264eb Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 11 May 2016 17:47:41 +0200 Subject: [PATCH] include all constructor candidates to calculate change signature fix (IDEA-128891) --- .../daemon/impl/analysis/HighlightMethodUtil.java | 6 +++++- ...nstructorsWithOneCandidateWithCorrectParamNumber.java | 9 +++++++++ ...nstructorsWithOneCandidateWithCorrectParamNumber.java | 9 +++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java index 9af60ae015d8..b2c45b431987 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java @@ -1552,7 +1552,11 @@ public class HighlightMethodUtil { HighlightInfo info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(infoElement).description(description).escapedToolTip(toolTip).navigationShift(+1).create(); if (info != null) { - registerFixesOnInvalidConstructorCall(constructorCall, classReference, list, aClass, constructors, results, infoElement, info); + JavaResolveResult[] methodCandidates = results; + if (constructorCall instanceof PsiNewExpression) { + methodCandidates = resolveHelper.getReferencedMethodCandidates((PsiCallExpression)constructorCall, true); + } + registerFixesOnInvalidConstructorCall(constructorCall, classReference, list, aClass, constructors, methodCandidates, infoElement, info); registerMethodReturnFixAction(info, result, constructorCall); holder.add(info); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java new file mode 100644 index 000000000000..fd8855bf180f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java @@ -0,0 +1,9 @@ +// " Change signature of X(String)" "true" +class X { + X(Integer i) {} + X(String s) {} + + public static void main(String[] args) { + new X(""); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java new file mode 100644 index 000000000000..e1a616ea35e5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeMultipleConstructorsWithOneCandidateWithCorrectParamNumber.java @@ -0,0 +1,9 @@ +// " Change signature of X(String)" "true" +class X { + X(Integer i) {} + X() {} + + public static void main(String[] args) { + new X(""); + } +} \ No newline at end of file