Add correct modification tracking on UltraLight classes
Fixed #KT-32820
This commit is contained in:
-15
@@ -10,30 +10,15 @@ import com.intellij.psi.PsiElement
|
|||||||
import com.intellij.psi.PsiMethod
|
import com.intellij.psi.PsiMethod
|
||||||
import com.intellij.psi.impl.light.LightClass
|
import com.intellij.psi.impl.light.LightClass
|
||||||
import com.intellij.psi.impl.light.LightMethod
|
import com.intellij.psi.impl.light.LightMethod
|
||||||
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
import org.jetbrains.kotlin.asJava.toLightClass
|
import org.jetbrains.kotlin.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.name.SpecialNames
|
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
|
|
||||||
open class KtLightClassForLocalDeclaration(
|
open class KtLightClassForLocalDeclaration(
|
||||||
classOrObject: KtClassOrObject
|
classOrObject: KtClassOrObject
|
||||||
) : KtLightClassForSourceDeclaration(classOrObject) {
|
) : KtLightClassForSourceDeclaration(classOrObject) {
|
||||||
override val myInnersCache: KotlinClassInnerStuffCache =
|
|
||||||
KotlinClassInnerStuffCache(
|
|
||||||
this,
|
|
||||||
with(KotlinModificationTrackerService.getInstance(classOrObject.project)) {
|
|
||||||
val file = classOrObject.containingFile
|
|
||||||
if (file is KtFile) {
|
|
||||||
listOf(outOfBlockModificationTracker, fileModificationTracker(file))
|
|
||||||
} else {
|
|
||||||
listOf(outOfBlockModificationTracker)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun copy(): PsiElement = KtLightClassForLocalDeclaration(classOrObject.copy() as KtClassOrObject)
|
override fun copy(): PsiElement = KtLightClassForLocalDeclaration(classOrObject.copy() as KtClassOrObject)
|
||||||
|
|
||||||
|
|||||||
+6
@@ -71,6 +71,12 @@ abstract class KtLightClassForSourceDeclaration(
|
|||||||
private val forceUsingOldLightClasses: Boolean = false
|
private val forceUsingOldLightClasses: Boolean = false
|
||||||
) : KtLazyLightClass(classOrObject.manager),
|
) : KtLazyLightClass(classOrObject.manager),
|
||||||
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
||||||
|
|
||||||
|
override val myInnersCache: KotlinClassInnerStuffCache = KotlinClassInnerStuffCache(
|
||||||
|
this,
|
||||||
|
classOrObject.getExternalDependencies()
|
||||||
|
)
|
||||||
|
|
||||||
private val lightIdentifier = KtLightIdentifier(this, classOrObject)
|
private val lightIdentifier = KtLightIdentifier(this, classOrObject)
|
||||||
|
|
||||||
override fun getText() = kotlinOrigin.text ?: ""
|
override fun getText() = kotlinOrigin.text ?: ""
|
||||||
|
|||||||
@@ -5,15 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.asJava.classes
|
package org.jetbrains.kotlin.asJava.classes
|
||||||
|
|
||||||
|
import com.intellij.openapi.util.ModificationTracker
|
||||||
import com.intellij.psi.PsiJavaCodeReferenceElement
|
import com.intellij.psi.PsiJavaCodeReferenceElement
|
||||||
import com.intellij.psi.PsiReferenceList
|
import com.intellij.psi.PsiReferenceList
|
||||||
import com.intellij.psi.impl.light.LightElement
|
import com.intellij.psi.impl.light.LightElement
|
||||||
import com.intellij.util.IncorrectOperationException
|
import com.intellij.util.IncorrectOperationException
|
||||||
|
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
|
||||||
import org.jetbrains.kotlin.psi.KtSuperTypeList
|
|
||||||
import org.jetbrains.kotlin.psi.KtSuperTypeListEntry
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||||
|
|
||||||
@@ -50,3 +49,13 @@ fun PsiReferenceList.addSuperTypeEntry(
|
|||||||
entry.replace(entryToAdd)
|
entry.replace(entryToAdd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun KtClassOrObject.getExternalDependencies(): List<ModificationTracker> {
|
||||||
|
return with(KotlinModificationTrackerService.getInstance(project)) {
|
||||||
|
if (!isLocal) return listOf(outOfBlockModificationTracker)
|
||||||
|
else when (val file = containingFile) {
|
||||||
|
is KtFile -> listOf(outOfBlockModificationTracker, fileModificationTracker(file))
|
||||||
|
else -> listOf(outOfBlockModificationTracker)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,7 +14,6 @@ import com.intellij.psi.impl.light.LightMethodBuilder
|
|||||||
import com.intellij.psi.util.CachedValue
|
import com.intellij.psi.util.CachedValue
|
||||||
import com.intellij.psi.util.CachedValueProvider
|
import com.intellij.psi.util.CachedValueProvider
|
||||||
import com.intellij.psi.util.CachedValuesManager
|
import com.intellij.psi.util.CachedValuesManager
|
||||||
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
|
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassData
|
import org.jetbrains.kotlin.asJava.builder.LightClassData
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
@@ -302,7 +301,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
|||||||
{
|
{
|
||||||
CachedValueProvider.Result.create(
|
CachedValueProvider.Result.create(
|
||||||
ownMethods(),
|
ownMethods(),
|
||||||
KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker
|
classOrObject.getExternalDependencies()
|
||||||
)
|
)
|
||||||
}, false
|
}, false
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user