Debugger: remove while loop

#KT-10043 Fixed
This commit is contained in:
Natalia Ukhorskaya
2015-11-18 16:25:40 +03:00
parent 9a736bf874
commit 7e5e749735
2 changed files with 11 additions and 14 deletions
@@ -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<KtExpression> aClass) {
public static <T extends PsiElement> T findElementOfClassAtRange(@NotNull PsiFile file, int startOffset, int endOffset, Class<T> aClass) {
// When selected range is this@Fo<select>o</select> 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) {
@@ -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? {