Minor: Fix warnings in KtCodeFragment
This commit is contained in:
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user