From 15235867178efb9724197d47a5dcbe2966931340 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Thu, 10 Dec 2015 19:02:34 +0300 Subject: [PATCH] Extract interface out from KotlinCacheService to provide separate implementation in Eclipse plugin --- .../caches/resolve/KotlinCacheService.kt | 33 +++++++++++++++++++ .../caches/resolve/JavaResolveExtension.kt | 4 ++- ...heService.kt => KotlinCacheServiceImpl.kt} | 15 ++++----- .../idea/caches/resolve/resolutionApi.kt | 1 + .../inspections/AbstractKotlinInspection.kt | 2 +- idea/src/META-INF/plugin.xml | 4 +-- .../evaluate/KotlinEvaluationBuilder.kt | 2 +- 7 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/KotlinCacheService.kt rename idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/{KotlinCacheService.kt => KotlinCacheServiceImpl.kt} (95%) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/KotlinCacheService.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/KotlinCacheService.kt new file mode 100644 index 00000000000..645b4173871 --- /dev/null +++ b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/KotlinCacheService.kt @@ -0,0 +1,33 @@ +/* + * 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.caches.resolve + +import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.resolve.ResolutionFacade +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache + +interface KotlinCacheService { + companion object { + fun getInstance(project: Project): KotlinCacheService = ServiceManager.getService(project, KotlinCacheService::class.java)!! + } + + fun getResolutionFacade(elements: List): ResolutionFacade + + fun getSuppressionCache(): KotlinSuppressCache +} \ No newline at end of file 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 383ec4a4a3b..275089e4a36 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 @@ -20,6 +20,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import com.intellij.psi.* import org.jetbrains.kotlin.asJava.KtLightClass +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.util.ProjectRootsUtil @@ -87,8 +88,9 @@ private fun PsiElement.getJavaDescriptorResolver(resolutionFacade: ResolutionFac else { if (!ProjectRootsUtil.isInProjectOrLibraryClassFile(this)) return null + val cacheService = KotlinCacheService.getInstance(project) @Suppress("DEPRECATION") - return KotlinCacheService.getInstance(project).getProjectService(JvmPlatform, this.getModuleInfo(), JavaDescriptorResolver::class.java) + return (cacheService as? KotlinCacheServiceImpl)?.getProjectService(JvmPlatform, this.getModuleInfo(), JavaDescriptorResolver::class.java) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheService.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt similarity index 95% rename from idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheService.kt rename to idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index af7481999ba..39a9348e75f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheService.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.caches.resolve -import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectRootModificationTracker @@ -27,6 +26,7 @@ import com.intellij.psi.util.PsiModificationTracker import com.intellij.util.containers.SLRUCache import org.jetbrains.kotlin.analyzer.EmptyResolverForProject import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.container.getService import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.idea.project.AnalyzerFacadeProvider @@ -44,16 +44,12 @@ import org.jetbrains.kotlin.utils.keysToMap internal val LOG = Logger.getInstance(KotlinCacheService::class.java) -class KotlinCacheService(val project: Project) { - companion object { - @JvmStatic fun getInstance(project: Project): KotlinCacheService = ServiceManager.getService(project, KotlinCacheService::class.java)!! - } - - fun getResolutionFacade(elements: List): ResolutionFacade { +class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { + override fun getResolutionFacade(elements: List): ResolutionFacade { return getFacadeToAnalyzeFiles(elements.map { it.getContainingKtFile() }) } - fun getSuppressionCache(): KotlinSuppressCache = kotlinSuppressCache.value + override fun getSuppressionCache(): KotlinSuppressCache = kotlinSuppressCache.value private val globalFacadesPerPlatform = listOf(JvmPlatform, JsPlatform).keysToMap { platform -> GlobalFacade(platform) } @@ -83,7 +79,8 @@ class KotlinCacheService(val project: Project) { } } - @Deprecated("Use JetElement.getResolutionFacade(), please avoid introducing new usages") fun getProjectService(platform: TargetPlatform, ideaModuleInfo: IdeaModuleInfo, serviceClass: Class): T { + @Deprecated("Use JetElement.getResolutionFacade(), please avoid introducing new usages") + fun getProjectService(platform: TargetPlatform, ideaModuleInfo: IdeaModuleInfo, serviceClass: Class): T { return globalFacade(platform).resolverForModuleInfo(ideaModuleInfo).componentProvider.getService(serviceClass) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt index 3b26fcbc20b..db855c79340 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt @@ -20,6 +20,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.AnalysisResult +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.idea.resolve.ResolutionFacade diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractKotlinInspection.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractKotlinInspection.kt index 8a067c70632..4df14c479cd 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractKotlinInspection.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractKotlinInspection.kt @@ -22,9 +22,9 @@ import com.intellij.codeInspection.LocalInspectionTool import com.intellij.codeInspection.SuppressIntentionAction import com.intellij.codeInspection.SuppressManager import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.idea.highlighter.createSuppressWarningActions -import org.jetbrains.kotlin.idea.caches.resolve.KotlinCacheService abstract class AbstractKotlinInspection: LocalInspectionTool(), CustomSuppressableInspectionTool { override fun getSuppressActions(element: PsiElement?): Array? { diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 6c1a109ddb2..39975f056c8 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -209,8 +209,8 @@ - + diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt index 91a9b7fd304..e891f5c652a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt @@ -46,6 +46,7 @@ import org.jetbrains.eval4j.jdi.JDIEval import org.jetbrains.eval4j.jdi.asJdiValue import org.jetbrains.eval4j.jdi.asValue import org.jetbrains.eval4j.jdi.makeInitialFrame +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.codegen.* import org.jetbrains.kotlin.codegen.binding.CodegenBinding import org.jetbrains.kotlin.codegen.state.GenerationState @@ -54,7 +55,6 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages import org.jetbrains.kotlin.idea.KotlinLanguage -import org.jetbrains.kotlin.idea.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.idea.caches.resolve.getJavaClassDescriptor import org.jetbrains.kotlin.idea.refactoring.quoteIfNeeded import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinEvaluateExpressionCache.CompiledDataDescriptor