Inline method: use StatementExtractor when removing unused parameters

IDEA-215429 Inline method with unused parameter causes uncompilable or unintended code

GitOrigin-RevId: d701c4a49b64202144c4d5ba80047d8f846f1767
This commit is contained in:
Tagir Valeev
2019-06-04 08:10:11 +03:00
committed by intellij-monorepo-bot
parent f1afe2cc56
commit 2ad37d8194
4 changed files with 44 additions and 9 deletions
@@ -33,6 +33,7 @@ import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.introduceParameter.Util;
@@ -47,10 +48,7 @@ import com.intellij.util.IncorrectOperationException;
import com.intellij.util.JavaPsiConstructorUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.MultiMap;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.ExpressionUtils;
import com.siyeh.ig.psiutils.SideEffectChecker;
import com.siyeh.ig.psiutils.VariableAccessUtils;
import com.siyeh.ig.psiutils.*;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -989,12 +987,14 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor {
PsiExpression initializer = variable.getInitializer();
if (firstRef == null) {
if (initializer != null && SideEffectChecker.mayHaveSideEffects(initializer)) {
RemoveUnusedVariableUtil.replaceElementWithExpression(initializer, PsiElementFactory.getInstance(myProject), variable);
}
else {
variable.getParent().delete();
PsiDeclarationStatement declaration = (PsiDeclarationStatement)variable.getParent();
if (initializer != null) {
List<PsiExpression> sideEffects = SideEffectChecker.extractSideEffectExpressions(initializer);
for (PsiStatement statement : StatementExtractor.generateStatements(sideEffects, initializer)) {
declaration.getParent().addBefore(statement, declaration);
}
}
declaration.delete();
return;
}
@@ -0,0 +1,16 @@
import java.util.Set;
import java.util.Map;
class Temp {
public Object foo(Set<String> bar) {
if (bar.size() < 2)
return <caret>abortWithCorruptDataError("" + bar.size()); // Inline this
return bar;
}
public static Map<String, Object> abortWithCorruptDataError(Object message) { // or online this
return null;
}
}
@@ -0,0 +1,15 @@
import java.util.Set;
class Temp {
public Object foo(Set<String> bar) {
if (bar.size() < 2) {
// Inline this
bar.size(); // or online this
return null;
}
return bar;
}
}
@@ -526,6 +526,10 @@ public class InlineMethodTest extends LightRefactoringTestCase {
public void testInvertMethod() {
doTest();
}
public void testUnusedParameter() {
doTest();
}
@Override
protected Sdk getProjectJDK() {