mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java: make Inline parameter Flexible Constructor Bodies aware (IDEA-377621)
GitOrigin-RevId: ee720fecb1fb4c447188eab28090bc858d22119e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
40d25dbdc3
commit
c44bcf0283
+5
-5
@@ -7,6 +7,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.pom.java.JavaFeature;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.controlFlow.DefUseUtil;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
@@ -136,11 +137,10 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
|
||||
}
|
||||
}
|
||||
|
||||
final PsiParameter[] parameters = myMethod.getParameterList().getParameters();
|
||||
final List<ParameterInfoImpl> psiParameters = new ArrayList<>();
|
||||
int paramIdx = 0;
|
||||
final String paramName = myParameter.getName();
|
||||
for (PsiParameter param : parameters) {
|
||||
for (PsiParameter param : myMethod.getParameterList().getParameters()) {
|
||||
if (!Comparing.strEqual(paramName, param.getName())) {
|
||||
psiParameters.add(ParameterInfoImpl.create(paramIdx).withName(param.getName()).withType(param.getType()));
|
||||
}
|
||||
@@ -291,9 +291,9 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
|
||||
}
|
||||
|
||||
private @Nullable PsiElement findAnchorForLocalVariableDeclaration(PsiCodeBlock body) {
|
||||
PsiMethodCallExpression call = JavaPsiConstructorUtil.findThisOrSuperCallInConstructor(myMethod);
|
||||
if (call != null) {
|
||||
return call.getParent();
|
||||
if (!JavaFeature.STATEMENTS_BEFORE_SUPER.isSufficient(PsiUtil.getLanguageLevel(body))) {
|
||||
PsiMethodCallExpression call = JavaPsiConstructorUtil.findThisOrSuperCallInConstructor(myMethod);
|
||||
if (call != null) return call.getParent();
|
||||
}
|
||||
return body.getLBrace();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
class CrashTestDummy {
|
||||
public CrashTestDummy(String bar<caret>) { // inline the parameter
|
||||
System.out.println(bar);
|
||||
super();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new CrashTestDummy("bar".toString());
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
class CrashTestDummy {
|
||||
public CrashTestDummy() {
|
||||
String bar = "bar".toString(); // inline the parameter
|
||||
System.out.println(bar);
|
||||
super();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new CrashTestDummy();
|
||||
}
|
||||
}
|
||||
+9
-23
@@ -4,11 +4,13 @@ package com.intellij.java.refactoring.inline;
|
||||
import com.intellij.JavaTestUtil;
|
||||
import com.intellij.codeInsight.TargetElementUtil;
|
||||
import com.intellij.java.refactoring.LightRefactoringTestCase;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.refactoring.BaseRefactoringProcessor;
|
||||
import com.intellij.refactoring.inline.InlineParameterExpressionProcessor;
|
||||
import com.intellij.refactoring.inline.InlineParameterHandler;
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import com.intellij.testFramework.IdeaTestUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -137,29 +139,13 @@ public class InlineParameterTest extends LightRefactoringTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testRightSideAssignment() {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
public void testRefNewInnerForMethod() {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
public void testRefNewInnerAvailable() {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
public void testLocalVarDeclarationInConstructor() {
|
||||
doTest(true);
|
||||
}
|
||||
|
||||
public void testFromClassInitializer() {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
public void testPropagatedParams() {
|
||||
doTest(false);
|
||||
}
|
||||
public void testRightSideAssignment() { doTest(false); }
|
||||
public void testRefNewInnerForMethod() { doTest(false); }
|
||||
public void testRefNewInnerAvailable() { doTest(false); }
|
||||
public void testLocalVarDeclarationInConstructor() { IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_8, () -> doTest(true)); }
|
||||
public void testFlexibleConstructorBody() { doTest(true); }
|
||||
public void testFromClassInitializer() { doTest(false); }
|
||||
public void testPropagatedParams() { doTest(false); }
|
||||
|
||||
public void testParameterWithWriteAccess() {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user