From 7e5e749735fc20b98339f1933454bb9683fa880f Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Wed, 18 Nov 2015 16:25:40 +0300 Subject: [PATCH] Debugger: remove while loop #KT-10043 Fixed --- .../idea/codeInsight/CodeInsightUtils.java | 16 ++++++++-------- .../evaluate/extractFunctionForDebuggerUtil.kt | 9 +++------ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/CodeInsightUtils.java b/idea/src/org/jetbrains/kotlin/idea/codeInsight/CodeInsightUtils.java index 1914598a96b..374570432bd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/CodeInsightUtils.java +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/CodeInsightUtils.java @@ -48,7 +48,7 @@ public class CodeInsightUtils { @Nullable public static KtExpression findExpression(@NotNull PsiFile file, int startOffset, int endOffset) { - PsiElement element = findElementOfClassAtRange(file, startOffset, endOffset, KtExpression.class); + KtExpression element = findElementOfClassAtRange(file, startOffset, endOffset, KtExpression.class); if (element == null) return null; // TODO: Support binary operations in "Introduce..." refactorings @@ -73,7 +73,7 @@ public class CodeInsightUtils { } } - KtExpression expression = (KtExpression) element; + KtExpression expression = element; BindingContext context = ResolutionUtils.analyze(expression); @@ -136,7 +136,7 @@ public class CodeInsightUtils { } @Nullable - public static PsiElement findElementOfClassAtRange(@NotNull PsiFile file, int startOffset, int endOffset, Class aClass) { + public static T findElementOfClassAtRange(@NotNull PsiFile file, int startOffset, int endOffset, Class aClass) { // When selected range is this@Fo we'd like to return `@Foo` // But it's PSI looks like: (AT IDENTIFIER):JetLabel // So if we search parent starting exactly at IDENTIFIER then we find nothing @@ -149,13 +149,13 @@ public class CodeInsightUtils { startOffset = element1.getTextRange().getStartOffset(); endOffset = element2.getTextRange().getEndOffset(); - KtExpression ktExpression = PsiTreeUtil.findElementOfClassAtRange(file, startOffset, endOffset, aClass); - if (ktExpression == null || - ktExpression.getTextRange().getStartOffset() != startOffset || - ktExpression.getTextRange().getEndOffset() != endOffset) { + T newElement = PsiTreeUtil.findElementOfClassAtRange(file, startOffset, endOffset, aClass); + if (newElement == null || + newElement.getTextRange().getStartOffset() != startOffset || + newElement.getTextRange().getEndOffset() != endOffset) { return null; } - return ktExpression; + return newElement; } private static PsiElement getParentLabelOrElement(@Nullable PsiElement element) { diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt index 77473dca867..3dc160c0f48 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt @@ -34,6 +34,8 @@ import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.psi.patternMatching.toRange import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.codeFragmentUtil.suppressDiagnosticsInDebugMode +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset fun getFunctionForExtractedFragment( codeFragment: KtCodeFragment, @@ -138,12 +140,7 @@ private fun addImportsToFile(newImportList: KtImportList?, tmpFile: KtFile) { } private fun KtFile.getElementInCopy(e: PsiElement): PsiElement? { - val offset = e.textRange?.startOffset ?: return null - var elementAt = this.findElementAt(offset) - while (elementAt == null || elementAt.textRange?.endOffset != e.textRange?.endOffset) { - elementAt = elementAt?.parent - } - return elementAt + return CodeInsightUtils.findElementOfClassAtRange(this, e.startOffset, e.endOffset, e.javaClass) } private fun getExpressionToAddDebugExpressionBefore(tmpFile: KtFile, contextElement: PsiElement?, line: Int): PsiElement? {