Uast: Move all IDE-related code to uast-idea, get rid of the 'idea' dependency

Uast is used in the CLI version of Android Lint so 'uast-kotlin' should run correctly even without IDE.
This commit is contained in:
Yan Zhulanow
2018-06-16 00:06:24 +03:00
parent 8d9c53da92
commit 06af2a88f0
10 changed files with 92 additions and 51 deletions
@@ -10,6 +10,7 @@ dependencies {
compile(project(":compiler:backend"))
compile(project(":compiler:frontend.java"))
compile(project(":idea:ide-common"))
compile(project(":idea:idea-core"))
compile(project(":plugins:uast-kotlin"))
compileOnly(intellijDep())
}
@@ -16,16 +16,22 @@
package org.jetbrains.uast.kotlin.internal
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.codegen.ClassBuilderMode
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.uast.kotlin.KotlinUastBindingContextProviderService
import org.jetbrains.uast.kotlin.KotlinUastResolveProviderService
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.util.module
class IdeaKotlinUastBindingContextProviderService : KotlinUastBindingContextProviderService {
class IdeaKotlinUastResolveProviderService : KotlinUastResolveProviderService {
override fun getBindingContext(element: KtElement) = element.analyze(BodyResolveMode.PARTIAL)
override fun getTypeMapper(element: KtElement): KotlinTypeMapper? {
@@ -34,4 +40,13 @@ class IdeaKotlinUastBindingContextProviderService : KotlinUastBindingContextProv
IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT
)
}
override fun isJvmElement(psiElement: PsiElement): Boolean {
val module = psiElement.module
return module == null || TargetPlatformDetector.getPlatform(module) is JvmPlatform
}
override fun getLanguageVersionSettings(element: KtElement): LanguageVersionSettings {
return element.languageVersionSettings
}
}