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.impl.light.LightClass
|
||||
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.toLightClass
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
|
||||
open class KtLightClassForLocalDeclaration(
|
||||
classOrObject: KtClassOrObject
|
||||
) : 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)
|
||||
|
||||
|
||||
+6
@@ -71,6 +71,12 @@ abstract class KtLightClassForSourceDeclaration(
|
||||
private val forceUsingOldLightClasses: Boolean = false
|
||||
) : KtLazyLightClass(classOrObject.manager),
|
||||
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
||||
|
||||
override val myInnersCache: KotlinClassInnerStuffCache = KotlinClassInnerStuffCache(
|
||||
this,
|
||||
classOrObject.getExternalDependencies()
|
||||
)
|
||||
|
||||
private val lightIdentifier = KtLightIdentifier(this, classOrObject)
|
||||
|
||||
override fun getText() = kotlinOrigin.text ?: ""
|
||||
|
||||
@@ -5,15 +5,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.asJava.classes
|
||||
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
import com.intellij.psi.PsiJavaCodeReferenceElement
|
||||
import com.intellij.psi.PsiReferenceList
|
||||
import com.intellij.psi.impl.light.LightElement
|
||||
import com.intellij.util.IncorrectOperationException
|
||||
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
|
||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||
import org.jetbrains.kotlin.psi.KtSuperTypeList
|
||||
import org.jetbrains.kotlin.psi.KtSuperTypeListEntry
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||
|
||||
@@ -49,4 +48,14 @@ fun PsiReferenceList.addSuperTypeEntry(
|
||||
// Preserve original entry order
|
||||
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.CachedValueProvider
|
||||
import com.intellij.psi.util.CachedValuesManager
|
||||
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
|
||||
import org.jetbrains.kotlin.asJava.builder.LightClassData
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||
@@ -302,7 +301,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
{
|
||||
CachedValueProvider.Result.create(
|
||||
ownMethods(),
|
||||
KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker
|
||||
classOrObject.getExternalDependencies()
|
||||
)
|
||||
}, false
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user