From 1eb5c99f95c7f6655b6d9cee89c58c37c85ea78f Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 27 Dec 2012 17:05:02 +0100 Subject: [PATCH] IDEA-97504 Make source location functionality pluggable --- .../compiled/ClsCustomNavigationPolicyEx.java | 49 +++++++++++++++++++ .../psi/impl/compiled/ClsFileImpl.java | 9 ++++ 2 files changed, 58 insertions(+) create mode 100644 java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsCustomNavigationPolicyEx.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsCustomNavigationPolicyEx.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsCustomNavigationPolicyEx.java new file mode 100644 index 000000000000..66e83a19576e --- /dev/null +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsCustomNavigationPolicyEx.java @@ -0,0 +1,49 @@ +/* + * Copyright 2000-2012 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.psi.impl.compiled; + +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author peter + */ +public abstract class ClsCustomNavigationPolicyEx implements ClsCustomNavigationPolicy { + @Nullable + @Override + public PsiElement getNavigationElement(@NotNull ClsClassImpl clsClass) { + return null; + } + + @Nullable + @Override + public PsiElement getNavigationElement(@NotNull ClsMethodImpl clsMethod) { + return null; + } + + @Nullable + @Override + public PsiElement getNavigationElement(@NotNull ClsFieldImpl clsField) { + return null; + } + + @Nullable + public PsiFile getFileNavigationElement(@NotNull ClsFileImpl file) { + return null; + } +} diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsFileImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsFileImpl.java index 200510bc0046..21e170359993 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsFileImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsFileImpl.java @@ -256,6 +256,15 @@ public class ClsFileImpl extends ClsRepositoryPsiElement @Override @NotNull public PsiElement getNavigationElement() { + for (ClsCustomNavigationPolicy customNavigationPolicy : Extensions.getExtensions(ClsCustomNavigationPolicy.EP_NAME)) { + if (customNavigationPolicy instanceof ClsCustomNavigationPolicyEx) { + PsiFile navigationElement = ((ClsCustomNavigationPolicyEx)customNavigationPolicy).getFileNavigationElement(this); + if (navigationElement != null) { + return navigationElement; + } + } + } + return JavaPsiImplementationHelper.getInstance(getProject()).getClsFileNavigationElement(this); }