diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java b/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java index 72dc89503493..6358b248d248 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java @@ -35,6 +35,7 @@ import com.intellij.psi.util.TypeConversionUtil; import com.intellij.refactoring.AbstractJavaInplaceIntroducer; import com.intellij.refactoring.IntroduceVariableUtil; import com.intellij.refactoring.RefactoringActionHandler; +import com.intellij.refactoring.introduceField.ElementToWorkOn; import com.intellij.refactoring.rename.ResolveSnapshotProvider; import com.intellij.refactoring.rename.inplace.SelectableInlayPresentation; import com.intellij.refactoring.rename.inplace.TemplateInlayUtil; @@ -138,6 +139,18 @@ public class JavaVariableInplaceIntroducer extends AbstractJavaInplaceIntroducer super.restoreState(psiField); } + @Override + protected RangeMarker createMarker(PsiElement element) { + int length = myEditor.getDocument().getTextLength(); + if (element.getTextRange().getEndOffset() > length) { + RangeMarker marker = ElementToWorkOn.TEXT_RANGE.get(element); + if (marker != null) { + return marker; + } + } + return super.createMarker(element); + } + @Override protected boolean ensureValid() { final PsiVariable variable = getVariable(); diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noIllegalArgumentException.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noIllegalArgumentException.java new file mode 100644 index 000000000000..42cf24991781 --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noIllegalArgumentException.java @@ -0,0 +1,35 @@ +public class GraphQLIntrospectionQuery { + + String INTROSPECTION_QUERY = "fragment TypeRef on __Type {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "\n";} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noIllegalArgumentException_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noIllegalArgumentException_after.java new file mode 100644 index 000000000000..8c64fecfe64d --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noIllegalArgumentException_after.java @@ -0,0 +1,41 @@ +public class GraphQLIntrospectionQuery { + + String INTROSPECTION_QUERY; + + { + String s = "fragment TypeRef on __Type {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " ofType {\n" + + " kind\n" + + " name\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "\n"; + INTROSPECTION_QUERY = s; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceVariableTest.java index 058abf588684..c1b354e0f6f6 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceVariableTest.java @@ -1,4 +1,4 @@ -// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.java.refactoring; import com.intellij.codeInsight.template.impl.TemplateManagerImpl; @@ -348,6 +348,10 @@ public class InplaceIntroduceVariableTest extends AbstractJavaInplaceIntroduceTe public void testNoExternalTypeAnnotations() { doTest(null); } + + public void testNoIllegalArgumentException() { + doTest(null); + } public void testSplitMutuallyExclusiveIf() { doTestReplaceChoice("Replace all 0 occurrences"); }