public API for custom java source position highlighting

This commit is contained in:
Nikolay Tropin
2015-06-24 13:44:20 +03:00
committed by Egor.Ushakov
parent 152e100b1b
commit 76199111c1
5 changed files with 88 additions and 21 deletions
@@ -0,0 +1,36 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.debugger.engine;
import com.intellij.debugger.SourcePosition;
import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLambdaExpression;
/**
* @author Nikolay.Tropin
*/
public class JavaSourcePositionHighlighter extends SourcePositionHighlighter {
@Override
public TextRange getHighlightRange(SourcePosition sourcePosition) {
PsiElement method = DebuggerUtilsEx.getContainingMethod(sourcePosition);
if (method instanceof PsiLambdaExpression) {
return method.getTextRange();
}
return null;
}
}
@@ -28,7 +28,10 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.NullableComputable;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
@@ -38,7 +41,6 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.EmptyIterable;
import com.intellij.xdebugger.impl.ui.ExecutionPointHighlighter;
import com.sun.jdi.AbsentInformationException;
import com.sun.jdi.Location;
import com.sun.jdi.Method;
@@ -200,7 +202,7 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio
return new JavaSourcePosition(sourcePosition, location.declaringType(), method, lambdaOrdinal);
}
private static class JavaSourcePosition extends RemappedSourcePosition implements ExecutionPointHighlighter.HighlighterProvider {
private static class JavaSourcePosition extends RemappedSourcePosition {
private final String myExpectedClassName;
private final String myExpectedMethodName;
private final int myLambdaOrdinal;
@@ -275,16 +277,6 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio
}
});
}
@Nullable
@Override
public TextRange getHighlightRange() {
PsiElement method = DebuggerUtilsEx.getContainingMethod(this);
if (method instanceof PsiLambdaExpression) {
return method.getTextRange();
}
return null;
}
}
private static Iterable<PsiElement> getLineElements(final PsiFile file, int lineNumber) {
@@ -22,10 +22,7 @@ package com.intellij.debugger.impl;
import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.SourcePosition;
import com.intellij.debugger.engine.DebuggerManagerThreadImpl;
import com.intellij.debugger.engine.DebuggerUtils;
import com.intellij.debugger.engine.LambdaMethodFilter;
import com.intellij.debugger.engine.SuspendContextImpl;
import com.intellij.debugger.engine.*;
import com.intellij.debugger.engine.evaluation.*;
import com.intellij.debugger.engine.evaluation.expression.EvaluatorBuilder;
import com.intellij.debugger.engine.requests.RequestManagerImpl;
@@ -752,10 +749,7 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
@Nullable
@Override
public TextRange getHighlightRange() {
if (mySourcePosition instanceof ExecutionPointHighlighter.HighlighterProvider) {
return ((ExecutionPointHighlighter.HighlighterProvider)mySourcePosition).getHighlightRange();
}
return null;
return SourcePositionHighlighter.getHighlightRangeFor(mySourcePosition);
}
}
@@ -0,0 +1,41 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.debugger.engine;
import com.intellij.debugger.SourcePosition;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.util.TextRange;
import org.jetbrains.annotations.Nullable;
/**
* @author Nikolay.Tropin
*/
public abstract class SourcePositionHighlighter {
public static final ExtensionPointName<SourcePositionHighlighter> EP_NAME = ExtensionPointName.create("com.intellij.debugger.sourcePositionHighlighter");
abstract TextRange getHighlightRange(SourcePosition sourcePosition);
@Nullable
public static TextRange getHighlightRangeFor(SourcePosition sourcePosition) {
for (SourcePositionHighlighter provider: EP_NAME.getExtensions()) {
TextRange range = provider.getHighlightRange(sourcePosition);
if (range != null) {
return range;
}
}
return null;
}
}
+4
View File
@@ -150,6 +150,9 @@
<extensionPoint name="debugger.extraSteppingFilter"
interface="com.intellij.debugger.engine.ExtraSteppingFilter"/>
<extensionPoint name="debugger.sourcePositionHighlighter"
interface="com.intellij.debugger.engine.SourcePositionHighlighter"/>
<extensionPoint name="allOverridingMethodsSearch" interface="com.intellij.util.QueryExecutor"/>
<extensionPoint name="annotatedElementsSearch" interface="com.intellij.util.QueryExecutor"/>
<extensionPoint name="annotatedPackagesSearch" interface="com.intellij.util.QueryExecutor"/>
@@ -1520,6 +1523,7 @@
<debugger.simplePropertyGetterProvider implementation="com.intellij.debugger.engine.JavaSimpleGetterProvider"/>
<debugger.syntheticProvider implementation="com.intellij.debugger.engine.DefaultSyntheticProvider"/>
<debugger.sourcePositionProvider implementation="com.intellij.debugger.engine.DefaultSourcePositionProvider" order="last"/>
<debugger.sourcePositionHighlighter implementation="com.intellij.debugger.engine.JavaSourcePositionHighlighter"/>
<debugger.nodeRenderer implementation="com.intellij.debugger.ui.tree.render.ColorObjectRenderer"/>
<debugger.nodeRenderer implementation="com.intellij.debugger.ui.tree.render.ImageObjectRenderer"/>