181: LightClasses: using viewProvider from KtFile
#KT-22929
This commit is contained in:
committed by
Nikolay Krasko
parent
1125926009
commit
585348c590
@@ -12,7 +12,7 @@ dependencies {
|
|||||||
compile(project(":compiler:frontend"))
|
compile(project(":compiler:frontend"))
|
||||||
compile(project(":compiler:frontend.java"))
|
compile(project(":compiler:frontend.java"))
|
||||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
||||||
compileOnly(intellijDep()) { includeJars("annotations", "platform-impl", "asm-all", "trove4j", "guava", rootProject = rootProject) }
|
compileOnly(intellijDep()) { includeJars("annotations", "asm-all", "trove4j", "guava", rootProject = rootProject) }
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
|
|||||||
+1
-2
@@ -26,7 +26,6 @@ import com.intellij.psi.PsiElement
|
|||||||
import com.intellij.psi.impl.compiled.ClsFileImpl
|
import com.intellij.psi.impl.compiled.ClsFileImpl
|
||||||
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
|
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
|
||||||
import com.intellij.psi.impl.java.stubs.impl.PsiJavaFileStubImpl
|
import com.intellij.psi.impl.java.stubs.impl.PsiJavaFileStubImpl
|
||||||
import org.jetbrains.kotlin.asJava.elements.getFileViewProviderForLightClass
|
|
||||||
import com.intellij.psi.impl.source.tree.TreeElement
|
import com.intellij.psi.impl.source.tree.TreeElement
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
@@ -79,7 +78,7 @@ private fun createJavaFileStub(project: Project, packageFqName: FqName, files: C
|
|||||||
val javaFileStub = PsiJavaFileStubImpl(packageFqName.asString(), /*compiled = */true)
|
val javaFileStub = PsiJavaFileStubImpl(packageFqName.asString(), /*compiled = */true)
|
||||||
javaFileStub.psiFactory = ClsWrapperStubPsiFactory.INSTANCE
|
javaFileStub.psiFactory = ClsWrapperStubPsiFactory.INSTANCE
|
||||||
|
|
||||||
val fakeFile = object : ClsFileImpl(getFileViewProviderForLightClass(files.first())) {
|
val fakeFile = object : ClsFileImpl(files.first().viewProvider) {
|
||||||
override fun getStub() = javaFileStub
|
override fun getStub() = javaFileStub
|
||||||
|
|
||||||
override fun getPackageName() = packageFqName.asString()
|
override fun getPackageName() = packageFqName.asString()
|
||||||
|
|||||||
+1
-12
@@ -17,26 +17,22 @@
|
|||||||
package org.jetbrains.kotlin.asJava.elements
|
package org.jetbrains.kotlin.asJava.elements
|
||||||
|
|
||||||
import com.intellij.pom.java.LanguageLevel
|
import com.intellij.pom.java.LanguageLevel
|
||||||
import com.intellij.psi.ClassFileViewProvider
|
|
||||||
import com.intellij.psi.FileViewProvider
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import com.intellij.psi.impl.compiled.ClsFileImpl
|
import com.intellij.psi.impl.compiled.ClsFileImpl
|
||||||
import com.intellij.psi.impl.source.tree.injected.InjectedFileViewProvider
|
|
||||||
import com.intellij.psi.stubs.PsiClassHolderFileStub
|
import com.intellij.psi.stubs.PsiClassHolderFileStub
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
|
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|
||||||
|
|
||||||
open class FakeFileForLightClass(
|
open class FakeFileForLightClass(
|
||||||
val ktFile: KtFile,
|
val ktFile: KtFile,
|
||||||
private val lightClass: () -> KtLightClass,
|
private val lightClass: () -> KtLightClass,
|
||||||
private val stub: () -> PsiClassHolderFileStub<*>,
|
private val stub: () -> PsiClassHolderFileStub<*>,
|
||||||
private val packageFqName: FqName = ktFile.packageFqName
|
private val packageFqName: FqName = ktFile.packageFqName
|
||||||
) : ClsFileImpl(getFileViewProviderForLightClass(ktFile)) {
|
) : ClsFileImpl(ktFile.viewProvider) {
|
||||||
override fun getPackageName() = packageFqName.asString()
|
override fun getPackageName() = packageFqName.asString()
|
||||||
|
|
||||||
override fun getStub() = stub()
|
override fun getStub() = stub()
|
||||||
@@ -85,10 +81,3 @@ open class FakeFileForLightClass(
|
|||||||
|
|
||||||
override fun isPhysical() = false
|
override fun isPhysical() = false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFileViewProviderForLightClass(ktFile: KtFile): FileViewProvider {
|
|
||||||
ktFile.viewProvider.safeAs<InjectedFileViewProvider>()?.let { return it }
|
|
||||||
return ClassFileViewProvider(
|
|
||||||
ktFile.manager, ktFile.virtualFile ?: ktFile.originalFile.virtualFile ?: ktFile.viewProvider.virtualFile
|
|
||||||
)
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user