IDEA-131134 Support multiple breakpoints within on single line - support custom line breakpoint highlighter range

This commit is contained in:
Egor.Ushakov
2015-06-16 18:01:58 +03:00
parent d54d79422f
commit 5589d1992f
5 changed files with 61 additions and 17 deletions
@@ -37,7 +37,6 @@ import com.intellij.xdebugger.impl.breakpoints.XLineBreakpointVariant;
import com.intellij.xdebugger.impl.breakpoints.XLineBreakpointVariantsProvider;
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 javax.swing.*;
@@ -48,7 +47,7 @@ import java.util.List;
* Base class for java line-connected exceptions (line, method, field)
* @author egor
*/
public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaBreakpointProperties>
public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaLineBreakpointProperties>
implements JavaBreakpointType, XLineBreakpointVariantsProvider<JavaLineBreakpointType.JavaBreakpointVariant> {
public JavaLineBreakpointType() {
super("java-line", DebuggerBundle.message("line.breakpoints.tab.title"));
@@ -65,7 +64,7 @@ public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaBreak
}
@Override
public List<XBreakpointGroupingRule<XLineBreakpoint<JavaBreakpointProperties>, ?>> getGroupingRules() {
public List<XBreakpointGroupingRule<XLineBreakpoint<JavaLineBreakpointProperties>, ?>> getGroupingRules() {
return XDebuggerUtil.getInstance().getGroupingByFileRuleAsList();
}
@@ -191,4 +190,21 @@ public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaBreak
return properties;
}
}
@Nullable
@Override
public TextRange getHighlightRange(JavaLineBreakpointProperties properties, Document document, Project project) {
Integer offset = properties.getOffset();
if (offset != null) {
PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(document);
if (file != null) {
PsiElement elem = file.findElementAt(offset);
NavigatablePsiElement method = PsiTreeUtil.getParentOfType(elem, PsiMethod.class, PsiLambdaExpression.class);
if (method != null) {
return method.getTextRange();
}
}
}
return null;
}
}