From 23ee0bb7582672057b9f0b5cebeaa2651cf80472 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 26 Mar 2012 15:13:07 +0400 Subject: [PATCH] Got rid of unnecessary dependency of java-psi-impl on platform-api: extracted ContentBasedClassFileProcessor.getDecompiledPsiFile() to separate extension point in ClsFileDecompiledPsiFileProvider, in java-psi-api module. --- .../psi/ClsFileDecompiledPsiFileProvider.java | 37 +++++++++++++++++++ java/java-psi-impl/java-psi-impl.iml | 1 - .../psi/impl/compiled/ClsFileImpl.java | 12 ++---- .../ContentBasedClassFileProcessor.java | 9 ----- .../src/META-INF/LangExtensionPoints.xml | 2 + 5 files changed, 43 insertions(+), 18 deletions(-) create mode 100644 java/java-psi-api/src/com/intellij/psi/ClsFileDecompiledPsiFileProvider.java diff --git a/java/java-psi-api/src/com/intellij/psi/ClsFileDecompiledPsiFileProvider.java b/java/java-psi-api/src/com/intellij/psi/ClsFileDecompiledPsiFileProvider.java new file mode 100644 index 000000000000..c5ca74428224 --- /dev/null +++ b/java/java-psi-api/src/com/intellij/psi/ClsFileDecompiledPsiFileProvider.java @@ -0,0 +1,37 @@ +/* + * 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; + +import com.intellij.openapi.extensions.ExtensionPointName; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author Evgeny Gerashchenko + * @since 3/20/12 + */ +public interface ClsFileDecompiledPsiFileProvider { + ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.psi.clsDecompiledFileProvider"); + + /** + * Returns decompiled PSI associated with this classfile + * + * @param clsFile instance of ClsFile + * @return decompiled PSI file + */ + @Nullable + PsiFile getDecompiledPsiFile(@NotNull PsiJavaFile clsFile); +} diff --git a/java/java-psi-impl/java-psi-impl.iml b/java/java-psi-impl/java-psi-impl.iml index 6c15172b7e3d..ccd2d51410f9 100644 --- a/java/java-psi-impl/java-psi-impl.iml +++ b/java/java-psi-impl/java-psi-impl.iml @@ -12,7 +12,6 @@ - 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 1de25cafa001..631c86dd3a50 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 @@ -26,8 +26,6 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileTypes.ContentBasedClassFileProcessor; -import com.intellij.openapi.fileTypes.ContentBasedFileSubstitutor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.progress.NonCancelableSection; import com.intellij.openapi.progress.ProgressIndicatorProvider; @@ -327,12 +325,10 @@ public class ClsFileImpl extends ClsRepositoryPsiElement @Override public PsiFile getDecompiledPsiFile() { - for (ContentBasedFileSubstitutor processor : Extensions.getExtensions(ContentBasedFileSubstitutor.EP_NAME)) { - if (processor instanceof ContentBasedClassFileProcessor && processor.isApplicable(getProject(), getVirtualFile())) { - PsiFile decompiledPsiFile = ((ContentBasedClassFileProcessor)processor).getDecompiledPsiFile(this); - if (decompiledPsiFile != null) { - return decompiledPsiFile; - } + for (ClsFileDecompiledPsiFileProvider provider : Extensions.getExtensions(ClsFileDecompiledPsiFileProvider.EP_NAME)) { + PsiFile decompiledPsiFile = provider.getDecompiledPsiFile(this); + if (decompiledPsiFile != null) { + return decompiledPsiFile; } } return (PsiFile) getMirror(); diff --git a/platform/platform-api/src/com/intellij/openapi/fileTypes/ContentBasedClassFileProcessor.java b/platform/platform-api/src/com/intellij/openapi/fileTypes/ContentBasedClassFileProcessor.java index 595f3dc87d10..dee22ce81b6a 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileTypes/ContentBasedClassFileProcessor.java +++ b/platform/platform-api/src/com/intellij/openapi/fileTypes/ContentBasedClassFileProcessor.java @@ -34,13 +34,4 @@ public interface ContentBasedClassFileProcessor extends ContentBasedFileSubstitu */ @NotNull SyntaxHighlighter createHighlighter(Project project, VirtualFile vFile); - - /** - * Returns decompiled PSI associated with this classfile - * - * @param clsFile instance of ClsFile - * @return decompiled PSI file - */ - @Nullable - PsiFile getDecompiledPsiFile(PsiFile clsFile); } diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index 04707cc5ddfa..8c33091ef480 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -532,6 +532,8 @@ +