From 7108c0437d87607ff392d5f574532f786a49ebbf Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 2 Dec 2009 22:24:55 +0300 Subject: [PATCH] assertion (14269) --- .../introduceVariable/IntroduceVariableBase.java | 13 ++++++++----- .../SubExpressionFromIntellijidearulezzz.after.java | 6 ++++++ .../SubExpressionFromIntellijidearulezzz.java | 5 +++++ .../intellij/refactoring/IntroduceVariableTest.java | 4 ++++ 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.after.java create mode 100644 java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java index a4c5aa45b129..017c5a722852 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java @@ -334,11 +334,12 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase impleme tempExpr.putUserData(ElementToWorkOn.PARENT, parent); final String fakeInitializer = "intellijidearulezzz"; - final PsiExpression toBeExpression = createReplacement(fakeInitializer, project, prefix, suffix, parent, rangeMarker); + final int[] refIdx = new int[1]; + final PsiExpression toBeExpression = createReplacement(fakeInitializer, project, prefix, suffix, parent, rangeMarker, refIdx); toBeExpression.accept(errorsVisitor); if (hasErrors[0]) return null; - final PsiReferenceExpression refExpr = PsiTreeUtil.getParentOfType(toBeExpression.findElementAt(toBeExpression.getText().indexOf(fakeInitializer)), PsiReferenceExpression.class); + final PsiReferenceExpression refExpr = PsiTreeUtil.getParentOfType(toBeExpression.findElementAt(refIdx[0]), PsiReferenceExpression.class); assert refExpr != null; if (ReplaceExpressionUtil.isNeedParenthesis(refExpr.getNode(), tempExpr.getNode())) { return null; @@ -602,14 +603,14 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase impleme final PsiElement parent = expr1.getUserData(ElementToWorkOn.PARENT); final RangeMarker rangeMarker = expr1.getUserData(ElementToWorkOn.TEXT_RANGE); - return parent.replace(createReplacement(ref.getText(), project, prefix, suffix, parent, rangeMarker)); + return parent.replace(createReplacement(ref.getText(), project, prefix, suffix, parent, rangeMarker, new int[1])); } } private static PsiExpression createReplacement(final String refText, final Project project, final String prefix, final String suffix, - final PsiElement parent, final RangeMarker rangeMarker) { + final PsiElement parent, final RangeMarker rangeMarker, int[] refIdx) { final String allText = parent.getContainingFile().getText(); final TextRange parentRange = parent.getTextRange(); @@ -619,7 +620,9 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase impleme String end = allText.substring(rangeMarker.getEndOffset(), parentRange.getEndOffset()); if (StringUtil.stripQuotesAroundValue(end).trim().length() == 0 && suffix == null) end = ""; - final String text = beg + (prefix != null ? prefix : "") + refText + (suffix != null ? suffix : "") + end; + final String start = beg + (prefix != null ? prefix : ""); + refIdx[0] = start.length(); + final String text = start + refText + (suffix != null ? suffix : "") + end; return JavaPsiFacade.getInstance(project).getElementFactory().createExpressionFromText(text, parent); } diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.after.java b/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.after.java new file mode 100644 index 000000000000..a7277f4468ed --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.after.java @@ -0,0 +1,6 @@ +class A { + public void test() { + String str = "sintellijidearulezzzs"; + String s = "intellijidearulezzz" + str + "sintellijidearulezzz"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.java b/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.java new file mode 100644 index 000000000000..55d687e0892b --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/SubExpressionFromIntellijidearulezzz.java @@ -0,0 +1,5 @@ +class A { + public void test() { + String s = "intellijidearulezzzsintellijidearulezzzssintellijidearulezzz"; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java index 3e0793b9351b..7e6b61327d86 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -174,6 +174,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { doTest(new MockIntroduceVariableHandler("str", false, false, false, "java.lang.String")); } + public void testSubExpressionFromIntellijidearulezzz() throws Exception { + doTest(new MockIntroduceVariableHandler("str", false, false, false, "java.lang.String")); + } + public void testSubPrimitiveLiteral() throws Exception { doTest(new MockIntroduceVariableHandler("str", false, false, false, "boolean")); }