From 08a46c139671f3f55f96ce58a795d89f566ce562 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 19 Feb 2018 18:20:07 +0300 Subject: [PATCH] Refactoring: move idea source modules classes to caches/project package --- .../org/jetbrains/kotlin/psi/KtPsiFactory.kt | 1 - .../caches/project/LibraryModuleInfo.kt | 15 +++++ .../kotlin/caches/resolve/JsAnalyzerFacade.kt | 2 +- .../caches/resolve/LibraryModuleInfo.kt | 26 -------- .../caches/PerModulePackageCacheService.kt | 8 +-- .../{resolve => project}/IdeaModuleInfos.kt | 24 +++++-- .../idea/caches/project/ModuleIndexCache.kt | 4 -- .../{resolve => project}/ScriptModuleInfos.kt | 23 +++---- .../{resolve => project}/getModuleInfo.kt | 63 ++++++++++++------- .../resolve/IDELightClassGenerationSupport.kt | 3 + .../caches/resolve/KotlinCacheServiceImpl.kt | 10 ++- .../caches/resolve/ModuleDependencyMapper.kt | 15 ++++- .../caches/resolve/ProjectResolutionFacade.kt | 4 ++ .../caches/resolve/ResolutionFacadeImpl.kt | 2 +- .../lightClasses/IDELightClassContexts.kt | 2 +- .../idea/caches/resolve/packageOracles.kt | 3 + .../idea/caches/resolve/util/scopeUtils.kt | 8 +-- .../compiler/IDELanguageSettingsProvider.kt | 4 +- .../navigation/SourceNavigationHelper.kt | 12 ++-- .../navigation/findDecompiledDeclaration.kt | 2 +- .../DuplicateJvmSignatureAnnotator.kt | 1 + .../highlighter/KotlinHighlightingUtil.kt | 4 +- .../KotlinCodeBlockModificationListener.kt | 2 +- .../idea/search/PsiBasedClassResolver.kt | 2 +- .../PluginDeclarationProviderFactory.kt | 2 +- ...PluginDeclarationProviderFactoryService.kt | 2 +- .../idea/completion/CompletionSession.kt | 4 +- .../KotlinScriptDependenciesClassFinder.kt | 2 +- .../ScriptDependenciesResolveScopeProvider.kt | 6 +- .../idea/core/util/CachedValueHelpers.kt | 2 +- .../scratch/ScratchFileModuleInfoProvider.kt | 8 +-- .../kotlin/console/KotlinConsoleRunner.kt | 13 ++-- idea/src/META-INF/plugin.xml | 4 +- .../AbstractCompletionBenchmarkAction.kt | 4 +- .../copy/PlainTextPasteImportResolver.kt | 1 + .../jetbrains/kotlin/idea/facet/facetUtils.kt | 2 +- .../idea/imports/KotlinImportOptimizer.kt | 4 +- .../KotlinInternalInJavaInspection.kt | 2 +- .../KotlinChangeSignatureUsageProcessor.kt | 2 + .../moveDeclarations/moveConflictUtils.kt | 7 ++- .../caches/resolve/CustomModuleInfoTest.kt | 3 + .../idea/caches/resolve/IdeaModuleInfoTest.kt | 2 +- .../resolve/MultiModuleHighlightingTest.kt | 2 + .../NavigationWithMultipleLibrariesTest.kt | 6 +- .../parcel/IDEParcelableCodegenExtension.kt | 2 +- .../parcel/IDEParcelableResolveExtension.kt | 2 +- .../idea/AndroidGotoDeclarationHandler.kt | 4 +- .../synthetic/idea/ExperimentalUtils.kt | 2 +- ...oidExtensionsExpressionCodegenExtension.kt | 2 +- ...DestroyClassBuilderInterceptorExtension.kt | 3 +- ...AndroidPackageFragmentProviderExtension.kt | 2 +- .../IdeSamWithReceiverComponentContributor.kt | 6 +- .../generate/generateDependenciesUtils.kt | 2 + 53 files changed, 195 insertions(+), 148 deletions(-) create mode 100644 idea/ide-common/src/org/jetbrains/kotlin/caches/project/LibraryModuleInfo.kt delete mode 100644 idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/LibraryModuleInfo.kt rename idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/{resolve => project}/IdeaModuleInfos.kt (97%) rename idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/{resolve => project}/ScriptModuleInfos.kt (87%) rename idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/{resolve => project}/getModuleInfo.kt (85%) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtPsiFactory.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtPsiFactory.kt index 3ff35c3a165..67fe21e8527 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtPsiFactory.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtPsiFactory.kt @@ -34,7 +34,6 @@ private val DO_NOT_ANALYZE_NOTIFICATION = "This file was created by KtPsiFactory var KtFile.doNotAnalyze: String? by UserDataProperty(Key.create("DO_NOT_ANALYZE")) var KtFile.analysisContext: PsiElement? by UserDataProperty(Key.create("ANALYSIS_CONTEXT")) -var PsiFile.moduleInfo: ModuleInfo? by UserDataProperty(Key.create("MODULE_INFO")) var KtFile.targetPlatform: TargetPlatform? by UserDataProperty(Key.create("TARGET_PLATFORM")) /** diff --git a/idea/ide-common/src/org/jetbrains/kotlin/caches/project/LibraryModuleInfo.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/project/LibraryModuleInfo.kt new file mode 100644 index 00000000000..cf9b1b77bb7 --- /dev/null +++ b/idea/ide-common/src/org/jetbrains/kotlin/caches/project/LibraryModuleInfo.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.caches.project + +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.resolve.TargetPlatform + +interface LibraryModuleInfo : ModuleInfo { + override val platform: TargetPlatform + + fun getLibraryRoots(): Collection +} diff --git a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt index 35293f8d135..fcd7215b8e9 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt @@ -17,7 +17,7 @@ package org.jetbrains.kotlin.idea.caches.resolve import org.jetbrains.kotlin.analyzer.* -import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo +import org.jetbrains.kotlin.caches.project.LibraryModuleInfo import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.ModuleContext diff --git a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/LibraryModuleInfo.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/LibraryModuleInfo.kt deleted file mode 100644 index 3b998220ba7..00000000000 --- a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/LibraryModuleInfo.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2010-2017 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 org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.resolve.TargetPlatform - -interface LibraryModuleInfo : ModuleInfo { - override val platform: TargetPlatform - - fun getLibraryRoots(): Collection -} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/PerModulePackageCacheService.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/PerModulePackageCacheService.kt index 21cb918f745..2418183bd32 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/PerModulePackageCacheService.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/PerModulePackageCacheService.kt @@ -34,9 +34,9 @@ import com.intellij.psi.search.GlobalSearchScope import com.intellij.util.containers.ContainerUtil import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.caches.PerModulePackageCacheService.Companion.FULL_DROP_THRESHOLD -import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo -import org.jetbrains.kotlin.idea.caches.resolve.getModuleInfoByVirtualFile -import org.jetbrains.kotlin.idea.caches.resolve.getNullableModuleInfo +import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo +import org.jetbrains.kotlin.idea.caches.project.getModuleInfoByVirtualFile +import org.jetbrains.kotlin.idea.caches.project.getNullableModuleInfo import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtFile @@ -113,7 +113,7 @@ class PerModulePackageCacheService(private val project: Project) { private val projectScope = GlobalSearchScope.projectScope(project) - internal fun onTooComplexChange() = synchronized(this) { + internal fun onTooComplexChange(): Unit = synchronized(this) { pendingVFileChanges.clear() pendingKtFileChanges.clear() cache.clear() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt similarity index 97% rename from idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt rename to idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index bb0c1073084..1ea6d0609c6 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -3,9 +3,10 @@ * that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.caches.resolve +package org.jetbrains.kotlin.idea.caches.project -import com.intellij.facet.* +import com.intellij.facet.FacetTypeRegistry +import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl import com.intellij.openapi.module.Module @@ -26,9 +27,8 @@ import com.intellij.util.SmartList import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.TrackableModuleInfo -import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo +import org.jetbrains.kotlin.caches.project.LibraryModuleInfo import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.idea.caches.project.LibraryDependenciesCache import org.jetbrains.kotlin.idea.configuration.BuildSystemType import org.jetbrains.kotlin.idea.configuration.getBuildSystemType import org.jetbrains.kotlin.idea.facet.KotlinFacetType @@ -45,6 +45,8 @@ import org.jetbrains.kotlin.resolve.jvm.GlobalSearchScopeWithModuleSources import org.jetbrains.kotlin.utils.addIfNotNull import java.util.* +internal val LOG = Logger.getInstance(IdeaModuleInfo::class.java) + interface IdeaModuleInfo : ModuleInfo { fun contentScope(): GlobalSearchScope @@ -206,6 +208,7 @@ data class ModuleTestSourceInfo internal constructor( internal fun ModuleSourceInfo.isTests() = this is ModuleTestSourceInfo fun Module.productionSourceInfo(): ModuleProductionSourceInfo? = if (hasProductionRoots()) ModuleProductionSourceInfo(this) else null + fun Module.testSourceInfo(): ModuleTestSourceInfo? = if (hasTestRoots()) ModuleTestSourceInfo(this) else null internal fun Module.correspondingModuleInfos(): List = listOf(testSourceInfo(), productionSourceInfo()).filterNotNull() @@ -270,7 +273,12 @@ class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo, val (libraries, sdks) = LibraryDependenciesCache.getInstance(project).getLibrariesAndSdksUsedWith(library) sdks.mapTo(result) { SdkInfo(project, it) } - libraries.filter { it is LibraryEx && !it.isDisposed }.mapTo(result) { LibraryInfo(project, it) } + libraries.filter { it is LibraryEx && !it.isDisposed }.mapTo(result) { + LibraryInfo( + project, + it + ) + } return result.toList() } @@ -298,7 +306,11 @@ data class LibrarySourceInfo(val project: Project, val library: Library) : IdeaM override val name: Name = Name.special("") - override fun sourceScope(): GlobalSearchScope = KotlinSourceFilterScope.librarySources(LibrarySourceScope(project, library), project) + override fun sourceScope(): GlobalSearchScope = KotlinSourceFilterScope.librarySources( + LibrarySourceScope( + project, + library + ), project) override fun modulesWhoseInternalsAreVisible(): Collection { return listOf(LibraryInfo(project, library)) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ModuleIndexCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ModuleIndexCache.kt index fef47f29835..8257b8bb2a1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ModuleIndexCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ModuleIndexCache.kt @@ -16,10 +16,6 @@ import com.intellij.util.containers.Queue import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.CachedValueProvider import com.intellij.openapi.roots.ProjectRootModificationTracker -import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo -import org.jetbrains.kotlin.idea.caches.resolve.correspondingModuleInfos -import org.jetbrains.kotlin.idea.caches.resolve.isTests -import org.jetbrains.kotlin.idea.caches.resolve.testSourceInfo import java.util.HashSet //NOTE: this is an approximation that may contain more module infos then the exact solution diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ScriptModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt similarity index 87% rename from idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ScriptModuleInfos.kt rename to idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt index 12e2f38973b..b45894581dc 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ScriptModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt @@ -1,20 +1,9 @@ /* - * Copyright 2010-2016 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. + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.caches.resolve +package org.jetbrains.kotlin.idea.caches.project import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.project.Project @@ -25,6 +14,7 @@ import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.NonClasspathDirectoriesScope import com.intellij.util.containers.SLRUCache +import org.jetbrains.kotlin.idea.caches.resolve.getAllProjectSdks import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.name.Name @@ -79,7 +69,10 @@ class ScriptDependenciesModuleInfo( val project: Project, val scriptModuleInfo: ScriptModuleInfo? ) : IdeaModuleInfo, BinaryModuleInfo { - override fun dependencies() = (listOf(this) + sdkDependencies(scriptModuleInfo?.externalDependencies, project)) + override fun dependencies() = (listOf(this) + sdkDependencies( + scriptModuleInfo?.externalDependencies, + project + )) override val name = Name.special("