Debugger: refactor list of breakpoints for the line with lambdas.

^KT-24136 Fixed

Rename main line breakpoint to "Line"
Change icon for lambda-breakpoint
Move "all breakpoint" to the end of the breakpoints list
This commit is contained in:
Natalia Selezneva
2018-04-24 13:56:14 +03:00
parent 8bce29df3a
commit ec63efec3c
2 changed files with 12 additions and 38 deletions
@@ -30,17 +30,14 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
import kotlin.text.StringsKt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.java.debugger.breakpoints.properties.JavaBreakpointProperties;
import org.jetbrains.java.debugger.breakpoints.properties.JavaLineBreakpointProperties;
import org.jetbrains.kotlin.idea.KotlinIcons;
import org.jetbrains.kotlin.idea.debugger.KotlinPositionManager;
import org.jetbrains.kotlin.psi.KtClassInitializer;
import org.jetbrains.kotlin.psi.KtFunction;
import javax.swing.*;
import java.util.List;
public class KotlinLineBreakpointType extends JavaLineBreakpointType {
@@ -144,31 +141,4 @@ public class KotlinLineBreakpointType extends JavaLineBreakpointType {
}
return null;
}
public class KotlinLambdaBreakpointVariant extends ExactJavaBreakpointVariant {
public KotlinLambdaBreakpointVariant(@NotNull XSourcePosition position, @Nullable KtFunction function, Integer lambdaOrdinal) {
super(position, function, lambdaOrdinal);
}
@Override
public Icon getIcon() {
return KotlinIcons.LAMBDA;
}
}
public class KotlinLineBreakpointVariant extends ExactJavaBreakpointVariant {
public KotlinLineBreakpointVariant(XSourcePosition position, PsiElement element) {
super(position, element, -1);
}
@Override
public String getText() {
return StringsKt.replace(super.getText(), " ", "", true);
}
@Override
public Icon getIcon() {
return KotlinIcons.FUNCTION;
}
}
}
@@ -86,8 +86,9 @@ fun canPutAt(file: VirtualFile, line: Int, project: Project, breakpointTypeClass
}
fun computeVariants(
project: Project, position: XSourcePosition,
kotlinBreakpointType: KotlinLineBreakpointType
project: Project,
position: XSourcePosition,
kotlinBreakpointType: KotlinLineBreakpointType
): List<JavaLineBreakpointType.JavaBreakpointVariant> {
val file = PsiManager.getInstance(project).findFile(position.file) as? KtFile ?: return emptyList()
@@ -100,21 +101,24 @@ fun computeVariants(
val elementAt = pos.elementAt.parentsWithSelf.firstIsInstance<KtElement>()
val mainMethod = KotlinLineBreakpointType.getContainingMethod(elementAt)
if (mainMethod != null) {
result.add(kotlinBreakpointType.KotlinLineBreakpointVariant(
XSourcePositionImpl.createByElement(mainMethod),
CodeInsightUtils.getTopmostElementAtOffset(elementAt, pos.offset)))
result.add(
kotlinBreakpointType.LineJavaBreakpointVariant(
position,
CodeInsightUtils.getTopmostElementAtOffset(elementAt, pos.offset),
-1
)
)
}
lambdas.forEachIndexed { ordinal, lambda ->
val positionImpl = XSourcePositionImpl.createByElement(lambda.bodyExpression)
if (positionImpl != null) {
result.add(kotlinBreakpointType.KotlinLambdaBreakpointVariant(positionImpl, lambda, ordinal))
result.add(kotlinBreakpointType.LambdaJavaBreakpointVariant(positionImpl, lambda, ordinal))
}
}
val allBreakpoint = (kotlinBreakpointType as JavaLineBreakpointType).JavaBreakpointVariant(position)
result.addFirst(allBreakpoint)
result.add(kotlinBreakpointType.JavaBreakpointVariant(position))
return result
}