UAST: Do not create UElements in non-JVM modules

This commit is contained in:
Alexey Sedunov
2018-02-15 20:24:44 +03:00
parent a2835fe0d3
commit d5df8c60fc
2 changed files with 9 additions and 0 deletions
+1
View File
@@ -8,6 +8,7 @@ dependencies {
compile(project(":compiler:frontend")) compile(project(":compiler:frontend"))
compile(project(":compiler:frontend.java")) compile(project(":compiler:frontend.java"))
compile(project(":compiler:light-classes")) compile(project(":compiler:light-classes"))
compile(project(":idea:idea-core"))
compileOnly(intellijDep()) { includeJars("openapi", "idea", "util", "extensions", "asm-all") } compileOnly(intellijDep()) { includeJars("openapi", "idea", "util", "extensions", "asm-all") }
testCompile(projectDist(":kotlin-test:kotlin-test-jvm")) testCompile(projectDist(":kotlin-test:kotlin-test-jvm"))
@@ -32,11 +32,14 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.uast.* import org.jetbrains.uast.*
import org.jetbrains.uast.kotlin.declarations.KotlinUMethod import org.jetbrains.uast.kotlin.declarations.KotlinUMethod
import org.jetbrains.uast.kotlin.expressions.* import org.jetbrains.uast.kotlin.expressions.*
@@ -60,11 +63,16 @@ class KotlinUastLanguagePlugin : UastLanguagePlugin {
return fileName.endsWith(".kt", false) || fileName.endsWith(".kts", false) return fileName.endsWith(".kt", false) || fileName.endsWith(".kts", false)
} }
private val PsiElement.isJvmElement
get() = module?.let { TargetPlatformDetector.getPlatform(it) } is JvmPlatform
override fun convertElement(element: PsiElement, parent: UElement?, requiredType: Class<out UElement>?): UElement? { override fun convertElement(element: PsiElement, parent: UElement?, requiredType: Class<out UElement>?): UElement? {
if (!element.isJvmElement) return null
return convertDeclarationOrElement(element, parent, requiredType) return convertDeclarationOrElement(element, parent, requiredType)
} }
override fun convertElementWithParent(element: PsiElement, requiredType: Class<out UElement>?): UElement? { override fun convertElementWithParent(element: PsiElement, requiredType: Class<out UElement>?): UElement? {
if (!element.isJvmElement) return null
if (element is PsiFile) return convertDeclaration(element, null, requiredType) if (element is PsiFile) return convertDeclaration(element, null, requiredType)
if (element is KtLightClassForFacade) return convertDeclaration(element, null, requiredType) if (element is KtLightClassForFacade) return convertDeclaration(element, null, requiredType)