Java: update Inline Parameter refactoring messages

GitOrigin-RevId: 3c9c0e2886810b5ad14e7fb4b51250c83b829c39
This commit is contained in:
Bas Leijdekkers
2024-10-16 10:06:48 +00:00
committed by intellij-monorepo-bot
parent f7fcafc161
commit f959b2e066
3 changed files with 47 additions and 59 deletions
@@ -73,7 +73,6 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
return InlineParameterHandler.getRefactoringName();
}
@NotNull
@Override
protected UsageViewDescriptor createUsageViewDescriptor(UsageInfo @NotNull [] usages) {
@@ -82,7 +81,6 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
@Override
protected UsageInfo @NotNull [] findUsages() {
int parameterIndex = myMethod.getParameterList().getParameterIndex(myParameter);
final Map<PsiVariable, PsiElement> localToParamRef = new HashMap<>();
final PsiExpression[] arguments = myMethodCall.getArgumentList().getExpressions();
@@ -141,7 +139,6 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
}
}
final PsiParameter[] parameters = myMethod.getParameterList().getParameters();
final List<ParameterInfoImpl> psiParameters = new ArrayList<>();
int paramIdx = 0;
@@ -337,26 +334,29 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
final PsiElement element = expression.resolve();
if (element instanceof PsiMember member && !member.hasModifierProperty(PsiModifier.STATIC)) {
if (myMethod.hasModifierProperty(PsiModifier.STATIC)) {
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.dependency.unavailable.in.static.method",
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.dependency.unavailable.in.parameter.method",
RefactoringUIUtil.getDescription(element, false)));
}
}
if (element instanceof PsiMethod || element instanceof PsiField) {
if (!mySameClass && !((PsiModifierListOwner)element).hasModifierProperty(PsiModifier.STATIC)) {
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.depends.on.non.static"));
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.depends.on.non.static",
RefactoringUIUtil.getDescription(element, true)));
} else if (!PsiUtil.isAccessible((PsiMember)element, myMethod, null)) {
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.depends.on.unavailable.value"));
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.dependency.unavailable.in.parameter.method",
RefactoringUIUtil.getDescription(element, true)));
}
} else if (element instanceof PsiParameter param && PsiTreeUtil.isAncestor(param.getDeclarationScope(), myInitializer, true)) {
boolean bound = false;
for (PsiParameter parameter : myMethod.getParameterList().getParameters()) {
if (parameter.getType().equals(((PsiParameter)element).getType()) && parameter.getName().equals(((PsiParameter)element).getName())) {
if (parameter.getType().equals(param.getType()) && parameter.getName().equals(param.getName())) {
bound = true;
break;
}
}
if (!bound) {
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.depends.on.caller.parameter"));
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.depends.on.caller.parameter",
RefactoringUIUtil.getDescription(element, false)));
}
}
}
@@ -374,10 +374,9 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
}
final PsiClass methodContainingClass = myMethod.getContainingClass();
LOG.assertTrue(methodContainingClass != null);
if (!PsiTreeUtil.isAncestor(containingClass, methodContainingClass, false)) {
myConflicts.putValue(thisExpression, JavaRefactoringBundle.message("inline.parameter.depends.on.unavailable.element.inside.method", "this"));
} else if (myMethod.hasModifierProperty(PsiModifier.STATIC)) {
myConflicts.putValue(thisExpression, JavaRefactoringBundle.message("inline.parameter.depends.on.this.inside.static.method"));
if (!PsiTreeUtil.isAncestor(containingClass, methodContainingClass, false) || myMethod.hasModifierProperty(PsiModifier.STATIC)) {
myConflicts.putValue(thisExpression, JavaRefactoringBundle.message("inline.parameter.dependency.unavailable.in.parameter.method",
"<b><code>this<code></b>"));
}
}
@@ -386,9 +385,9 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
super.visitReferenceElement(reference);
if (myMethod.hasModifierProperty(PsiModifier.STATIC)) {
final PsiElement resolved = reference.resolve();
if (resolved instanceof PsiClass cls &&
(PsiUtil.isInnerClass(cls) || PsiUtil.isLocalClass(cls))) {
myConflicts.putValue(reference, JavaRefactoringBundle.message("inline.parameter.depends.on.non.static.class"));
if (resolved instanceof PsiClass cls && (PsiUtil.isInnerClass(cls) || PsiUtil.isLocalClass(cls))) {
myConflicts.putValue(reference, JavaRefactoringBundle.message("inline.parameter.depends.on.non.static.class",
RefactoringUIUtil.getDescription(resolved, true)));
}
}
}
@@ -397,25 +396,24 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
public void visitNewExpression(@NotNull PsiNewExpression expression) {
super.visitNewExpression(expression);
final PsiJavaCodeReferenceElement reference = expression.getClassOrAnonymousClassReference();
if (reference != null && reference.resolve() instanceof PsiClass refClass) {
final String classUnavailableMessage =
JavaRefactoringBundle.message("inline.parameter.depends.on.unavailable.element.inside.method",
RefactoringUIUtil.getDescription(refClass, true));
if (!PsiUtil.isAccessible(refClass, myMethod, null)) {
myConflicts.putValue(expression, classUnavailableMessage);
if (reference != null && reference.resolve() instanceof PsiClass aClass) {
if (!PsiUtil.isAccessible(aClass, myMethod, null)) {
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.dependency.unavailable.in.parameter.method",
RefactoringUIUtil.getDescription(aClass, true)));
}
else {
final PsiClass methodContainingClass = myMethod.getContainingClass();
LOG.assertTrue(methodContainingClass != null);
if (!PsiTreeUtil.isAncestor(myMethod, refClass, false)) {
PsiElement parent = refClass;
while ((parent = parent.getParent()) instanceof PsiClass) {
if (!PsiUtil.isAccessible((PsiClass)parent, myMethod, null)) {
if (!PsiTreeUtil.isAncestor(myMethod, aClass, false)) {
PsiElement parent = aClass;
while ((parent = parent.getParent()) instanceof PsiClass parentClass) {
if (!PsiUtil.isAccessible(parentClass, myMethod, null)) {
break;
}
}
if (!(parent instanceof PsiFile)) {
myConflicts.putValue(expression, classUnavailableMessage);
myConflicts.putValue(expression, JavaRefactoringBundle.message("inline.parameter.dependency.unavailable.in.parameter.method",
RefactoringUIUtil.getDescription(aClass, true)));
}
}
}
@@ -1,4 +1,4 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.java.refactoring.inline;
import com.intellij.JavaTestUtil;
@@ -12,8 +12,6 @@ import com.intellij.refactoring.util.CommonRefactoringUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
public class InlineParameterTest extends LightRefactoringTestCase {
@NotNull
@Override
@@ -90,7 +88,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on this which is not available inside the method and cannot be inlined", e.getMessage());
assertEquals("Parameter initializer depends on <b><code>this<code></b> which is not accessible inside the parameter's method", e.getMessage());
}
}
@@ -135,7 +133,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on class <b><code>User.Local</code></b> which is not available inside the method and cannot be inlined", e.getMessage());
assertEquals("Parameter initializer depends on class <b><code>User.Local</code></b> which is not accessible inside the parameter's method", e.getMessage());
}
}
@@ -168,7 +166,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (CommonRefactoringUtil.RefactoringErrorHintException e) {
assertEquals("Inline parameter which has write usages is not supported", e.getMessage());
assertEquals("Inlining parameter with write usages is not supported", e.getMessage());
}
}
@@ -177,7 +175,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on local class <b><code>Local</code></b> which is not available inside the method and cannot be inlined", e.getMessage());
assertEquals("Parameter initializer depends on local class <b><code>Local</code></b> which is not accessible inside the parameter's method", e.getMessage());
}
}
@@ -198,7 +196,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on local class <b><code>Local</code></b> which is not available inside the method and cannot be inlined", e.getMessage());
assertEquals("Parameter initializer depends on local class <b><code>Local</code></b> which is not accessible inside the parameter's method", e.getMessage());
}
}
@@ -207,7 +205,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on value which is not available inside method and cannot be inlined", e.getMessage());
assertEquals("Write access to parameter initializer cannot be inlined", e.getMessage());
}
}
@@ -216,7 +214,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on callers parameter", e.getMessage());
assertEquals("Parameter initializer depends on caller's parameter <b><code>objct</code></b>", e.getMessage());
}
}
@@ -239,7 +237,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on method <b><code>provideObject()</code></b> which is not available inside the static method", e.getMessage());
assertEquals("Parameter initializer depends on method <b><code>provideObject()</code></b> which is not accessible inside the parameter's method", e.getMessage());
}
}
@@ -248,7 +246,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on non static class which is not available inside static method", e.getMessage());
assertEquals("Parameter initializer depends on non-static class <b><code>ExpData.DD</code></b> which is not accessible inside the parameter's method", e.getMessage());
}
}
@@ -257,7 +255,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on this which is not available inside the static method", e.getMessage());
assertEquals("Parameter initializer depends on <b><code>this<code></b> which is not accessible inside the parameter's method", e.getMessage());
}
}
@@ -266,7 +264,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on value which is not available inside method", e.getMessage());
assertEquals("Parameter initializer depends on method <b><code>VisibilityPinline.provideObject()</code></b> which is not accessible inside the parameter's method", e.getMessage());
}
}
@@ -275,7 +273,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on value which is not available inside method and cannot be inlined", e.getMessage());
assertEquals("Write access to parameter initializer cannot be inlined", e.getMessage());
}
}
@@ -284,7 +282,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on callers parameter", e.getMessage());
assertEquals("Parameter initializer depends on caller's parameter <b><code>b</code></b>", e.getMessage());
}
}
@@ -302,9 +300,7 @@ public class InlineParameterTest extends LightRefactoringTestCase {
}
catch (CommonRefactoringUtil.RefactoringErrorHintException e) {
assertEquals("Cannot find constant initializer for parameter", e.getMessage());
return;
}
fail("Initializer shoul not be found");
}
public void testParameterDefWithWriteAccess() {
@@ -319,7 +315,6 @@ public class InlineParameterTest extends LightRefactoringTestCase {
public void testSameSignatureExistConflict() {
try {
doTest(false);
fail();
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Method doTest() is already defined in the class <b><code>Test</code></b>", e.getMessage());
@@ -330,19 +325,17 @@ public class InlineParameterTest extends LightRefactoringTestCase {
doTest(false);
}
private void doTest(final boolean createLocal) {
private void doTest(boolean createLocal) {
getProject().putUserData(InlineParameterExpressionProcessor.CREATE_LOCAL_FOR_TESTS, createLocal);
String name = getTestName(false);
@NonNls String fileName = "/refactoring/inlineParameter/" + name + ".java";
@NonNls String fileName = "/refactoring/inlineParameter/" + getTestName(false) + ".java";
configureByFile(fileName);
performAction();
checkResultByFile(null, fileName + ".after", true);
}
private void performAction() {
final PsiElement element = TargetElementUtil.findTargetElement(getEditor(), TargetElementUtil
.REFERENCED_ELEMENT_ACCEPTED |
final PsiElement element = TargetElementUtil.findTargetElement(getEditor(), TargetElementUtil.REFERENCED_ELEMENT_ACCEPTED |
TargetElementUtil.ELEMENT_NAME_ACCEPTED);
new InlineParameterHandler().inlineElement(getProject(), getEditor(), element);
}
@@ -330,20 +330,17 @@ inline.parameter.confirmation=Inline parameter ''{0}'' with initializer ''{1}''?
inline.parameter.error.hierarchy=Inline parameter is not supported when method is a part of inheritance hierarchy
inline.parameter.error.non.project.method=Inline is not supported for non-project methods
inline.parameter.error.varargs=Inline for varargs parameters is not supported
inline.parameter.dependency.unavailable.in.static.method=Parameter initializer depends on {0} which is not available inside the static method
inline.parameter.depends.on.caller.parameter=Parameter initializer depends on callers parameter
inline.parameter.depends.on.non.static=Parameter initializer depends on non static member from some other class
inline.parameter.depends.on.non.static.class=Parameter initializer depends on non static class which is not available inside static method
inline.parameter.depends.on.this.inside.static.method=Parameter initializer depends on this which is not available inside the static method
inline.parameter.depends.on.unavailable.element.inside.method=Parameter initializer depends on {0} which is not available inside the method and cannot be inlined
inline.parameter.depends.on.unavailable.value=Parameter initializer depends on value which is not available inside method
inline.parameter.initializer.depends.on.inaccessible.value=Parameter initializer depends on value which is not available inside method and cannot be inlined
inline.parameter.dependency.unavailable.in.parameter.method=Parameter initializer depends on {0} which is not accessible inside the parameter''s method
inline.parameter.depends.on.caller.parameter=Parameter initializer depends on caller''s {0}
inline.parameter.depends.on.non.static=Parameter initializer depends on non-static {0} and an instance is not available inside the parameter''s method
inline.parameter.depends.on.non.static.class=Parameter initializer depends on non-static {0} which is not accessible inside the parameter''s method
inline.parameter.initializer.depends.on.inaccessible.value=Write access to parameter initializer cannot be inlined
inline.parameter.method.usages.progress=Searching for method usages
inline.parameter.no.usages.warning.message=Method has no usages
inline.parameter.not.accessible.warning.message=Constant initializer is not accessible in method body
inline.parameter.refactoring=Inline Parameter
inline.parameter.replace.with.local.checkbox=R&eplace with local variable
inline.parameter.write.usages.warning.message=Inline parameter which has write usages is not supported
inline.parameter.write.usages.warning.message=Inlining parameter with write usages is not supported
inline.pattern.variable.title=Inline Pattern Variable
inline.super.class=Inline Super Class
inline.super.class.action.name=Inline Super Class\u2026