diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/util/InlineUtil.java b/java/java-impl-refactorings/src/com/intellij/refactoring/util/InlineUtil.java index 1ea1339dd746..d70d5386619c 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/util/InlineUtil.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/util/InlineUtil.java @@ -64,12 +64,13 @@ public final class InlineUtil implements CommonJavaInlineUtil { PsiClass refParent = RefactoringChangeUtil.getThisClass(ref); final PsiType varType = variable.getType(); initializer = CommonJavaRefactoringUtil.convertInitializerToNormalExpression(initializer, varType); - if (initializer instanceof PsiPolyadicExpression) { - final IElementType operationTokenType = ((PsiPolyadicExpression)initializer).getOperationTokenType(); + if (initializer instanceof PsiPolyadicExpression concatenation && parent instanceof PsiPolyadicExpression parentConcatenation) { + final IElementType operationTokenType = concatenation.getOperationTokenType(); if ((operationTokenType == JavaTokenType.PLUS || operationTokenType == JavaTokenType.MINUS) && - parent instanceof PsiPolyadicExpression && ((PsiPolyadicExpression)parent).getOperationTokenType() == JavaTokenType.PLUS) { - final PsiType type = ((PsiPolyadicExpression)parent).getType(); - if (type != null && type.equalsToText(CommonClassNames.JAVA_LANG_STRING)) { + parentConcatenation.getOperationTokenType() == JavaTokenType.PLUS) { + final PsiType type = parentConcatenation.getType(); + if (type != null && type.equalsToText(CommonClassNames.JAVA_LANG_STRING) && + !varType.equalsToText(CommonClassNames.JAVA_LANG_STRING)) { final PsiElementFactory factory = JavaPsiFacade.getElementFactory(initializer.getProject()); initializer = factory.createExpressionFromText("(" + initializer.getText() + ")", initializer); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/afterExprLambdaCommentsUsedArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/afterExprLambdaCommentsUsedArg.java index 392908c3f038..5855f367786e 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/afterExprLambdaCommentsUsedArg.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/afterExprLambdaCommentsUsedArg.java @@ -5,6 +5,6 @@ import java.util.function.Function; public class Test { public static void main(String[] args) { /* bar */ - String s = ("a" +/* who-hoo */ "x") + "foo"; + String s = "a" +/* who-hoo */ "x" + "foo"; } } \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/ConcatenationInConcatenation.java b/java/java-tests/testData/refactoring/inlineMethod/ConcatenationInConcatenation.java new file mode 100644 index 000000000000..954574d130c8 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/ConcatenationInConcatenation.java @@ -0,0 +1,9 @@ +class X { + String string() { + return "heavy" + "⚡️" + "metal"; + } + + String x() { + return "🤘" + string() + "🤘"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/ConcatenationInConcatenation.java.after b/java/java-tests/testData/refactoring/inlineMethod/ConcatenationInConcatenation.java.after new file mode 100644 index 000000000000..16d87ba904bd --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/ConcatenationInConcatenation.java.after @@ -0,0 +1,6 @@ +class X { + + String x() { + return "🤘" + "heavy" + "⚡️" + "metal" + "🤘"; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineMethodTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineMethodTest.java index c78663fcd725..a5876c8b4663 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineMethodTest.java @@ -1,4 +1,4 @@ -// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2023 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; @@ -16,8 +16,6 @@ import com.intellij.testFramework.IdeaTestUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import java.util.List; - public class InlineMethodTest extends LightRefactoringTestCase { @NotNull @Override @@ -347,6 +345,10 @@ public class InlineMethodTest extends LightRefactoringTestCase { public void testStringPlusOverload() { doTest(); } + + public void testConcatenationInConcatenation() { + doTest(); + } public void testReturnStatementWithoutBraces() { doTestInlineThisOnly();