Use FirModuleBasedSession with module info, use platform default imports
In this commit, FIR sessions made bound to a particular module
This commit is contained in:
@@ -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<FirProvider>(), JavaSymbolProvider(project), FirLibrarySymbolProviderImpl(this))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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())
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
-18
@@ -5,30 +5,19 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.scopes.impl
|
package org.jetbrains.kotlin.fir.scopes.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedPackageStarImport
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedPackageStarImport
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
|
|
||||||
class FirDefaultStarImportingScope(session: FirSession, lookupInFir: Boolean = false) :
|
class FirDefaultStarImportingScope(session: FirSession, lookupInFir: Boolean = false) :
|
||||||
FirAbstractStarImportingScope(session, lookupInFir) {
|
FirAbstractStarImportingScope(session, lookupInFir) {
|
||||||
// TODO: move relevant code in TargetPlatform from compiler:frontend and use here
|
|
||||||
override val starImports = listOf(
|
// TODO: put languageVersionSettings into FirSession?
|
||||||
"kotlin",
|
override val starImports = session.moduleInfo?.platform?.getDefaultImports(LanguageVersionSettingsImpl.DEFAULT, true)?.map {
|
||||||
"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)
|
|
||||||
FirResolvedPackageStarImport(
|
FirResolvedPackageStarImport(
|
||||||
FirImportImpl(session, null, fqName, isAllUnder = true, aliasName = null),
|
FirImportImpl(session, null, it.fqName, isAllUnder = true, aliasName = null),
|
||||||
fqName
|
it.fqName
|
||||||
)
|
)
|
||||||
}
|
} ?: emptyList()
|
||||||
}
|
}
|
||||||
+2
-20
@@ -5,28 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
|
import org.jetbrains.kotlin.fir.java.FirJavaModuleBasedSession
|
||||||
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.test.KotlinTestWithEnvironment
|
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
|
||||||
|
|
||||||
abstract class AbstractFirResolveWithSessionTestCase : KotlinTestWithEnvironment() {
|
abstract class AbstractFirResolveWithSessionTestCase : KotlinTestWithEnvironment() {
|
||||||
|
|
||||||
open fun createSession(): FirSession {
|
open fun createSession(): FirSession = FirJavaModuleBasedSession(FirTestModuleInfo(), project)
|
||||||
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())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,7 @@ plugins {
|
|||||||
jvmTarget = "1.6"
|
jvmTarget = "1.6"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
compile(project(":compiler:frontend.common"))
|
||||||
compile(project(":core:descriptors"))
|
compile(project(":core:descriptors"))
|
||||||
compile(project(":compiler:fir:cones"))
|
compile(project(":compiler:fir:cones"))
|
||||||
compile(project(":compiler:ir.tree"))
|
compile(project(":compiler:ir.tree"))
|
||||||
|
|||||||
@@ -5,10 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
interface FirSession {
|
interface FirSession {
|
||||||
|
val moduleInfo: ModuleInfo?
|
||||||
|
|
||||||
val components: Map<KClass<*>, Any>
|
val components: Map<KClass<*>, Any>
|
||||||
|
|
||||||
|
|||||||
@@ -5,15 +5,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
abstract class FirSessionBase : FirSession {
|
abstract class FirSessionBase : FirSession {
|
||||||
|
override val components: MutableMap<KClass<*>, Any> = mutableMapOf()
|
||||||
|
|
||||||
|
override val moduleInfo: ModuleInfo?
|
||||||
|
get() = null
|
||||||
|
|
||||||
protected fun <T : Any> registerComponent(tClass: KClass<T>, t: T) {
|
protected fun <T : Any> registerComponent(tClass: KClass<T>, t: T) {
|
||||||
assert(tClass !in components) { "Already registered component" }
|
assert(tClass !in components) { "Already registered component" }
|
||||||
components[tClass] = t
|
components[tClass] = t
|
||||||
}
|
}
|
||||||
|
|
||||||
override val components: MutableMap<KClass<*>, Any> = mutableMapOf()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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<ModuleInfo> = emptyList(),
|
||||||
|
override val platform: TargetPlatform = JvmPlatform
|
||||||
|
) : ModuleInfo {
|
||||||
|
override fun dependencies(): List<ModuleInfo> = dependencies
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user