From ea604652c6b696f1b2cd08ec4f53f5591b2a48c1 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 5 Feb 2019 16:26:55 +0300 Subject: [PATCH] [platform] add new GotoDeclarationProvider and NavigationTarget APIs (IDEA-198180) --- .../intellij/navigation/NavigationTarget.java | 42 +++++++++++++++++++ .../navigation/GotoDeclarationProvider.java | 20 +++++++++ .../src/META-INF/LangExtensionPoints.xml | 2 + 3 files changed, 64 insertions(+) create mode 100644 platform/core-api/src/com/intellij/navigation/NavigationTarget.java create mode 100644 platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoDeclarationProvider.java diff --git a/platform/core-api/src/com/intellij/navigation/NavigationTarget.java b/platform/core-api/src/com/intellij/navigation/NavigationTarget.java new file mode 100644 index 000000000000..805e8f8ec277 --- /dev/null +++ b/platform/core-api/src/com/intellij/navigation/NavigationTarget.java @@ -0,0 +1,42 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.navigation; + +import com.intellij.pom.Navigatable; +import org.jetbrains.annotations.ApiStatus.Experimental; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +@Experimental +public interface NavigationTarget { + + /** + * @return {@code true} if it's safe to call other methods of this instance + */ + boolean isValid(); + + /** + * This method is called only if {@link #isValid()} returns {@code true}. + * + * @return navigatable instance to use when this target is selected + */ + @Nullable + Navigatable getNavigatable(); + + /** + * This method is called only if {@link #isValid()} returns {@code true}. + * + * @return presentation to render this target in navigation popup + */ + @NotNull + TargetPresentation getTargetPresentation(); + + /** + * Two different symbols may have the same navigation target. + * #equals and #hashCode are used to filter out same targets to hide them in navigation popup. + */ + @Override + boolean equals(Object obj); + + @Override + int hashCode(); +} diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoDeclarationProvider.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoDeclarationProvider.java new file mode 100644 index 000000000000..4b966ecbb873 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoDeclarationProvider.java @@ -0,0 +1,20 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.codeInsight.navigation; + +import com.intellij.navigation.NavigationTarget; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.ApiStatus.Experimental; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Consumer; + +@Experimental +public interface GotoDeclarationProvider { + + void collectTargets(@NotNull Project project, + @NotNull Editor editor, + @NotNull PsiFile file, + @NotNull Consumer consumer); +} diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index 5a3d2d59d363..1298889fc08c 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -601,6 +601,8 @@ interface="com.intellij.codeInsight.navigation.actions.TypeDeclarationProvider"/> +