From 84b8ed00c588da92381c4f9f65383f555ce47265 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 22 Jul 2015 20:18:38 +0300 Subject: [PATCH] Refactor: Move TargetPlatform to frontend, make it expose platform dependant resolve services AdditionalCheckerProvider -> PlatformConfigurator which operates directly on container --- .../kotlin/cli/jvm/repl/di/injection.kt | 4 +- .../kotlin/frontend/java/di/injection.kt | 8 +-- .../resolve/jvm/platform/JvmPlatform.kt | 25 +++++++ .../jvm/platform/JvmPlatformConfigurator.kt} | 47 +++++++++---- .../jetbrains/kotlin/frontend/di/injection.kt | 42 +++++------- .../resolve/AdditionalCheckerProvider.kt | 41 ------------ .../kotlin/resolve/TargetPlatform.kt | 67 +++++++++++++++++++ .../expressions/ExpressionTypingContext.java | 1 - .../expressions/LocalClassifierAnalyzer.kt | 5 +- .../AbstractDescriptorRendererTest.kt | 4 +- .../jetbrains/kotlin/tests/di/injection.kt | 5 +- .../JetDefaultModalityModifiersTest.java | 2 +- .../kotlin/resolve/lazy/ElementResolver.kt | 13 ++-- .../caches/resolve/JavaResolveExtension.kt | 5 +- .../idea/caches/resolve/JsAnalyzerFacade.kt | 4 +- .../idea/caches/resolve/KotlinCacheService.kt | 12 ++-- .../idea/caches/resolve/KotlinResolveCache.kt | 5 +- .../navigation/JetSourceNavigationHelper.java | 7 +- .../DuplicateJvmSignatureAnnotator.java | 6 +- .../idea/project/AnalyzerFacadeProvider.kt | 13 ++-- .../idea/project/ResolveElementCache.kt | 12 ++-- .../kotlin/idea/project/TargetPlatform.java | 49 -------------- .../idea/project/TargetPlatformDetector.java | 9 ++- .../idea/project/TargetPlatformImpl.java | 41 ------------ .../references/BuiltInsReferenceResolver.java | 4 +- idea/idea-completion/idea-completion.iml | 1 + ...tractCompiledKotlinInJavaCompletionTest.kt | 7 +- .../test/AbstractJSBasicCompletionTest.java | 6 +- .../test/AbstractJvmBasicCompletionTest.java | 6 +- .../test/AbstractJvmSmartCompletionTest.java | 6 +- .../AbstractJvmWithLibBasicCompletionTest.kt | 5 +- .../test/AbstractKeywordCompletionTest.kt | 4 +- ...bstractKotlinSourceInJavaCompletionTest.kt | 7 +- ...AbstractMultiFileJvmBasicCompletionTest.kt | 5 +- .../AbstractMultiFileSmartCompletionTest.kt | 5 +- .../completion/test/CompletionTestUtil.kt | 2 +- .../test/ExpectedCompletionUtils.java | 18 ++--- .../test/JetFixtureCompletionBaseTestCase.kt | 2 +- .../actions/ConfigureKotlinInProjectAction.kt | 11 +-- ...KotlinAndroidGradleModuleConfigurator.java | 5 +- .../KotlinGradleModuleConfigurator.java | 5 +- .../KotlinJavaMavenConfigurator.java | 5 +- .../KotlinJavaModuleConfigurator.java | 5 +- .../KotlinJavascriptMavenConfigurator.java | 5 +- .../KotlinJsModuleConfigurator.java | 5 +- .../KotlinProjectConfigurator.java | 2 +- .../idea/framework/KotlinModuleBuilder.kt | 6 +- .../framework/KotlinModuleSettingStep.java | 12 ++-- .../idea/framework/KotlinTemplatesFactory.kt | 11 +-- .../CodeFragmentCompletionInLibraryTest.kt | 5 +- .../kotlin/frontend/js/di/injection.kt | 4 +- .../jetbrains/kotlin/js/resolve/JsPlatform.kt | 25 +++++++ ...rProvider.kt => JsPlatformConfigurator.kt} | 4 +- .../android-idea-plugin.iml | 1 + .../android/AbstractAndroidCompletionTest.kt | 4 +- 55 files changed, 309 insertions(+), 311 deletions(-) create mode 100644 compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt rename compiler/frontend.java/src/org/jetbrains/kotlin/{load/kotlin/KotlinJvmCheckerProvider.kt => resolve/jvm/platform/JvmPlatformConfigurator.kt} (92%) delete mode 100644 compiler/frontend/src/org/jetbrains/kotlin/resolve/AdditionalCheckerProvider.kt create mode 100644 compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt delete mode 100644 idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatform.java delete mode 100644 idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformImpl.java create mode 100644 js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt rename js/js.frontend/src/org/jetbrains/kotlin/js/resolve/{KotlinJsCheckerProvider.kt => JsPlatformConfigurator.kt} (88%) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/di/injection.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/di/injection.kt index e01e4234fd6..a0e19d96c87 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/di/injection.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/di/injection.kt @@ -24,12 +24,12 @@ import org.jetbrains.kotlin.frontend.java.di.configureJavaTopDownAnalysis import org.jetbrains.kotlin.incremental.components.UsageCollector import org.jetbrains.kotlin.load.java.JavaClassFinderImpl import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver -import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.BodyResolveCache import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformConfigurator import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl import org.jetbrains.kotlin.resolve.lazy.ResolveSession @@ -39,7 +39,7 @@ public fun createContainerForReplWithJava( moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory, moduleContentScope: GlobalSearchScope, additionalFileScopeProvider: FileScopeProvider.AdditionalScopes ): ContainerForReplWithJava = createContainer("ReplWithJava") { - configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace) + configureModule(moduleContext, JvmPlatformConfigurator, bindingTrace) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, UsageCollector.DO_NOTHING) useInstance(additionalFileScopeProvider) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index 150099be0bf..2bac56e0ced 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.container.* import org.jetbrains.kotlin.context.LazyResolveToken import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.frontend.di.configureModule +import org.jetbrains.kotlin.incremental.components.UsageCollector import org.jetbrains.kotlin.load.java.JavaClassFinderImpl import org.jetbrains.kotlin.load.java.JavaFlexibleTypeCapabilitiesProvider import org.jetbrains.kotlin.load.java.components.* @@ -31,8 +32,6 @@ import org.jetbrains.kotlin.load.java.sam.SamConversionResolverImpl import org.jetbrains.kotlin.load.java.structure.impl.JavaPropertyInitializerEvaluatorImpl import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava import org.jetbrains.kotlin.load.kotlin.JvmVirtualFileFinderFactory -import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider -import org.jetbrains.kotlin.incremental.components.UsageCollector import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.BodyResolveCache import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer @@ -40,6 +39,7 @@ import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver import org.jetbrains.kotlin.resolve.jvm.JavaLazyAnalyzerPostConstruct +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformConfigurator import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory @@ -74,7 +74,7 @@ public fun createContainerForLazyResolveWithJava( moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory, moduleContentScope: GlobalSearchScope, moduleClassResolver: ModuleClassResolver ): Pair = createContainer("LazyResolveWithJava") { - configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace) + configureModule(moduleContext, JvmPlatformConfigurator, bindingTrace) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, UsageCollector.DO_NOTHING) useInstance(moduleClassResolver) @@ -97,7 +97,7 @@ public fun createContainerForTopDownAnalyzerForJvm( moduleContentScope: GlobalSearchScope, usageCollector: UsageCollector ): ContainerForTopDownAnalyzerForJvm = createContainer("TopDownAnalyzerForJvm") { - configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace) + configureModule(moduleContext, JvmPlatformConfigurator, bindingTrace) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, usageCollector) useInstance(declarationProviderFactory) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt new file mode 100644 index 00000000000..b3cc1f37b90 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-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 org.jetbrains.kotlin.resolve.jvm.platform + +import org.jetbrains.kotlin.resolve.PlatformConfigurator +import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.types.DynamicTypesSettings + +public object JvmPlatform : TargetPlatform("JVM", DynamicTypesSettings()) { + override val platformConfigurator: PlatformConfigurator = JvmPlatformConfigurator +} \ No newline at end of file diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmCheckerProvider.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt similarity index 92% rename from compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmCheckerProvider.kt rename to compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt index d9e1fd8f6de..78d7609a6ad 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmCheckerProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt @@ -14,9 +14,11 @@ * limitations under the License. */ -package org.jetbrains.kotlin.load.kotlin +package org.jetbrains.kotlin.resolve.jvm.platform import org.jetbrains.kotlin.cfg.WhenChecker +import org.jetbrains.kotlin.container.StorageComponentContainer +import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.diagnostics.Errors @@ -24,6 +26,8 @@ import org.jetbrains.kotlin.jvm.RuntimeAssertionsTypeChecker import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.load.java.lazy.types.isMarkedNotNull import org.jetbrains.kotlin.load.java.lazy.types.isMarkedNullable +import org.jetbrains.kotlin.load.kotlin.JavaAnnotationCallChecker +import org.jetbrains.kotlin.load.kotlin.JavaAnnotationMethodCallChecker import org.jetbrains.kotlin.load.kotlin.nativeDeclarations.NativeFunChecker import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* @@ -52,21 +56,36 @@ import org.jetbrains.kotlin.types.expressions.SenselessComparisonChecker import org.jetbrains.kotlin.types.flexibility import org.jetbrains.kotlin.types.isFlexible -public class KotlinJvmCheckerProvider(private val module: ModuleDescriptor) : AdditionalCheckerProvider( - additionalDeclarationCheckers = listOf(PlatformStaticAnnotationChecker(), - LocalFunInlineChecker(), - ReifiedTypeParameterAnnotationChecker(), - NativeFunChecker(), - OverloadsAnnotationChecker(), - PublicFieldAnnotationChecker()), +public object JvmPlatformConfigurator : PlatformConfigurator( + additionalDeclarationCheckers = listOf( + PlatformStaticAnnotationChecker(), + LocalFunInlineChecker(), + ReifiedTypeParameterAnnotationChecker(), + NativeFunChecker(), + OverloadsAnnotationChecker(), + PublicFieldAnnotationChecker() + ), - additionalCallCheckers = listOf(NeedSyntheticChecker(), JavaAnnotationCallChecker(), - JavaAnnotationMethodCallChecker(), TraitDefaultMethodCallChecker(), - ReflectionAPICallChecker(module)), + additionalCallCheckers = listOf( + NeedSyntheticChecker(), + JavaAnnotationCallChecker(), + JavaAnnotationMethodCallChecker(), + TraitDefaultMethodCallChecker() + ), - additionalTypeCheckers = listOf(JavaNullabilityWarningsChecker(), RuntimeAssertionsTypeChecker), + additionalTypeCheckers = listOf( + JavaNullabilityWarningsChecker(), + RuntimeAssertionsTypeChecker + ), additionalSymbolUsageValidators = listOf() -) +) { + + override fun configure(container: StorageComponentContainer) { + super.configure(container) + + container.useImpl() + } +} public class LocalFunInlineChecker : DeclarationChecker { @@ -145,7 +164,7 @@ public class OverloadsAnnotationChecker: DeclarationChecker { diagnosticHolder.report(ErrorsJvm.OVERLOADS_ABSTRACT.on(declaration)) } else if ((!descriptor.getVisibility().isPublicAPI() && descriptor.getVisibility() != Visibilities.INTERNAL) || - DescriptorUtils.isLocal(descriptor)) { + DescriptorUtils.isLocal(descriptor)) { diagnosticHolder.report(ErrorsJvm.OVERLOADS_PRIVATE.on(declaration)) } else if (descriptor.getValueParameters().none { it.declaresDefaultValue() }) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt index 2d109a7f6fd..5d605b5f1c2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt @@ -33,7 +33,7 @@ import org.jetbrains.kotlin.types.DynamicTypesSettings import org.jetbrains.kotlin.types.expressions.* public fun StorageComponentContainer.configureModule( - moduleContext: ModuleContext, additionalCheckerProvider: AdditionalCheckerProvider + moduleContext: ModuleContext, platformConfigurator: PlatformConfigurator ) { useInstance(moduleContext) useInstance(moduleContext.module) @@ -41,33 +41,25 @@ public fun StorageComponentContainer.configureModule( useInstance(moduleContext.storageManager) useInstance(moduleContext.builtIns) useInstance(moduleContext.platformToKotlinClassMap) - useInstance(additionalCheckerProvider) - useInstance(additionalCheckerProvider.symbolUsageValidator) - additionalCheckerProvider.declarationCheckers.forEach { - useInstance(it) - } - additionalCheckerProvider.typeCheckers.forEach { - useInstance(it) - } - additionalCheckerProvider.callCheckers.forEach { - useInstance(it) - } + useInstance(platformConfigurator) + + platformConfigurator.configure(this) } public fun StorageComponentContainer.configureModule( - moduleContext: ModuleContext, additionalCheckerProvider: AdditionalCheckerProvider, trace: BindingTrace + moduleContext: ModuleContext, platformConfigurator: PlatformConfigurator, trace: BindingTrace ) { - configureModule(moduleContext, additionalCheckerProvider) + configureModule(moduleContext, platformConfigurator) useInstance(trace) } public fun createContainerForBodyResolve( moduleContext: ModuleContext, bindingTrace: BindingTrace, - additionalCheckerProvider: AdditionalCheckerProvider, statementFilter: StatementFilter, + platformConfigurator: PlatformConfigurator, statementFilter: StatementFilter, dynamicTypesSettings: DynamicTypesSettings ): StorageComponentContainer = createContainer("BodyResolve") { - configureModule(moduleContext, additionalCheckerProvider, bindingTrace) + configureModule(moduleContext, platformConfigurator, bindingTrace) useInstance(statementFilter) useInstance(dynamicTypesSettings) @@ -77,11 +69,11 @@ public fun createContainerForBodyResolve( public fun createContainerForLazyBodyResolve( moduleContext: ModuleContext, kotlinCodeAnalyzer: KotlinCodeAnalyzer, - bindingTrace: BindingTrace, additionalCheckerProvider: AdditionalCheckerProvider, + bindingTrace: BindingTrace, platformConfigurator: PlatformConfigurator, dynamicTypesSettings: DynamicTypesSettings, bodyResolveCache: BodyResolveCache ): StorageComponentContainer = createContainer("LazyBodyResolve") { - configureModule(moduleContext, additionalCheckerProvider, bindingTrace) + configureModule(moduleContext, platformConfigurator, bindingTrace) useInstance(kotlinCodeAnalyzer) useInstance(kotlinCodeAnalyzer.getFileScopeProvider()) @@ -93,11 +85,11 @@ public fun createContainerForLazyBodyResolve( public fun createContainerForLazyLocalClassifierAnalyzer( moduleContext: ModuleContext, bindingTrace: BindingTrace, - additionalCheckerProvider: AdditionalCheckerProvider, + platformConfigurator: PlatformConfigurator, dynamicTypesSettings: DynamicTypesSettings, localClassDescriptorHolder: LocalClassDescriptorHolder ): StorageComponentContainer = createContainer("LocalClassifierAnalyzer") { - configureModule(moduleContext, additionalCheckerProvider, bindingTrace) + configureModule(moduleContext, platformConfigurator, bindingTrace) useInstance(dynamicTypesSettings) useInstance(localClassDescriptorHolder) @@ -114,9 +106,9 @@ public fun createContainerForLazyLocalClassifierAnalyzer( private fun createContainerForLazyResolve( moduleContext: ModuleContext, declarationProviderFactory: DeclarationProviderFactory, bindingTrace: BindingTrace, - additionalCheckerProvider: AdditionalCheckerProvider, dynamicTypesSettings: DynamicTypesSettings + platformConfigurator: PlatformConfigurator, dynamicTypesSettings: DynamicTypesSettings ): StorageComponentContainer = createContainer("LazyResolve") { - configureModule(moduleContext, additionalCheckerProvider, bindingTrace) + configureModule(moduleContext, platformConfigurator, bindingTrace) useInstance(dynamicTypesSettings) useInstance(declarationProviderFactory) @@ -128,14 +120,14 @@ private fun createContainerForLazyResolve( public fun createLazyResolveSession( moduleContext: ModuleContext, declarationProviderFactory: DeclarationProviderFactory, bindingTrace: BindingTrace, - additionalCheckerProvider: AdditionalCheckerProvider, dynamicTypesSettings: DynamicTypesSettings + platformConfigurator: PlatformConfigurator, dynamicTypesSettings: DynamicTypesSettings ): ResolveSession = createContainerForLazyResolve( - moduleContext, declarationProviderFactory, bindingTrace, additionalCheckerProvider, dynamicTypesSettings + moduleContext, declarationProviderFactory, bindingTrace, platformConfigurator, dynamicTypesSettings ).get() public fun createContainerForMacros(project: Project, module: ModuleDescriptor): ContainerForMacros { val componentContainer = createContainer("Macros") { - configureModule(ModuleContext(module, project), AdditionalCheckerProvider.DefaultProvider) + configureModule(ModuleContext(module, project), TargetPlatform.Default.platformConfigurator) useImpl() } return ContainerForMacros(componentContainer) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AdditionalCheckerProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AdditionalCheckerProvider.kt deleted file mode 100644 index de3a4b0a4b8..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AdditionalCheckerProvider.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2010-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 org.jetbrains.kotlin.resolve - -import org.jetbrains.kotlin.resolve.calls.checkers.* -import org.jetbrains.kotlin.resolve.validation.DeprecatedSymbolValidator -import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator - -private val DEFAULT_DECLARATION_CHECKERS = listOf(DataClassAnnotationChecker()) -private val DEFAULT_CALL_CHECKERS = listOf(CapturingInClosureChecker(), InlineCheckerWrapper(), ReifiedTypeParameterSubstitutionChecker()) -private val DEFAULT_TYPE_CHECKERS = emptyList() -private val DEFAULT_VALIDATORS = listOf(DeprecatedSymbolValidator()) - -public abstract class AdditionalCheckerProvider( - additionalDeclarationCheckers: List, - additionalCallCheckers: List, - additionalTypeCheckers: List, - additionalSymbolUsageValidators: List -) { - - public val declarationCheckers: List = DEFAULT_DECLARATION_CHECKERS + additionalDeclarationCheckers - public val callCheckers: List = DEFAULT_CALL_CHECKERS + additionalCallCheckers - public val typeCheckers: List = DEFAULT_TYPE_CHECKERS + additionalTypeCheckers - public val symbolUsageValidator: SymbolUsageValidator = SymbolUsageValidator.Composite(DEFAULT_VALIDATORS + additionalSymbolUsageValidators) - - public object DefaultProvider : AdditionalCheckerProvider(listOf(), listOf(), listOf(), listOf()) {} -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt new file mode 100644 index 00000000000..40e2d763a54 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt @@ -0,0 +1,67 @@ +/* + * Copyright 2010-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 org.jetbrains.kotlin.resolve + +import org.jetbrains.kotlin.container.StorageComponentContainer +import org.jetbrains.kotlin.container.useInstance +import org.jetbrains.kotlin.resolve.calls.checkers.* +import org.jetbrains.kotlin.resolve.validation.DeprecatedSymbolValidator +import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator +import org.jetbrains.kotlin.types.DynamicTypesSettings + +public abstract class TargetPlatform( + public val platformName: String, + public val dynamicTypesSettings: DynamicTypesSettings +) { + override fun toString(): String { + return platformName + } + + public abstract val platformConfigurator: PlatformConfigurator + + public object Default : TargetPlatform("Default", DynamicTypesSettings()) { + override val platformConfigurator = PlatformConfigurator(listOf(), listOf(), listOf(), listOf()) + } +} + +private val DEFAULT_DECLARATION_CHECKERS = listOf(DataClassAnnotationChecker()) +private val DEFAULT_CALL_CHECKERS = listOf(CapturingInClosureChecker(), InlineCheckerWrapper(), ReifiedTypeParameterSubstitutionChecker()) +private val DEFAULT_TYPE_CHECKERS = emptyList() +private val DEFAULT_VALIDATORS = listOf(DeprecatedSymbolValidator()) + + +public open class PlatformConfigurator( + additionalDeclarationCheckers: List, + additionalCallCheckers: List, + additionalTypeCheckers: List, + additionalSymbolUsageValidators: List +) { + + private val declarationCheckers: List = DEFAULT_DECLARATION_CHECKERS + additionalDeclarationCheckers + private val callCheckers: List = DEFAULT_CALL_CHECKERS + additionalCallCheckers + private val typeCheckers: List = DEFAULT_TYPE_CHECKERS + additionalTypeCheckers + private val symbolUsageValidator: SymbolUsageValidator = SymbolUsageValidator.Composite(DEFAULT_VALIDATORS + additionalSymbolUsageValidators) + + public open fun configure(container: StorageComponentContainer) { + with (container) { + declarationCheckers.forEach { useInstance(it) } + callCheckers.forEach { useInstance(it) } + typeCheckers.forEach { useInstance(it) } + useInstance(symbolUsageValidator) + } + } +} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java index 7cafa87c602..dcf5896e27c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.types.expressions; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider; import org.jetbrains.kotlin.resolve.BindingTrace; import org.jetbrains.kotlin.resolve.StatementFilter; import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt index 96ec1b76be1..e53b7ebac10 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.types.expressions import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil -import org.jetbrains.annotations.NotNull import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.GlobalContext import org.jetbrains.kotlin.context.withModule @@ -53,7 +52,7 @@ public class LocalClassifierAnalyzer( private val funcionDescriptorResolver: FunctionDescriptorResolver, private val typeResolver: TypeResolver, private val annotationResolver: AnnotationResolver, - private val additionalCheckerProvider: AdditionalCheckerProvider, + private val platformConfigurator: PlatformConfigurator, private val dynamicTypesSettings: DynamicTypesSettings ) { fun processClassOrObject( @@ -67,7 +66,7 @@ public class LocalClassifierAnalyzer( val container = createContainerForLazyLocalClassifierAnalyzer( moduleContext, context.trace, - additionalCheckerProvider, + platformConfigurator, dynamicTypesSettings, LocalClassDescriptorHolder( scope, diff --git a/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt b/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt index 3f2b65899bf..ad220698c2b 100644 --- a/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt @@ -26,9 +26,9 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.frontend.di.createLazyResolveSession -import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformConfigurator import org.jetbrains.kotlin.resolve.lazy.KotlinTestWithEnvironment import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory @@ -53,7 +53,7 @@ public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment context, FileBasedDeclarationProviderFactory(context.storageManager, listOf(psiFile)), CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), - KotlinJvmCheckerProvider(context.module), DynamicTypesSettings() + JvmPlatformConfigurator, DynamicTypesSettings() ) context.initializeModuleContents(resolveSession.getPackageFragmentProvider()) diff --git a/compiler/tests/org/jetbrains/kotlin/tests/di/injection.kt b/compiler/tests/org/jetbrains/kotlin/tests/di/injection.kt index b935237966a..474023bfb70 100644 --- a/compiler/tests/org/jetbrains/kotlin/tests/di/injection.kt +++ b/compiler/tests/org/jetbrains/kotlin/tests/di/injection.kt @@ -24,17 +24,16 @@ import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.frontend.di.configureModule -import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider -import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider import org.jetbrains.kotlin.resolve.DescriptorResolver import org.jetbrains.kotlin.resolve.FunctionDescriptorResolver import org.jetbrains.kotlin.resolve.TypeResolver +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformConfigurator import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices import org.jetbrains.kotlin.types.expressions.FakeCallResolver public fun createContainerForTests(project: Project, module: ModuleDescriptor): ContainerForTests { return ContainerForTests(createContainer("Tests") { - configureModule(ModuleContext(module, project), KotlinJvmCheckerProvider(module)) + configureModule(ModuleContext(module, project), JvmPlatformConfigurator) useImpl() }) } diff --git a/compiler/tests/org/jetbrains/kotlin/types/JetDefaultModalityModifiersTest.java b/compiler/tests/org/jetbrains/kotlin/types/JetDefaultModalityModifiersTest.java index 2a8b79a0e40..98812ba0903 100644 --- a/compiler/tests/org/jetbrains/kotlin/types/JetDefaultModalityModifiersTest.java +++ b/compiler/tests/org/jetbrains/kotlin/types/JetDefaultModalityModifiersTest.java @@ -105,7 +105,7 @@ public class JetDefaultModalityModifiersTest extends JetLiteFixture { new FileBasedDeclarationProviderFactory(moduleContext.getStorageManager(), Collections.singleton(aClass.getContainingJetFile())), new BindingTraceContext(), - AdditionalCheckerProvider.DefaultProvider.INSTANCE$, + TargetPlatform.Default.platformConfigurator, new DynamicTypesSettings() ); diff --git a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt index 17470323307..006a458d568 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.resolve.lazy -import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analyzer.computeTypeInContext import org.jetbrains.kotlin.cfg.JetFlowInformationProvider import org.jetbrains.kotlin.container.get @@ -26,20 +25,17 @@ import org.jetbrains.kotlin.context.withProject import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.frontend.di.createContainerForBodyResolve -import org.jetbrains.kotlin.resolve.util.getScopeAndDataFlowForAnalyzeFragment import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.resolve.* -import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor -import org.jetbrains.kotlin.resolve.scopes.ChainedScope import org.jetbrains.kotlin.resolve.scopes.JetScope -import org.jetbrains.kotlin.types.DynamicTypesSettings +import org.jetbrains.kotlin.resolve.util.getScopeAndDataFlowForAnalyzeFragment import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull @@ -392,9 +388,10 @@ public abstract class ElementResolver protected constructor( ): BodyResolver { val globalContext = SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker()) val module = resolveSession.getModuleDescriptor() + val targetPlatform = getTargetPlatform(file) return createContainerForBodyResolve( globalContext.withProject(file.getProject()).withModule(module), - trace, createAdditionalCheckerProvider(file, module), statementFilter, getDynamicTypesSettings(file) + trace, targetPlatform.platformConfigurator, statementFilter, targetPlatform.dynamicTypesSettings ).get() } @@ -466,9 +463,7 @@ public abstract class ElementResolver protected constructor( return null } - protected abstract fun createAdditionalCheckerProvider(file: JetFile, module: ModuleDescriptor): AdditionalCheckerProvider - - protected abstract fun getDynamicTypesSettings(file: JetFile): DynamicTypesSettings + protected abstract fun getTargetPlatform(file: JetFile): TargetPlatform private class BodyResolveContextForLazy( private val topDownAnalysisMode: TopDownAnalysisMode, diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JavaResolveExtension.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JavaResolveExtension.kt index 6bfc09d511e..986dd1f049d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JavaResolveExtension.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JavaResolveExtension.kt @@ -19,17 +19,18 @@ package org.jetbrains.kotlin.idea.caches.resolve import com.intellij.openapi.project.Project import com.intellij.psi.* import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.idea.project.TargetPlatform import org.jetbrains.kotlin.load.java.sources.JavaSourceElement import org.jetbrains.kotlin.load.java.structure.* import org.jetbrains.kotlin.load.java.structure.impl.* import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver import org.jetbrains.kotlin.resolve.jvm.JvmResolverForModule +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.scopes.JetScope public object JavaResolveExtension : CacheExtension<(PsiElement) -> Pair> { - override val platform: TargetPlatform = TargetPlatform.JVM + override val platform: TargetPlatform = JvmPlatform override fun getData(resolverProvider: ModuleResolverProvider): (PsiElement) -> Pair { return { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt index e65ade57bfa..eb5ea6c9af8 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt @@ -28,7 +28,7 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.frontend.di.createLazyResolveSession import org.jetbrains.kotlin.idea.framework.KotlinJavaScriptLibraryDetectionUtil import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS -import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider +import org.jetbrains.kotlin.js.resolve.JsPlatformConfigurator import org.jetbrains.kotlin.resolve.BindingTraceContext import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService @@ -57,7 +57,7 @@ public object JsAnalyzerFacade : AnalyzerFacade GlobalCache(platform) } + private val globalCachesPerPlatform = listOf(JvmPlatform, JsPlatform).keysToMap { platform -> GlobalCache(platform) } private inner class GlobalCache(platform: TargetPlatform) { val librariesCache = KotlinResolveCache( diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt index 26e696631cf..eac04d48cd8 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt @@ -37,7 +37,6 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve import org.jetbrains.kotlin.idea.project.ResolveSessionForBodies -import org.jetbrains.kotlin.idea.project.TargetPlatform import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.* @@ -233,8 +232,8 @@ private object KotlinResolveDataProvider { moduleContext, resolveSession, trace, - targetPlatform.createAdditionalCheckerProvider(module), - targetPlatform.getDynamicTypesSettings(), + targetPlatform.platformConfigurator, + targetPlatform.dynamicTypesSettings, resolveSession.getBodyResolveCache() ).get() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/JetSourceNavigationHelper.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/JetSourceNavigationHelper.java index 37f710913dd..62790499ed5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/JetSourceNavigationHelper.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/JetSourceNavigationHelper.java @@ -57,9 +57,9 @@ import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.platform.JavaToKotlinClassMap; import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap; import org.jetbrains.kotlin.psi.*; -import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider; import org.jetbrains.kotlin.resolve.BindingTraceContext; import org.jetbrains.kotlin.resolve.DescriptorUtils; +import org.jetbrains.kotlin.resolve.TargetPlatform; import org.jetbrains.kotlin.resolve.jvm.JvmClassName; import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM; import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer; @@ -254,8 +254,9 @@ public class JetSourceNavigationHelper { newModuleContext, providerFactory, new BindingTraceContext(), - AdditionalCheckerProvider.DefaultProvider.INSTANCE$, - new DynamicTypesSettings()); + TargetPlatform.Default.platformConfigurator, + new DynamicTypesSettings() + ); newModuleContext.initializeModuleContents(resolveSession.getPackageFragmentProvider()); return resolveSession; diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/DuplicateJvmSignatureAnnotator.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/DuplicateJvmSignatureAnnotator.java index d99ed320f93..168f4543dab 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/DuplicateJvmSignatureAnnotator.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/DuplicateJvmSignatureAnnotator.java @@ -24,13 +24,13 @@ import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.asJava.AsJavaPackage; import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage; -import org.jetbrains.kotlin.idea.project.TargetPlatform; import org.jetbrains.kotlin.idea.project.TargetPlatformDetector; import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; import org.jetbrains.kotlin.psi.JetDeclaration; import org.jetbrains.kotlin.psi.JetElement; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; import static org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage.getModuleInfo; @@ -41,12 +41,12 @@ public class DuplicateJvmSignatureAnnotator implements Annotator { if (!ProjectRootsUtil.isInProjectSource(element)) return; PsiFile file = element.getContainingFile(); - if (!(file instanceof JetFile) || TargetPlatformDetector.getPlatform((JetFile) file) != TargetPlatform.JVM) return; + if (!(file instanceof JetFile) || TargetPlatformDetector.getPlatform((JetFile) file) != JvmPlatform.INSTANCE$) return; Diagnostics otherDiagnostics = ResolvePackage.analyzeFully((JetElement) element).getDiagnostics(); GlobalSearchScope moduleScope = getModuleInfo(element).contentScope(); Diagnostics diagnostics = AsJavaPackage.getJvmSignatureDiagnostics(element, otherDiagnostics, moduleScope); - + if (diagnostics == null) return; new JetPsiChecker().annotateElement(element, holder, diagnostics); } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/AnalyzerFacadeProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/AnalyzerFacadeProvider.kt index 27c31272213..f4f319fac5f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/AnalyzerFacadeProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/AnalyzerFacadeProvider.kt @@ -17,19 +17,22 @@ package org.jetbrains.kotlin.idea.project import org.jetbrains.kotlin.analyzer.AnalyzerFacade -import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters import org.jetbrains.kotlin.analyzer.ResolverForModule -import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade import org.jetbrains.kotlin.idea.caches.resolve.JsAnalyzerFacade +import org.jetbrains.kotlin.js.resolve.JsPlatform +import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade +import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform public object AnalyzerFacadeProvider { //NOTE: it's convenient that JS backend doesn't have platform parameters (for now) // otherwise we would be forced to add casts on the call site of setupResolverForProject public fun getAnalyzerFacade(targetPlatform: TargetPlatform): AnalyzerFacade { return when (targetPlatform) { - TargetPlatform.JVM -> JvmAnalyzerFacade - TargetPlatform.JS -> JsAnalyzerFacade - else -> throw IllegalArgumentException("Unsupported platfrom: $targetPlatform") + JvmPlatform -> JvmAnalyzerFacade + JsPlatform -> JsAnalyzerFacade + else -> throw IllegalArgumentException("Unsupported platform: $targetPlatform") } } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt index b7ee86f7969..ede6e1c6dfa 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt @@ -22,15 +22,14 @@ import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.PsiModificationTracker import com.intellij.util.containers.ContainerUtil -import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.idea.stubindex.JetProbablyNothingFunctionShortNameIndex import org.jetbrains.kotlin.idea.stubindex.JetProbablyNothingPropertyShortNameIndex import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BodyResolveCache import org.jetbrains.kotlin.resolve.StatementFilter +import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.lazy.* -import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull public class ResolveElementCache(resolveSession: ResolveSession, private val project: Project) : ElementResolver(resolveSession), BodyResolveCache { // Recreate internal cache after change of modification count @@ -76,7 +75,8 @@ public class ResolveElementCache(resolveSession: ResolveSession, private val pro val (bindingContext, statementFilter) = performElementAdditionalResolve(resolveElement, contextElement, BodyResolveMode.PARTIAL) - if (statementFilter == StatementFilter.NONE) { // partial resolve is not supported for the given declaration - full resolve performed instead + if (statementFilter == StatementFilter.NONE) { + // partial resolve is not supported for the given declaration - full resolve performed instead fullResolveMap[resolveElement] = bindingContext return bindingContext } @@ -102,11 +102,7 @@ public class ResolveElementCache(resolveSession: ResolveSession, private val pro } } - override fun createAdditionalCheckerProvider(file: JetFile, module: ModuleDescriptor) - = TargetPlatformDetector.getPlatform(file).createAdditionalCheckerProvider(module) - - override fun getDynamicTypesSettings(file: JetFile) - = TargetPlatformDetector.getPlatform(file).getDynamicTypesSettings() + override fun getTargetPlatform(file: JetFile): TargetPlatform = TargetPlatformDetector.getPlatform(file) override fun probablyNothingCallableNames(): ProbablyNothingCallableNames { return object : ProbablyNothingCallableNames { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatform.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatform.java deleted file mode 100644 index b9e363fabf3..00000000000 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatform.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2010-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 org.jetbrains.kotlin.idea.project; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.descriptors.ModuleDescriptor; -import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider; -import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider; -import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider; -import org.jetbrains.kotlin.types.DynamicTypesAllowed; -import org.jetbrains.kotlin.types.DynamicTypesSettings; - -public interface TargetPlatform { - @NotNull - AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module); - - @NotNull - DynamicTypesSettings getDynamicTypesSettings(); - - TargetPlatform JVM = new TargetPlatformImpl("JVM", new DynamicTypesSettings()) { - @NotNull - @Override - public AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module) { - return new KotlinJvmCheckerProvider(module); - } - }; - - TargetPlatform JS = new TargetPlatformImpl("JS", new DynamicTypesAllowed()) { - @NotNull - @Override - public AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module) { - return KotlinJsCheckerProvider.INSTANCE$; - } - }; -} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java index 9d347425240..0a42b074ce5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java @@ -21,7 +21,10 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.js.resolve.JsPlatform; import org.jetbrains.kotlin.psi.JetFile; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; public class TargetPlatformDetector { public static final TargetPlatformDetector INSTANCE = new TargetPlatformDetector(); @@ -47,14 +50,14 @@ public class TargetPlatformDetector { @NotNull public static TargetPlatform getPlatform(@NotNull Module module) { if (ProjectStructureUtil.isJsKotlinModule(module)) { - return TargetPlatform.JS; + return JsPlatform.INSTANCE$; } - return TargetPlatform.JVM; + return JvmPlatform.INSTANCE$; } @NotNull public static TargetPlatform getDefaultPlatform() { LOG.info("Using default platform"); - return TargetPlatform.JVM; + return JvmPlatform.INSTANCE$; } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformImpl.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformImpl.java deleted file mode 100644 index a577f7bd45f..00000000000 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2010-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 org.jetbrains.kotlin.idea.project; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.types.DynamicTypesSettings; - -public abstract class TargetPlatformImpl implements TargetPlatform { - private final String platformName; - private final DynamicTypesSettings dynamicTypesSettings; - - public TargetPlatformImpl(@NotNull String platformName, @NotNull DynamicTypesSettings dynamicTypesSettings) { - this.platformName = platformName; - this.dynamicTypesSettings = dynamicTypesSettings; - } - - @NotNull - @Override - public DynamicTypesSettings getDynamicTypesSettings() { - return dynamicTypesSettings; - } - - @Override - public String toString() { - return platformName; - } -} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java index 0b7d0ed322e..e5742ee891a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java @@ -44,10 +44,10 @@ import org.jetbrains.kotlin.frontend.di.DiPackage; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.renderer.DescriptorRenderer; -import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider; import org.jetbrains.kotlin.resolve.BindingTraceContext; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.DescriptorUtils; +import org.jetbrains.kotlin.resolve.TargetPlatform; import org.jetbrains.kotlin.resolve.lazy.ResolveSession; import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; import org.jetbrains.kotlin.resolve.scopes.JetScope; @@ -111,7 +111,7 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent { DiPackage.createLazyResolveSession( newModuleContext, declarationFactory, new BindingTraceContext(), - AdditionalCheckerProvider.DefaultProvider.INSTANCE$, + TargetPlatform.Default.INSTANCE$.getPlatformConfigurator(), new DynamicTypesSettings() ); diff --git a/idea/idea-completion/idea-completion.iml b/idea/idea-completion/idea-completion.iml index b6f202efe20..8b06fd2ca4f 100644 --- a/idea/idea-completion/idea-completion.iml +++ b/idea/idea-completion/idea-completion.iml @@ -22,5 +22,6 @@ + \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompiledKotlinInJavaCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompiledKotlinInJavaCompletionTest.kt index d25b47b74a7..d48bebec996 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompiledKotlinInJavaCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompiledKotlinInJavaCompletionTest.kt @@ -17,14 +17,11 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType -import com.intellij.codeInsight.lookup.LookupElement -import com.intellij.testFramework.LightProjectDescriptor import org.jetbrains.kotlin.idea.test.JdkAndMockLibraryProjectDescriptor -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import org.jetbrains.kotlin.idea.project.TargetPlatform +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform public abstract class AbstractCompiledKotlinInJavaCompletionTest : JetFixtureCompletionBaseTestCase() { - override fun getPlatform() = TargetPlatform.JVM + override fun getPlatform() = JvmPlatform override fun getProjectDescriptor() = JdkAndMockLibraryProjectDescriptor(COMPLETION_TEST_DATA_BASE_PATH + "/injava/mockLib", false) diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJSBasicCompletionTest.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJSBasicCompletionTest.java index dd2dd483278..a3e1f3e90ca 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJSBasicCompletionTest.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJSBasicCompletionTest.java @@ -21,8 +21,9 @@ import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.js.KotlinJavaScriptLibraryManager; -import org.jetbrains.kotlin.idea.project.TargetPlatform; import org.jetbrains.kotlin.idea.test.KotlinStdJSProjectDescriptor; +import org.jetbrains.kotlin.js.resolve.JsPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; public abstract class AbstractJSBasicCompletionTest extends JetFixtureCompletionBaseTestCase { @NotNull @@ -31,9 +32,10 @@ public abstract class AbstractJSBasicCompletionTest extends JetFixtureCompletion return KotlinStdJSProjectDescriptor.Companion.getInstance(); } + @NotNull @Override public TargetPlatform getPlatform() { - return TargetPlatform.JS; + return JsPlatform.INSTANCE$; } @Override diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmBasicCompletionTest.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmBasicCompletionTest.java index 9f868e677a9..dc69463bf51 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmBasicCompletionTest.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmBasicCompletionTest.java @@ -21,7 +21,8 @@ import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.test.JetWithJdkAndRuntimeLightProjectDescriptor; -import org.jetbrains.kotlin.idea.project.TargetPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; public abstract class AbstractJvmBasicCompletionTest extends JetFixtureCompletionBaseTestCase { @NotNull @@ -30,9 +31,10 @@ public abstract class AbstractJvmBasicCompletionTest extends JetFixtureCompletio return JetWithJdkAndRuntimeLightProjectDescriptor.INSTANCE; } + @NotNull @Override public TargetPlatform getPlatform() { - return TargetPlatform.JVM; + return JvmPlatform.INSTANCE$; } @Override diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmSmartCompletionTest.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmSmartCompletionTest.java index 31e7e05d0c9..ac37ec45df2 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmSmartCompletionTest.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmSmartCompletionTest.java @@ -21,7 +21,8 @@ import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.test.JetWithJdkAndRuntimeLightProjectDescriptor; -import org.jetbrains.kotlin.idea.project.TargetPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; public abstract class AbstractJvmSmartCompletionTest extends JetFixtureCompletionBaseTestCase { @NotNull @@ -30,9 +31,10 @@ public abstract class AbstractJvmSmartCompletionTest extends JetFixtureCompletio return JetWithJdkAndRuntimeLightProjectDescriptor.INSTANCE; } + @NotNull @Override public TargetPlatform getPlatform() { - return TargetPlatform.JVM; + return JvmPlatform.INSTANCE$; } @Override diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmWithLibBasicCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmWithLibBasicCompletionTest.kt index bf88107fd40..bf995970bfe 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmWithLibBasicCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmWithLibBasicCompletionTest.kt @@ -17,11 +17,10 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType -import com.intellij.codeInsight.lookup.LookupElement import com.intellij.testFramework.LightProjectDescriptor import org.jetbrains.kotlin.idea.test.JdkAndMockLibraryProjectDescriptor import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import org.jetbrains.kotlin.idea.project.TargetPlatform +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform public abstract class AbstractJvmWithLibBasicCompletionTest : JetFixtureCompletionBaseTestCase() { private val TEST_PATH = COMPLETION_TEST_DATA_BASE_PATH + "/basic/custom" @@ -33,7 +32,7 @@ public abstract class AbstractJvmWithLibBasicCompletionTest : JetFixtureCompleti return JdkAndMockLibraryProjectDescriptor(TEST_PATH + "/" + getTestName(false) + "Src", false) } - override fun getPlatform() = TargetPlatform.JVM + override fun getPlatform() = JvmPlatform override fun complete(invocationCount: Int) = myFixture.complete(CompletionType.BASIC, invocationCount) } diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt index ea914768d24..b9c7ee54f11 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt @@ -19,11 +19,11 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType import com.intellij.codeInsight.lookup.LookupElement import org.jetbrains.kotlin.idea.completion.KeywordLookupObject -import org.jetbrains.kotlin.idea.project.TargetPlatform import org.jetbrains.kotlin.idea.test.JetLightProjectDescriptor +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform public abstract class AbstractKeywordCompletionTest : JetFixtureCompletionBaseTestCase() { - override fun getPlatform() = TargetPlatform.JVM + override fun getPlatform() = JvmPlatform override fun complete(invocationCount: Int): Array? { val items = myFixture.complete(CompletionType.BASIC) ?: return null diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinSourceInJavaCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinSourceInJavaCompletionTest.kt index b1ba230b34c..0feb7d94153 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinSourceInJavaCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinSourceInJavaCompletionTest.kt @@ -17,20 +17,17 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType -import com.intellij.codeInsight.lookup.LookupElement import com.intellij.openapi.util.io.FileUtil -import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import com.intellij.util.ArrayUtil import com.intellij.util.Function import com.intellij.util.containers.ContainerUtil import junit.framework.TestCase -import org.jetbrains.kotlin.idea.project.TargetPlatform -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import java.io.File public abstract class AbstractKotlinSourceInJavaCompletionTest : JetFixtureCompletionBaseTestCase() { - override fun getPlatform() = TargetPlatform.JVM + override fun getPlatform() = JvmPlatform override fun doTest(testPath: String) { val mockLibDir = File(COMPLETION_TEST_DATA_BASE_PATH + "/injava/mockLib") diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileJvmBasicCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileJvmBasicCompletionTest.kt index fd3a7909a42..408520f1abb 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileJvmBasicCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileJvmBasicCompletionTest.kt @@ -16,16 +16,15 @@ package org.jetbrains.kotlin.idea.completion.test -import org.jetbrains.kotlin.idea.project.TargetPlatform import org.jetbrains.kotlin.idea.test.AstAccessControl -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform public abstract class AbstractMultiFileJvmBasicCompletionTest : KotlinCompletionTestCase() { protected fun doTest(testPath: String) { configureByFile(getTestName(false) + ".kt", "") val shouldFail = testPath.contains("NoSpecifiedType") AstAccessControl.testWithControlledAccessToAst(shouldFail, getFile().getVirtualFile(), getProject(), getTestRootDisposable(), { - testCompletion(getFile().getText(), TargetPlatform.JVM, { invocationCount -> + testCompletion(getFile().getText(), JvmPlatform, { invocationCount -> complete(invocationCount) myItems }, 0) diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileSmartCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileSmartCompletionTest.kt index 64c15f718c2..f101a7e7b6b 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileSmartCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileSmartCompletionTest.kt @@ -17,9 +17,8 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType -import org.jetbrains.kotlin.idea.project.TargetPlatform import org.jetbrains.kotlin.idea.test.AstAccessControl -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform public abstract class AbstractMultiFileSmartCompletionTest : KotlinCompletionTestCase() { override fun setUp() { @@ -30,7 +29,7 @@ public abstract class AbstractMultiFileSmartCompletionTest : KotlinCompletionTes protected fun doTest(testPath: String) { configureByFile(getTestName(false) + ".kt", "") AstAccessControl.testWithControlledAccessToAst(false, getFile().getVirtualFile(), getProject(), getTestRootDisposable(), { - testCompletion(getFile().getText(), TargetPlatform.JVM, { invocationCount -> + testCompletion(getFile().getText(), JvmPlatform, { invocationCount -> complete(invocationCount) myItems }, 1) diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompletionTestUtil.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompletionTestUtil.kt index 1a9ba8c59e4..57ad5508568 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompletionTestUtil.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompletionTestUtil.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.lookup.LookupElement -import org.jetbrains.kotlin.idea.project.TargetPlatform +import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.test.JetTestUtils import org.junit.Assert diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/ExpectedCompletionUtils.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/ExpectedCompletionUtils.java index 9cebff72291..89252ef9326 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/ExpectedCompletionUtils.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/ExpectedCompletionUtils.java @@ -31,8 +31,10 @@ import com.intellij.ui.JBColor; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.idea.project.TargetPlatform; import org.jetbrains.kotlin.idea.test.AstAccessControl; +import org.jetbrains.kotlin.js.resolve.JsPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; import org.jetbrains.kotlin.test.InTextDirectivesUtils; import org.junit.Assert; @@ -108,7 +110,7 @@ public class ExpectedCompletionUtils { } } - private static final String UNSUPPORTED_PLATFORM_MESSAGE = String.format("Only %s and %s platforms are supported", TargetPlatform.JVM, TargetPlatform.JS); + private static final String UNSUPPORTED_PLATFORM_MESSAGE = String.format("Only %s and %s platforms are supported", JvmPlatform.INSTANCE$, JsPlatform.INSTANCE$); private static final String EXIST_LINE_PREFIX = "EXIST:"; @@ -153,10 +155,10 @@ public class ExpectedCompletionUtils { if (platform == null) { return processProposalAssertions(fileText, EXIST_LINE_PREFIX); } - else if (platform == TargetPlatform.JVM) { + else if (platform == JvmPlatform.INSTANCE$) { return processProposalAssertions(fileText, EXIST_LINE_PREFIX, EXIST_JAVA_ONLY_LINE_PREFIX); } - else if (platform == TargetPlatform.JS) { + else if (platform == JsPlatform.INSTANCE$) { return processProposalAssertions(fileText, EXIST_LINE_PREFIX, EXIST_JS_ONLY_LINE_PREFIX); } else { @@ -169,10 +171,10 @@ public class ExpectedCompletionUtils { if (platform == null) { return processProposalAssertions(fileText, ABSENT_LINE_PREFIX); } - else if (platform == TargetPlatform.JVM) { + else if (platform == JvmPlatform.INSTANCE$) { return processProposalAssertions(fileText, ABSENT_LINE_PREFIX, ABSENT_JAVA_LINE_PREFIX, EXIST_JS_ONLY_LINE_PREFIX); } - else if (platform == TargetPlatform.JS) { + else if (platform == JsPlatform.INSTANCE$) { return processProposalAssertions(fileText, ABSENT_LINE_PREFIX, ABSENT_JS_LINE_PREFIX, EXIST_JAVA_ONLY_LINE_PREFIX); } else { @@ -206,10 +208,10 @@ public class ExpectedCompletionUtils { if (platform == null) { return InTextDirectivesUtils.getPrefixedInt(fileText, NUMBER_LINE_PREFIX); } - else if (platform == TargetPlatform.JVM) { + else if (platform == JvmPlatform.INSTANCE$) { return getPlatformExpectedNumber(fileText, NUMBER_JAVA_LINE_PREFIX); } - else if (platform == TargetPlatform.JS) { + else if (platform == JsPlatform.INSTANCE$) { return getPlatformExpectedNumber(fileText, NUMBER_JS_LINE_PREFIX); } else { diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JetFixtureCompletionBaseTestCase.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JetFixtureCompletionBaseTestCase.kt index 89df1607926..d17d4afda3b 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JetFixtureCompletionBaseTestCase.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JetFixtureCompletionBaseTestCase.kt @@ -19,8 +19,8 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.lookup.LookupElement import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.idea.caches.resolve.LibraryModificationTracker -import org.jetbrains.kotlin.idea.project.TargetPlatform import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase +import org.jetbrains.kotlin.resolve.TargetPlatform import java.io.File public abstract class JetFixtureCompletionBaseTestCase : JetLightCodeInsightFixtureTestCase() { diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt index be7f8237291..82e0aec901e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt @@ -19,11 +19,12 @@ package org.jetbrains.kotlin.idea.actions import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.CommonDataKeys -import com.intellij.openapi.ui.Messages import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.idea.configuration.KotlinProjectConfigurator +import com.intellij.openapi.ui.Messages import org.jetbrains.kotlin.idea.configuration.ConfigureKotlinInProjectUtils -import org.jetbrains.kotlin.idea.project.TargetPlatform +import org.jetbrains.kotlin.idea.configuration.KotlinProjectConfigurator +import org.jetbrains.kotlin.js.resolve.JsPlatform +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform public abstract class ConfigureKotlinInProjectAction : AnAction() { @@ -53,12 +54,12 @@ public abstract class ConfigureKotlinInProjectAction : AnAction() { public class ConfigureKotlinJsInProjectAction: ConfigureKotlinInProjectAction() { override fun getAbleToRunConfigurators(project: Project) = ConfigureKotlinInProjectUtils.getAbleToRunConfigurators(project).filter { - it.getTargetPlatform() == TargetPlatform.JS + it.getTargetPlatform() == JsPlatform } } public class ConfigureKotlinJavaInProjectAction: ConfigureKotlinInProjectAction() { override fun getAbleToRunConfigurators(project: Project) = ConfigureKotlinInProjectUtils.getAbleToRunConfigurators(project).filter { - it.getTargetPlatform() == TargetPlatform.JVM + it.getTargetPlatform() == JvmPlatform } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinAndroidGradleModuleConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinAndroidGradleModuleConfigurator.java index a479f4f68f8..5226a0cb2ea 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinAndroidGradleModuleConfigurator.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinAndroidGradleModuleConfigurator.java @@ -19,7 +19,8 @@ package org.jetbrains.kotlin.idea.configuration; import com.intellij.openapi.module.Module; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.JetPluginUtil; -import org.jetbrains.kotlin.idea.project.TargetPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; @@ -37,7 +38,7 @@ public class KotlinAndroidGradleModuleConfigurator extends KotlinWithGradleConfi @NotNull @Override public TargetPlatform getTargetPlatform() { - return TargetPlatform.JVM; + return JvmPlatform.INSTANCE$; } @NotNull diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.java index 84575fecf7e..ae54d46047c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.java @@ -19,7 +19,8 @@ package org.jetbrains.kotlin.idea.configuration; import com.intellij.openapi.module.Module; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.JetPluginUtil; -import org.jetbrains.kotlin.idea.project.TargetPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; @@ -37,7 +38,7 @@ public class KotlinGradleModuleConfigurator extends KotlinWithGradleConfigurator @NotNull @Override public TargetPlatform getTargetPlatform() { - return TargetPlatform.JVM; + return JvmPlatform.INSTANCE$; } @NotNull diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaMavenConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaMavenConfigurator.java index 087d7523bd2..e249f03c0cc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaMavenConfigurator.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaMavenConfigurator.java @@ -21,7 +21,8 @@ import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.dom.model.MavenDomPlugin; import org.jetbrains.kotlin.idea.project.ProjectStructureUtil; -import org.jetbrains.kotlin.idea.project.TargetPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; public class KotlinJavaMavenConfigurator extends KotlinMavenConfigurator { private static final String NAME = "maven"; @@ -46,6 +47,6 @@ public class KotlinJavaMavenConfigurator extends KotlinMavenConfigurator { @NotNull @Override public TargetPlatform getTargetPlatform() { - return TargetPlatform.JVM; + return JvmPlatform.INSTANCE$; } } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.java index 0a4736b3b67..ff9e83da792 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.java @@ -26,8 +26,9 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.framework.JavaRuntimeLibraryDescription; import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider; import org.jetbrains.kotlin.idea.project.ProjectStructureUtil; -import org.jetbrains.kotlin.idea.project.TargetPlatform; import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryCoreUtil; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; import org.jetbrains.kotlin.utils.KotlinPaths; import org.jetbrains.kotlin.utils.PathUtil; @@ -78,7 +79,7 @@ public class KotlinJavaModuleConfigurator extends KotlinWithLibraryConfigurator @NotNull @Override public TargetPlatform getTargetPlatform() { - return TargetPlatform.JVM; + return JvmPlatform.INSTANCE$; } @NotNull diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavascriptMavenConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavascriptMavenConfigurator.java index eddadd49d10..23e14eb9551 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavascriptMavenConfigurator.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJavascriptMavenConfigurator.java @@ -21,7 +21,8 @@ import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.dom.model.MavenDomPlugin; import org.jetbrains.kotlin.idea.project.ProjectStructureUtil; -import org.jetbrains.kotlin.idea.project.TargetPlatform; +import org.jetbrains.kotlin.js.resolve.JsPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; public class KotlinJavascriptMavenConfigurator extends KotlinMavenConfigurator { private static final String NAME = "js maven"; @@ -61,6 +62,6 @@ public class KotlinJavascriptMavenConfigurator extends KotlinMavenConfigurator { @NotNull @Override public TargetPlatform getTargetPlatform() { - return TargetPlatform.JS; + return JsPlatform.INSTANCE$; } } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.java index b4da318b48b..f09c8dae952 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.java @@ -24,8 +24,9 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.framework.JSLibraryStdDescription; import org.jetbrains.kotlin.idea.framework.JSLibraryStdPresentationProvider; import org.jetbrains.kotlin.idea.project.ProjectStructureUtil; -import org.jetbrains.kotlin.idea.project.TargetPlatform; import org.jetbrains.kotlin.js.JavaScript; +import org.jetbrains.kotlin.js.resolve.JsPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; import org.jetbrains.kotlin.utils.KotlinPaths; import org.jetbrains.kotlin.utils.PathUtil; @@ -41,7 +42,7 @@ public class KotlinJsModuleConfigurator extends KotlinWithLibraryConfigurator { @NotNull @Override public TargetPlatform getTargetPlatform() { - return TargetPlatform.JS; + return JsPlatform.INSTANCE$; } @NotNull diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinProjectConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinProjectConfigurator.java index 3790e5d34a6..e93582f6540 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinProjectConfigurator.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinProjectConfigurator.java @@ -20,7 +20,7 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.idea.project.TargetPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; public interface KotlinProjectConfigurator { ExtensionPointName EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.projectConfigurator"); diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/KotlinModuleBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/framework/KotlinModuleBuilder.kt index a1ef885df3e..50efe56e44c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/framework/KotlinModuleBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/framework/KotlinModuleBuilder.kt @@ -19,10 +19,10 @@ package org.jetbrains.kotlin.idea.framework import com.intellij.ide.util.projectWizard.JavaModuleBuilder import com.intellij.ide.util.projectWizard.ModuleWizardStep import com.intellij.ide.util.projectWizard.SettingsStep -import org.jetbrains.kotlin.idea.JetIcons -import org.jetbrains.kotlin.idea.project.TargetPlatform -import com.intellij.openapi.roots.ui.configuration.ModulesProvider import com.intellij.ide.util.projectWizard.WizardContext +import com.intellij.openapi.roots.ui.configuration.ModulesProvider +import org.jetbrains.kotlin.idea.JetIcons +import org.jetbrains.kotlin.resolve.TargetPlatform public class KotlinModuleBuilder( val targetPlatform: TargetPlatform, val builderName: String, val builderDescription: String) : JavaModuleBuilder() { diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/KotlinModuleSettingStep.java b/idea/src/org/jetbrains/kotlin/idea/framework/KotlinModuleSettingStep.java index 18c8ed1b943..743b17b899a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/framework/KotlinModuleSettingStep.java +++ b/idea/src/org/jetbrains/kotlin/idea/framework/KotlinModuleSettingStep.java @@ -35,7 +35,9 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.idea.project.TargetPlatform; +import org.jetbrains.kotlin.js.resolve.JsPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; import javax.swing.*; import java.util.ArrayList; @@ -98,15 +100,15 @@ public class KotlinModuleSettingStep extends ModuleWizardStep { @NotNull protected String getLibraryLabelText() { - if (targetPlatform == TargetPlatform.JVM) return "\u001BKotlin runtime:"; - if (targetPlatform == TargetPlatform.JS) return "\u001BKotlin JS library:"; + if (targetPlatform == JvmPlatform.INSTANCE$) return "\u001BKotlin runtime:"; + if (targetPlatform == JsPlatform.INSTANCE$) return "\u001BKotlin JS library:"; throw new IllegalStateException("Only JS and JVM target are supported"); } @NotNull protected CustomLibraryDescription getCustomLibraryDescription(@Nullable Project project) { - if (targetPlatform == TargetPlatform.JVM) return new JavaRuntimeLibraryDescription(project); - if (targetPlatform == TargetPlatform.JS) return new JSLibraryStdDescription(project); + if (targetPlatform == JvmPlatform.INSTANCE$) return new JavaRuntimeLibraryDescription(project); + if (targetPlatform == JsPlatform.INSTANCE$) return new JSLibraryStdDescription(project); throw new IllegalStateException("Only JS and JVM target are supported"); } diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/KotlinTemplatesFactory.kt b/idea/src/org/jetbrains/kotlin/idea/framework/KotlinTemplatesFactory.kt index 79f7724abf4..943ce31e72f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/framework/KotlinTemplatesFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/framework/KotlinTemplatesFactory.kt @@ -20,7 +20,8 @@ import com.intellij.ide.util.projectWizard.WizardContext import com.intellij.platform.ProjectTemplatesFactory import com.intellij.platform.templates.BuilderBasedTemplate import org.jetbrains.kotlin.idea.JetIcons -import org.jetbrains.kotlin.idea.project.TargetPlatform +import org.jetbrains.kotlin.js.resolve.JsPlatform +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform public class KotlinTemplatesFactory : ProjectTemplatesFactory() { companion object { @@ -31,8 +32,8 @@ public class KotlinTemplatesFactory : ProjectTemplatesFactory() { override fun getGroupIcon(group: String) = JetIcons.SMALL_LOGO override fun createTemplates(group: String?, context: WizardContext?) = - arrayOf( - BuilderBasedTemplate(KotlinModuleBuilder(TargetPlatform.JVM, "Kotlin - JVM", "Kotlin module for JVM target")), - BuilderBasedTemplate(KotlinModuleBuilder(TargetPlatform.JS, "Kotlin - JavaScript", "Kotlin module for JavaScript target")) - ) + arrayOf( + BuilderBasedTemplate(KotlinModuleBuilder(JvmPlatform, "Kotlin - JVM", "Kotlin module for JVM target")), + BuilderBasedTemplate(KotlinModuleBuilder(JsPlatform, "Kotlin - JavaScript", "Kotlin module for JavaScript target")) + ) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt index fbbd39144f8..8e60ab1a0b4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.debugger.evaluate import com.intellij.codeInsight.completion.CompletionType import com.intellij.openapi.module.Module -import com.intellij.openapi.roots.ContentEntry import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.vfs.LocalFileSystem @@ -26,11 +25,11 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiManager import org.jetbrains.kotlin.idea.completion.test.AbstractJvmBasicCompletionTest import org.jetbrains.kotlin.idea.completion.test.testCompletion -import org.jetbrains.kotlin.idea.project.TargetPlatform import org.jetbrains.kotlin.idea.test.JdkAndMockLibraryProjectDescriptor import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.psi.JetFunction import org.jetbrains.kotlin.psi.JetPsiFactory +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.test.JetTestUtils import java.io.File @@ -69,7 +68,7 @@ public class CodeFragmentCompletionInLibraryTest : AbstractJvmBasicCompletionTes private fun testCompletionInLibraryCodeFragment(fragmentText: String, vararg completionDirectives: String) { setupFixtureByCodeFragment(fragmentText) val directives = completionDirectives.map { "//$it" }.joinToString(separator = "\n") - testCompletion(directives, TargetPlatform.JVM, { + testCompletion(directives, JvmPlatform, { myFixture.complete(CompletionType.BASIC) }) } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt index 288fbe07511..3b88ffcd4a3 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.incremental.components.UsageCollector -import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider +import org.jetbrains.kotlin.js.resolve.JsPlatformConfigurator import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.BodyResolveCache import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel @@ -38,7 +38,7 @@ public fun createTopDownAnalyzerForJs( declarationProviderFactory: DeclarationProviderFactory ): LazyTopDownAnalyzerForTopLevel { val storageComponentContainer = createContainer("TopDownAnalyzerForJs") { - configureModule(moduleContext, KotlinJsCheckerProvider, bindingTrace) + configureModule(moduleContext, JsPlatformConfigurator, bindingTrace) useInstance(declarationProviderFactory) useImpl() diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt new file mode 100644 index 00000000000..1f269cf3769 --- /dev/null +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-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 org.jetbrains.kotlin.js.resolve + +import org.jetbrains.kotlin.resolve.PlatformConfigurator +import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.types.DynamicTypesAllowed + +public object JsPlatform : TargetPlatform("JS", DynamicTypesAllowed()) { + override val platformConfigurator: PlatformConfigurator = JsPlatformConfigurator +} \ No newline at end of file diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/KotlinJsCheckerProvider.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt similarity index 88% rename from js/js.frontend/src/org/jetbrains/kotlin/js/resolve/KotlinJsCheckerProvider.kt rename to js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt index f40ecb637fa..59af422615a 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/KotlinJsCheckerProvider.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt @@ -17,9 +17,9 @@ package org.jetbrains.kotlin.js.resolve import org.jetbrains.kotlin.js.resolve.diagnostics.JsCallChecker -import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider +import org.jetbrains.kotlin.resolve.PlatformConfigurator -public object KotlinJsCheckerProvider : AdditionalCheckerProvider( +public object JsPlatformConfigurator : PlatformConfigurator( additionalDeclarationCheckers = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker(), ClassDeclarationChecker()), additionalCallCheckers = listOf(JsCallChecker()), additionalTypeCheckers = listOf(), diff --git a/plugins/android-idea-plugin/android-idea-plugin.iml b/plugins/android-idea-plugin/android-idea-plugin.iml index 861a0257349..424d6a7ba94 100644 --- a/plugins/android-idea-plugin/android-idea-plugin.iml +++ b/plugins/android-idea-plugin/android-idea-plugin.iml @@ -18,5 +18,6 @@ + \ No newline at end of file diff --git a/plugins/android-idea-plugin/tests/org/jetbrains/kotlin/android/AbstractAndroidCompletionTest.kt b/plugins/android-idea-plugin/tests/org/jetbrains/kotlin/android/AbstractAndroidCompletionTest.kt index dd81e0194f2..8bc593e1699 100644 --- a/plugins/android-idea-plugin/tests/org/jetbrains/kotlin/android/AbstractAndroidCompletionTest.kt +++ b/plugins/android-idea-plugin/tests/org/jetbrains/kotlin/android/AbstractAndroidCompletionTest.kt @@ -20,7 +20,7 @@ import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.completion.CompletionType import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.idea.completion.test.testCompletion -import org.jetbrains.kotlin.idea.project.TargetPlatform +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import java.io.File public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { @@ -48,7 +48,7 @@ public abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { val virtualFile = myFixture.copyFileToProject(path + getTestName(true) + ".kt", "src/" + getTestName(true) + ".kt"); myFixture.configureFromExistingVirtualFile(virtualFile) val fileText = FileUtil.loadFile(File(path + getTestName(true) + ".kt"), true) - testCompletion(fileText, TargetPlatform.JVM, { + testCompletion(fileText, JvmPlatform, { count -> myFixture.complete(completionType()) }) }