diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaSourcePositionHighlighter.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaSourcePositionHighlighter.java new file mode 100644 index 000000000000..7a8a4d70584a --- /dev/null +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaSourcePositionHighlighter.java @@ -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; + } +} diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java index 75665f4025de..77b1c44f093d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java @@ -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 getLineElements(final PsiFile file, int lineNumber) { diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java index 74e50d2920bd..b776bcad7349 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java @@ -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); } } diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/SourcePositionHighlighter.java b/java/debugger/openapi/src/com/intellij/debugger/engine/SourcePositionHighlighter.java new file mode 100644 index 000000000000..f8349e8bffb2 --- /dev/null +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/SourcePositionHighlighter.java @@ -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 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; + } +} diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index b3fb1a66c5e4..e4cb9111458d 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -150,6 +150,9 @@ + + @@ -1520,6 +1523,7 @@ +