mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
public API for custom java source position highlighting
This commit is contained in:
committed by
Egor.Ushakov
parent
152e100b1b
commit
76199111c1
+36
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user