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("