diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaModuleBasedSession.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaModuleBasedSession.kt new file mode 100644 index 00000000000..c2206c7b28d --- /dev/null +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaModuleBasedSession.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2010-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.fir.java + +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.fir.FirModuleBasedSession +import org.jetbrains.kotlin.fir.resolve.FirProvider +import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.impl.FirCompositeSymbolProvider +import org.jetbrains.kotlin.fir.resolve.impl.FirLibrarySymbolProviderImpl +import org.jetbrains.kotlin.fir.service + +class FirJavaModuleBasedSession(moduleInfo: ModuleInfo, project: Project) : FirModuleBasedSession(moduleInfo) { + init { + registerComponent( + FirSymbolProvider::class, + FirCompositeSymbolProvider( + listOf(service(), JavaSymbolProvider(project), FirLibrarySymbolProviderImpl(this)) + ) + ) + } +} \ No newline at end of file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirModuleBasedSession.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirModuleBasedSession.kt new file mode 100644 index 00000000000..2de600ee7aa --- /dev/null +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirModuleBasedSession.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-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.fir + +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.fir.resolve.FirProvider +import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver +import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.FirTypeResolver +import org.jetbrains.kotlin.fir.resolve.impl.* + +abstract class FirModuleBasedSession(override val moduleInfo: ModuleInfo) : FirSessionBase() { + init { + val firProvider = FirProviderImpl(this) + registerComponent(FirProvider::class, firProvider) + registerComponent(FirQualifierResolver::class, FirQualifierResolverImpl(this)) + registerComponent(FirTypeResolver::class, FirTypeResolverImpl()) + } +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt index 826ad5cd3ef..1d3d8ddd9bd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt @@ -5,30 +5,19 @@ package org.jetbrains.kotlin.fir.scopes.impl +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedPackageStarImport -import org.jetbrains.kotlin.name.FqName class FirDefaultStarImportingScope(session: FirSession, lookupInFir: Boolean = false) : FirAbstractStarImportingScope(session, lookupInFir) { - // TODO: move relevant code in TargetPlatform from compiler:frontend and use here - override val starImports = listOf( - "kotlin", - "kotlin.annotation", - "kotlin.collections", - "kotlin.ranges", - "kotlin.sequences", - "kotlin.text", - "kotlin.io", - "java.lang", - // We should not (probably) import it for non-JVM projects - "kotlin.jvm" - ).map { - val fqName = FqName(it) + + // TODO: put languageVersionSettings into FirSession? + override val starImports = session.moduleInfo?.platform?.getDefaultImports(LanguageVersionSettingsImpl.DEFAULT, true)?.map { FirResolvedPackageStarImport( - FirImportImpl(session, null, fqName, isAllUnder = true, aliasName = null), - fqName + FirImportImpl(session, null, it.fqName, isAllUnder = true, aliasName = null), + it.fqName ) - } + } ?: emptyList() } \ No newline at end of file diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirResolveWithSessionTestCase.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirResolveWithSessionTestCase.kt index e4f42736a89..a8ec3854a1d 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirResolveWithSessionTestCase.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirResolveWithSessionTestCase.kt @@ -5,28 +5,10 @@ package org.jetbrains.kotlin.fir -import org.jetbrains.kotlin.fir.java.JavaSymbolProvider -import org.jetbrains.kotlin.fir.resolve.FirProvider -import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver -import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider -import org.jetbrains.kotlin.fir.resolve.FirTypeResolver -import org.jetbrains.kotlin.fir.resolve.impl.* +import org.jetbrains.kotlin.fir.java.FirJavaModuleBasedSession import org.jetbrains.kotlin.test.KotlinTestWithEnvironment abstract class AbstractFirResolveWithSessionTestCase : KotlinTestWithEnvironment() { - open fun createSession(): FirSession { - return object : FirSessionBase() { - init { - val firProvider = FirProviderImpl(this) - registerComponent(FirProvider::class, firProvider) - registerComponent( - FirSymbolProvider::class, - FirCompositeSymbolProvider(listOf(firProvider, JavaSymbolProvider(project), FirLibrarySymbolProviderImpl(this))) - ) - registerComponent(FirQualifierResolver::class, FirQualifierResolverImpl(this)) - registerComponent(FirTypeResolver::class, FirTypeResolverImpl()) - } - } - } + open fun createSession(): FirSession = FirJavaModuleBasedSession(FirTestModuleInfo(), project) } \ No newline at end of file diff --git a/compiler/fir/tree/build.gradle.kts b/compiler/fir/tree/build.gradle.kts index e9285d64cc4..4a99668fffd 100644 --- a/compiler/fir/tree/build.gradle.kts +++ b/compiler/fir/tree/build.gradle.kts @@ -11,6 +11,7 @@ plugins { jvmTarget = "1.6" dependencies { + compile(project(":compiler:frontend.common")) compile(project(":core:descriptors")) compile(project(":compiler:fir:cones")) compile(project(":compiler:ir.tree")) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt index c5961d34e3a..935adf82322 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt @@ -5,10 +5,11 @@ package org.jetbrains.kotlin.fir +import org.jetbrains.kotlin.analyzer.ModuleInfo import kotlin.reflect.KClass interface FirSession { - + val moduleInfo: ModuleInfo? val components: Map, Any> diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSessionBase.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSessionBase.kt index bcc4c613fd1..cbb455cc744 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSessionBase.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSessionBase.kt @@ -5,15 +5,18 @@ package org.jetbrains.kotlin.fir +import org.jetbrains.kotlin.analyzer.ModuleInfo import kotlin.reflect.KClass abstract class FirSessionBase : FirSession { + override val components: MutableMap, Any> = mutableMapOf() + + override val moduleInfo: ModuleInfo? + get() = null protected fun registerComponent(tClass: KClass, t: T) { assert(tClass !in components) { "Already registered component" } components[tClass] = t } +} - override val components: MutableMap, Any> = mutableMapOf() - -} \ No newline at end of file diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestModuleInfo.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestModuleInfo.kt new file mode 100644 index 00000000000..3d745a58828 --- /dev/null +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestModuleInfo.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-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.fir + +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform + +class FirTestModuleInfo( + override val name: Name = Name.identifier("TestModule"), + private val dependencies: List = emptyList(), + override val platform: TargetPlatform = JvmPlatform +) : ModuleInfo { + override fun dependencies(): List = dependencies +} \ No newline at end of file