Minor: Fix warnings in KtCodeFragment

This commit is contained in:
Yan Zhulanow
2019-08-14 15:48:40 +09:00
parent 716c9f79f7
commit fa45122c6b
@@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.psi.* import com.intellij.psi.*
import com.intellij.psi.JavaCodeFragment.VisibilityChecker
import com.intellij.psi.impl.PsiManagerEx import com.intellij.psi.impl.PsiManagerEx
import com.intellij.psi.impl.source.tree.FileElement import com.intellij.psi.impl.source.tree.FileElement
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
@@ -32,22 +33,18 @@ import org.jetbrains.kotlin.types.KotlinType
import java.util.* import java.util.*
abstract class KtCodeFragment( abstract class KtCodeFragment(
private val _project: Project, private val myProject: Project,
name: String, name: String,
text: CharSequence, text: CharSequence,
imports: String?, // Should be separated by JetCodeFragment.IMPORT_SEPARATOR imports: String?, // Should be separated by KtCodeFragment.IMPORT_SEPARATOR
elementType: IElementType, elementType: IElementType,
private val context: PsiElement? private val context: PsiElement?
) : KtFile( ) : KtFile(
(PsiManager.getInstance(_project) as PsiManagerEx).fileManager.createFileViewProvider( run {
LightVirtualFile( val psiManager = PsiManager.getInstance(myProject) as PsiManagerEx
name, psiManager.fileManager.createFileViewProvider(LightVirtualFile(name, KotlinFileType.INSTANCE, text), true)
KotlinFileType.INSTANCE, }, false
text
), true
), false
), KtCodeFragmentBase { ), KtCodeFragmentBase {
private var viewProvider = super.getViewProvider() as SingleRootFileViewProvider private var viewProvider = super.getViewProvider() as SingleRootFileViewProvider
private var imports = LinkedHashSet<String>() private var imports = LinkedHashSet<String>()
@@ -56,6 +53,7 @@ abstract class KtCodeFragment(
} }
init { init {
@Suppress("LeakingThis")
getViewProvider().forceCachedPsi(this) getViewProvider().forceCachedPsi(this)
init(TokenType.CODE_FRAGMENT, elementType) init(TokenType.CODE_FRAGMENT, elementType)
if (context != null) { if (context != null) {
@@ -63,7 +61,7 @@ abstract class KtCodeFragment(
} }
} }
override final fun init(elementType: IElementType, contentElementType: IElementType?) { final override fun init(elementType: IElementType, contentElementType: IElementType?) {
super.init(elementType, contentElementType) super.init(elementType, contentElementType)
} }
@@ -99,14 +97,19 @@ abstract class KtCodeFragment(
override fun getResolveScope() = context?.resolveScope ?: super.getResolveScope() override fun getResolveScope() = context?.resolveScope ?: super.getResolveScope()
override fun clone(): KtCodeFragment { override fun clone(): KtCodeFragment {
val clone = cloneImpl(calcTreeElement().clone() as FileElement) as KtCodeFragment val elementClone = calcTreeElement().clone() as FileElement
clone.isPhysical = false
clone.myOriginalFile = this return (cloneImpl(elementClone) as KtCodeFragment).apply {
clone.imports = imports isPhysical = false
clone.viewProvider = myOriginalFile = this@KtCodeFragment
SingleRootFileViewProvider(PsiManager.getInstance(_project), LightVirtualFile(name, KotlinFileType.INSTANCE, text), false) imports = this@KtCodeFragment.imports
clone.viewProvider.forceCachedPsi(clone) viewProvider = SingleRootFileViewProvider(
return clone PsiManager.getInstance(myProject),
LightVirtualFile(name, KotlinFileType.INSTANCE, text),
false
)
viewProvider.forceCachedPsi(this)
}
} }
final override fun getViewProvider() = viewProvider final override fun getViewProvider() = viewProvider
@@ -149,7 +152,7 @@ abstract class KtCodeFragment(
} }
fun importsAsImportList(): KtImportList? { fun importsAsImportList(): KtImportList? {
if (!imports.isEmpty() && context != null) { if (imports.isNotEmpty() && context != null) {
return KtPsiFactory(this).createAnalyzableFile("imports_for_codeFragment.kt", imports.joinToString("\n"), context).importList return KtPsiFactory(this).createAnalyzableFile("imports_for_codeFragment.kt", imports.joinToString("\n"), context).importList
} }
return null return null
@@ -158,9 +161,9 @@ abstract class KtCodeFragment(
override val importDirectives: List<KtImportDirective> override val importDirectives: List<KtImportDirective>
get() = importsAsImportList()?.imports ?: emptyList() get() = importsAsImportList()?.imports ?: emptyList()
override fun setVisibilityChecker(checker: JavaCodeFragment.VisibilityChecker?) {} override fun setVisibilityChecker(checker: VisibilityChecker?) {}
override fun getVisibilityChecker() = JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE override fun getVisibilityChecker(): VisibilityChecker = VisibilityChecker.EVERYTHING_VISIBLE
override fun setExceptionHandler(checker: JavaCodeFragment.ExceptionHandler?) { override fun setExceptionHandler(checker: JavaCodeFragment.ExceptionHandler?) {
exceptionHandler = checker exceptionHandler = checker
@@ -182,8 +185,7 @@ abstract class KtCodeFragment(
} }
private fun initImports(imports: String?) { private fun initImports(imports: String?) {
if (imports != null && !imports.isEmpty()) { if (imports != null && imports.isNotEmpty()) {
val importsWithPrefix = imports.split(IMPORT_SEPARATOR).map { it.takeIf { it.startsWith("import ") } ?: "import ${it.trim()}" } val importsWithPrefix = imports.split(IMPORT_SEPARATOR).map { it.takeIf { it.startsWith("import ") } ?: "import ${it.trim()}" }
importsWithPrefix.forEach { importsWithPrefix.forEach {
addImport(it) addImport(it)
@@ -192,7 +194,7 @@ abstract class KtCodeFragment(
} }
companion object { companion object {
val IMPORT_SEPARATOR: String = "," const val IMPORT_SEPARATOR: String = ","
val RUNTIME_TYPE_EVALUATOR: Key<Function1<KtExpression, KotlinType?>> = Key.create("RUNTIME_TYPE_EVALUATOR") val RUNTIME_TYPE_EVALUATOR: Key<Function1<KtExpression, KotlinType?>> = Key.create("RUNTIME_TYPE_EVALUATOR")
val FAKE_CONTEXT_FOR_JAVA_FILE: Key<Function0<KtElement>> = Key.create("FAKE_CONTEXT_FOR_JAVA_FILE") val FAKE_CONTEXT_FOR_JAVA_FILE: Key<Function0<KtElement>> = Key.create("FAKE_CONTEXT_FOR_JAVA_FILE")