From f019f6615ce8066ad2e5f97ec0237223a79195a8 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 9 Dec 2009 14:09:46 +0300 Subject: [PATCH] introduce parameter: show conflicts for incomplete calls --- ...troduceParameterMethodUsagesProcessor.java | 23 ++++++++++++++++++- .../OldReferenceResolver.java | 3 --- .../refactoring/IntroduceParameterTest.java | 5 ++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/JavaIntroduceParameterMethodUsagesProcessor.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/JavaIntroduceParameterMethodUsagesProcessor.java index 0e23dc5a18e8..3a6f26048340 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/JavaIntroduceParameterMethodUsagesProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/JavaIntroduceParameterMethodUsagesProcessor.java @@ -141,7 +141,28 @@ public class JavaIntroduceParameterMethodUsagesProcessor implements IntroducePar } - public void findConflicts(IntroduceParameterData data, UsageInfo[] usages, MultiMap conflicts) { + public void findConflicts(IntroduceParameterData data, UsageInfo[] usages, final MultiMap conflicts) { + final int parametersCount = data.getMethodToReplaceIn().getParameterList().getParametersCount(); + for (UsageInfo usage : usages) { + if (!isMethodUsage(usage)) continue; + final PsiElement element = usage.getElement(); + final PsiCall call = RefactoringUtil.getCallExpressionByMethodReference(element); + final PsiExpressionList argList = call.getArgumentList(); + if (argList != null) { + final int actualParamLength = argList.getExpressions().length; + if (actualParamLength < parametersCount) { + conflicts.putValue(call, "Incomplete call(" + call.getText() +"): " + parametersCount + " parameters expected but only " + actualParamLength + " found"); + } + data.getParametersToRemove().forEach(new TIntProcedure() { + public boolean execute(int paramNum) { + if (paramNum >= actualParamLength) { + conflicts.putValue(call, "Incomplete call(" + call.getText() +"): expected to delete the " + paramNum + " parameter but only " + actualParamLength + " parameters found"); + } + return true; + } + }); + } + } } public boolean processChangeMethodSignature(IntroduceParameterData data, UsageInfo usage, UsageInfo[] usages) throws IncorrectOperationException { diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/OldReferenceResolver.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/OldReferenceResolver.java index e15651b92f66..a6adff0d5dc1 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/OldReferenceResolver.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/OldReferenceResolver.java @@ -63,9 +63,6 @@ public class OldReferenceResolver { myProject = myContext.getProject(); myManager = myContext.getManager(); - if (myActualArgs.length < myMethodToReplaceIn.getParameterList().getParametersCount()) { - LOG.debug(myContext.getText() + "\n-----\n" + myMethodToReplaceIn.getText()); - } PsiElementFactory factory = JavaPsiFacade.getInstance(myProject).getElementFactory(); PsiExpression instanceRef; if (myContext instanceof PsiMethodCallExpression) { diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java index 63950d0af0dc..9cee9fa41f98 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java @@ -166,7 +166,7 @@ public class IntroduceParameterTest extends LightCodeInsightTestCase { } public void testParameterJavaDocBeforeVararg() throws Exception { - doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_INACCESSIBLE, false, false, true, false); + doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_INACCESSIBLE, false, false, true, false, "Incomplete call(method()): 1 parameters expected but only 0 found"); } public void testIncorrectScope() throws Exception { @@ -230,7 +230,8 @@ public class IntroduceParameterTest extends LightCodeInsightTestCase { } public void testIncompleteEnumDefinition() throws Exception { - doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, true, false, false, false); + doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, true, false, false, false, "Incomplete call(Root()): 2 parameters expected but only 0 found\n" + + "Incomplete call(Root()): expected to delete the 1 parameter but only 0 parameters found"); } private void doTestThroughHandler() throws Exception {