From 5440a5e2282b9a4a27ce6c95ef0923c8cff60e0b Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 31 Jan 2020 02:40:32 +0300 Subject: [PATCH] 201: No BinaryFileStubBuilders.EP_NAME anymore (bunched) --- .../KotlinCoreApplicationEnvironment.java | 6 +- .../KotlinCoreApplicationEnvironment.java.201 | 148 ++++++++++++++++++ 2 files changed, 149 insertions(+), 5 deletions(-) create mode 100644 compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreApplicationEnvironment.java.201 diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreApplicationEnvironment.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreApplicationEnvironment.java index 6446db9c278..f5a5525c63e 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreApplicationEnvironment.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreApplicationEnvironment.java @@ -30,15 +30,14 @@ import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.fileTypes.PlainTextLanguage; import com.intellij.openapi.fileTypes.PlainTextParserDefinition; import com.intellij.openapi.projectRoots.JavaVersionService; -import com.intellij.openapi.util.KeyWithDefaultValue; import com.intellij.openapi.vfs.VirtualFileSystem; import com.intellij.psi.*; import com.intellij.psi.augment.PsiAugmentProvider; import com.intellij.psi.augment.TypeAnnotationModifier; import com.intellij.psi.compiled.ClassFileDecompilers; -import com.intellij.psi.impl.PsiSubstitutorFactoryImpl; import com.intellij.psi.impl.LanguageConstantExpressionEvaluator; import com.intellij.psi.impl.PsiExpressionEvaluator; +import com.intellij.psi.impl.PsiSubstitutorFactoryImpl; import com.intellij.psi.impl.compiled.ClassFileStubBuilder; import com.intellij.psi.impl.file.PsiPackageImplementationHelper; import com.intellij.psi.impl.search.MethodSuperSearcher; @@ -53,9 +52,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.cli.jvm.modules.CoreJrtFileSystem; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; - /** * adapted from com.intellij.core.JavaCoreApplicationEnvironment * TODO: initiate removal original from com.intellij.core since it seems that there are no usages left diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreApplicationEnvironment.java.201 b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreApplicationEnvironment.java.201 new file mode 100644 index 00000000000..f3e6de5f7eb --- /dev/null +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreApplicationEnvironment.java.201 @@ -0,0 +1,148 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ +package org.jetbrains.kotlin.cli.jvm.compiler; + +import com.intellij.codeInsight.ContainerProvider; +import com.intellij.codeInsight.JavaContainerProvider; +import com.intellij.codeInsight.folding.JavaCodeFoldingSettings; +import com.intellij.codeInsight.folding.impl.JavaCodeFoldingSettingsBase; +import com.intellij.codeInsight.folding.impl.JavaFoldingBuilderBase; +import com.intellij.codeInsight.runner.JavaMainMethodProvider; +import com.intellij.core.CoreApplicationEnvironment; +import com.intellij.core.CoreJavaDirectoryService; +import com.intellij.core.CorePsiPackageImplementationHelper; +import com.intellij.ide.highlighter.ArchiveFileType; +import com.intellij.ide.highlighter.JavaClassFileType; +import com.intellij.ide.highlighter.JavaFileType; +import com.intellij.lang.LanguageASTFactory; +import com.intellij.lang.MetaLanguage; +import com.intellij.lang.folding.LanguageFolding; +import com.intellij.lang.java.JavaLanguage; +import com.intellij.lang.java.JavaParserDefinition; +import com.intellij.navigation.ItemPresentationProviders; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.extensions.ExtensionsArea; +import com.intellij.openapi.fileTypes.PlainTextFileType; +import com.intellij.openapi.fileTypes.PlainTextLanguage; +import com.intellij.openapi.fileTypes.PlainTextParserDefinition; +import com.intellij.openapi.projectRoots.JavaVersionService; +import com.intellij.openapi.vfs.VirtualFileSystem; +import com.intellij.psi.*; +import com.intellij.psi.augment.PsiAugmentProvider; +import com.intellij.psi.augment.TypeAnnotationModifier; +import com.intellij.psi.compiled.ClassFileDecompilers; +import com.intellij.psi.impl.LanguageConstantExpressionEvaluator; +import com.intellij.psi.impl.PsiExpressionEvaluator; +import com.intellij.psi.impl.PsiSubstitutorFactoryImpl; +import com.intellij.psi.impl.compiled.ClassFileStubBuilder; +import com.intellij.psi.impl.file.PsiPackageImplementationHelper; +import com.intellij.psi.impl.search.MethodSuperSearcher; +import com.intellij.psi.impl.source.tree.JavaASTFactory; +import com.intellij.psi.impl.source.tree.PlainTextASTFactory; +import com.intellij.psi.meta.MetaDataContributor; +import com.intellij.psi.presentation.java.*; +import com.intellij.psi.search.searches.SuperMethodsSearch; +import com.intellij.psi.stubs.BinaryFileStubBuilders; +import com.intellij.util.QueryExecutor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.cli.jvm.modules.CoreJrtFileSystem; + +/** + * adapted from com.intellij.core.JavaCoreApplicationEnvironment + * TODO: initiate removal original from com.intellij.core since it seems that there are no usages left + */ +public class KotlinCoreApplicationEnvironment extends CoreApplicationEnvironment { + + public static KotlinCoreApplicationEnvironment create(@NotNull Disposable parentDisposable, boolean unitTestMode) { + return new KotlinCoreApplicationEnvironment(parentDisposable, unitTestMode); + } + + private KotlinCoreApplicationEnvironment(@NotNull Disposable parentDisposable, boolean unitTestMode) { + super(parentDisposable, unitTestMode); + + registerExtensionPoints(); + + registerExtensions(); + } + + private void registerExtensionPoints() { + ExtensionsArea area = Extensions.getRootArea(); + + CoreApplicationEnvironment.registerExtensionPoint(area, FileContextProvider.EP_NAME, FileContextProvider.class); + + CoreApplicationEnvironment.registerExtensionPoint(area, MetaDataContributor.EP_NAME, MetaDataContributor.class); + CoreApplicationEnvironment.registerExtensionPoint(area, PsiAugmentProvider.EP_NAME, PsiAugmentProvider.class); + CoreApplicationEnvironment.registerExtensionPoint(area, JavaMainMethodProvider.EP_NAME, JavaMainMethodProvider.class); + + CoreApplicationEnvironment.registerExtensionPoint(area, ContainerProvider.EP_NAME, ContainerProvider.class); + CoreApplicationEnvironment.registerExtensionPoint(area, ClassFileDecompilers.EP_NAME, ClassFileDecompilers.Decompiler.class); + + CoreApplicationEnvironment.registerExtensionPoint(area, TypeAnnotationModifier.EP_NAME, TypeAnnotationModifier.class); + CoreApplicationEnvironment.registerExtensionPoint(area, MetaLanguage.EP_NAME, MetaLanguage.class); + + IdeaExtensionPoints.INSTANCE.registerVersionSpecificAppExtensionPoints(area); + } + + private void registerExtensions() { + registerFileType(JavaClassFileType.INSTANCE, "class"); + registerFileType(JavaFileType.INSTANCE, "java"); + registerFileType(ArchiveFileType.INSTANCE, "jar;zip"); + registerFileType(PlainTextFileType.INSTANCE, "txt;sh;bat;cmd;policy;log;cgi;MF;jad;jam;htaccess"); + + addExplicitExtension(LanguageASTFactory.INSTANCE, PlainTextLanguage.INSTANCE, new PlainTextASTFactory()); + registerParserDefinition(new PlainTextParserDefinition()); + + addExplicitExtension(FileTypeFileViewProviders.INSTANCE, JavaClassFileType.INSTANCE, new ClassFileViewProviderFactory()); + addExplicitExtension(BinaryFileStubBuilders.INSTANCE, JavaClassFileType.INSTANCE, new ClassFileStubBuilder()); + + addExplicitExtension(LanguageASTFactory.INSTANCE, JavaLanguage.INSTANCE, new JavaASTFactory()); + registerParserDefinition(new JavaParserDefinition()); + addExplicitExtension(LanguageConstantExpressionEvaluator.INSTANCE, JavaLanguage.INSTANCE, new PsiExpressionEvaluator()); + + addExtension(ContainerProvider.EP_NAME, new JavaContainerProvider()); + + myApplication.registerService(PsiPackageImplementationHelper.class, new CorePsiPackageImplementationHelper()); + myApplication.registerService(PsiSubstitutorFactory.class, new PsiSubstitutorFactoryImpl()); + + myApplication.registerService(JavaDirectoryService.class, createJavaDirectoryService()); + myApplication.registerService(JavaVersionService.class, new JavaVersionService()); + + addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiPackage.class, new PackagePresentationProvider()); + addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiClass.class, new ClassPresentationProvider()); + addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiMethod.class, new MethodPresentationProvider()); + addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiField.class, new FieldPresentationProvider()); + addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiLocalVariable.class, new VariablePresentationProvider()); + addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiParameter.class, new VariablePresentationProvider()); + + registerApplicationService(JavaCodeFoldingSettings.class, new JavaCodeFoldingSettingsBase()); + addExplicitExtension(LanguageFolding.INSTANCE, JavaLanguage.INSTANCE, new JavaFoldingBuilderBase() { + @Override + protected boolean shouldShowExplicitLambdaType(@NotNull PsiAnonymousClass anonymousClass, @NotNull PsiNewExpression expression) { + return false; + } + + @Override + protected boolean isBelowRightMargin(@NotNull PsiFile file, int lineLength) { + return false; + } + }); + + registerApplicationExtensionPoint(SuperMethodsSearch.EP_NAME, QueryExecutor.class); + addExtension(SuperMethodsSearch.EP_NAME, new MethodSuperSearcher()); + } + + // overridden in upsource + protected CoreJavaDirectoryService createJavaDirectoryService() { + return new CoreJavaDirectoryService(); + } + + @Nullable + @Override + protected VirtualFileSystem createJrtFileSystem() { + return new CoreJrtFileSystem(); + } +} \ No newline at end of file