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:
-30
@@ -30,17 +30,14 @@ import com.intellij.psi.util.PsiTreeUtil;
|
|||||||
import com.intellij.xdebugger.XSourcePosition;
|
import com.intellij.xdebugger.XSourcePosition;
|
||||||
import com.intellij.xdebugger.breakpoints.XBreakpoint;
|
import com.intellij.xdebugger.breakpoints.XBreakpoint;
|
||||||
import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
|
import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
|
||||||
import kotlin.text.StringsKt;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.java.debugger.breakpoints.properties.JavaBreakpointProperties;
|
import org.jetbrains.java.debugger.breakpoints.properties.JavaBreakpointProperties;
|
||||||
import org.jetbrains.java.debugger.breakpoints.properties.JavaLineBreakpointProperties;
|
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.idea.debugger.KotlinPositionManager;
|
||||||
import org.jetbrains.kotlin.psi.KtClassInitializer;
|
import org.jetbrains.kotlin.psi.KtClassInitializer;
|
||||||
import org.jetbrains.kotlin.psi.KtFunction;
|
import org.jetbrains.kotlin.psi.KtFunction;
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class KotlinLineBreakpointType extends JavaLineBreakpointType {
|
public class KotlinLineBreakpointType extends JavaLineBreakpointType {
|
||||||
@@ -144,31 +141,4 @@ public class KotlinLineBreakpointType extends JavaLineBreakpointType {
|
|||||||
}
|
}
|
||||||
return null;
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-8
@@ -86,8 +86,9 @@ fun canPutAt(file: VirtualFile, line: Int, project: Project, breakpointTypeClass
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun computeVariants(
|
fun computeVariants(
|
||||||
project: Project, position: XSourcePosition,
|
project: Project,
|
||||||
kotlinBreakpointType: KotlinLineBreakpointType
|
position: XSourcePosition,
|
||||||
|
kotlinBreakpointType: KotlinLineBreakpointType
|
||||||
): List<JavaLineBreakpointType.JavaBreakpointVariant> {
|
): List<JavaLineBreakpointType.JavaBreakpointVariant> {
|
||||||
val file = PsiManager.getInstance(project).findFile(position.file) as? KtFile ?: return emptyList()
|
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 elementAt = pos.elementAt.parentsWithSelf.firstIsInstance<KtElement>()
|
||||||
val mainMethod = KotlinLineBreakpointType.getContainingMethod(elementAt)
|
val mainMethod = KotlinLineBreakpointType.getContainingMethod(elementAt)
|
||||||
if (mainMethod != null) {
|
if (mainMethod != null) {
|
||||||
result.add(kotlinBreakpointType.KotlinLineBreakpointVariant(
|
result.add(
|
||||||
XSourcePositionImpl.createByElement(mainMethod),
|
kotlinBreakpointType.LineJavaBreakpointVariant(
|
||||||
CodeInsightUtils.getTopmostElementAtOffset(elementAt, pos.offset)))
|
position,
|
||||||
|
CodeInsightUtils.getTopmostElementAtOffset(elementAt, pos.offset),
|
||||||
|
-1
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
lambdas.forEachIndexed { ordinal, lambda ->
|
lambdas.forEachIndexed { ordinal, lambda ->
|
||||||
val positionImpl = XSourcePositionImpl.createByElement(lambda.bodyExpression)
|
val positionImpl = XSourcePositionImpl.createByElement(lambda.bodyExpression)
|
||||||
|
|
||||||
if (positionImpl != null) {
|
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.add(kotlinBreakpointType.JavaBreakpointVariant(position))
|
||||||
result.addFirst(allBreakpoint)
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user