Light classes, minor: introduce cannotModify() utility
This commit is contained in:
@@ -16,5 +16,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.asJava.classes
|
package org.jetbrains.kotlin.asJava.classes
|
||||||
|
|
||||||
|
import com.intellij.psi.impl.light.LightElement
|
||||||
|
import com.intellij.util.IncorrectOperationException
|
||||||
|
|
||||||
// NOTE: avoid using blocking lazy in light classes, it leads to deadlocks
|
// NOTE: avoid using blocking lazy in light classes, it leads to deadlocks
|
||||||
fun <T> lazyPub(initializer: () -> T) = lazy(LazyThreadSafetyMode.PUBLICATION, initializer)
|
fun <T> lazyPub(initializer: () -> T) = lazy(LazyThreadSafetyMode.PUBLICATION, initializer)
|
||||||
|
|
||||||
|
fun LightElement.cannotModify(): Nothing {
|
||||||
|
throw IncorrectOperationException("Modification not implemented.")
|
||||||
|
}
|
||||||
@@ -18,13 +18,12 @@ package org.jetbrains.kotlin.asJava.elements
|
|||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.PsiVariableEx
|
import com.intellij.psi.impl.PsiVariableEx
|
||||||
import com.intellij.util.IncorrectOperationException
|
|
||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory
|
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClassForEnumEntry
|
import org.jetbrains.kotlin.asJava.classes.KtLightClassForEnumEntry
|
||||||
|
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.psi.KtEnumEntry
|
import org.jetbrains.kotlin.psi.KtEnumEntry
|
||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||||
@@ -41,8 +40,7 @@ sealed class KtLightFieldImpl<D : PsiField>(
|
|||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
get() = super.clsDelegate as D
|
get() = super.clsDelegate as D
|
||||||
|
|
||||||
@Throws(IncorrectOperationException::class)
|
override fun setInitializer(initializer: PsiExpression?) = cannotModify()
|
||||||
override fun setInitializer(initializer: PsiExpression?) = throw IncorrectOperationException("Not supported")
|
|
||||||
|
|
||||||
override fun getType() = clsDelegate.type
|
override fun getType() = clsDelegate.type
|
||||||
|
|
||||||
@@ -52,8 +50,7 @@ sealed class KtLightFieldImpl<D : PsiField>(
|
|||||||
|
|
||||||
override fun hasInitializer() = clsDelegate.hasInitializer()
|
override fun hasInitializer() = clsDelegate.hasInitializer()
|
||||||
|
|
||||||
@Throws(IncorrectOperationException::class)
|
override fun normalizeDeclaration() = cannotModify()
|
||||||
override fun normalizeDeclaration() = throw IncorrectOperationException("Not supported")
|
|
||||||
|
|
||||||
override fun computeConstantValue() = clsDelegate.computeConstantValue()
|
override fun computeConstantValue() = clsDelegate.computeConstantValue()
|
||||||
|
|
||||||
|
|||||||
+7
-7
@@ -20,10 +20,13 @@ import com.intellij.psi.*
|
|||||||
import com.intellij.psi.impl.compiled.ClsTypeElementImpl
|
import com.intellij.psi.impl.compiled.ClsTypeElementImpl
|
||||||
import com.intellij.psi.scope.PsiScopeProcessor
|
import com.intellij.psi.scope.PsiScopeProcessor
|
||||||
import com.intellij.psi.util.*
|
import com.intellij.psi.util.*
|
||||||
import com.intellij.util.IncorrectOperationException
|
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
import org.jetbrains.kotlin.asJava.builder.*
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
||||||
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
||||||
|
import org.jetbrains.kotlin.asJava.builder.MemberIndex
|
||||||
|
import org.jetbrains.kotlin.asJava.builder.memberIndex
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
|
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.propertyNameByAccessor
|
import org.jetbrains.kotlin.asJava.propertyNameByAccessor
|
||||||
import org.jetbrains.kotlin.asJava.unwrapped
|
import org.jetbrains.kotlin.asJava.unwrapped
|
||||||
@@ -93,7 +96,7 @@ class KtLightMethodImpl private constructor(
|
|||||||
nameExpression.replace(KtPsiFactory(this).createStringTemplate(name))
|
nameExpression.replace(KtPsiFactory(this).createStringTemplate(name))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val toRename = kotlinOrigin as? PsiNamedElement ?: throwCanNotModify()
|
val toRename = kotlinOrigin as? PsiNamedElement ?: cannotModify()
|
||||||
toRename.setName(newNameForOrigin)
|
toRename.setName(newNameForOrigin)
|
||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
@@ -104,12 +107,9 @@ class KtLightMethodImpl private constructor(
|
|||||||
if (it.isValid) {
|
if (it.isValid) {
|
||||||
it.delete()
|
it.delete()
|
||||||
}
|
}
|
||||||
} ?: throwCanNotModify()
|
} ?: cannotModify()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: add message
|
|
||||||
private fun throwCanNotModify(): Nothing = throw IncorrectOperationException()
|
|
||||||
|
|
||||||
override fun getModifierList(): PsiModifierList {
|
override fun getModifierList(): PsiModifierList {
|
||||||
if (calculatingReturnType.get() == true) {
|
if (calculatingReturnType.get() == true) {
|
||||||
return KotlinJavaPsiFacade.getInstance(project).emptyModifierList
|
return KotlinJavaPsiFacade.getInstance(project).emptyModifierList
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.intellij.psi.*
|
|||||||
import org.jetbrains.annotations.NotNull
|
import org.jetbrains.annotations.NotNull
|
||||||
import org.jetbrains.annotations.Nullable
|
import org.jetbrains.annotations.Nullable
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
|
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -187,8 +188,7 @@ class KtLightAnnotationForSourceEntry(
|
|||||||
|
|
||||||
override fun hashCode() = kotlinOrigin.hashCode()
|
override fun hashCode() = kotlinOrigin.hashCode()
|
||||||
|
|
||||||
override fun <T : PsiAnnotationMemberValue?> setDeclaredAttributeValue(attributeName: String?, value: T?): T
|
override fun <T : PsiAnnotationMemberValue?> setDeclaredAttributeValue(attributeName: String?, value: T?) = cannotModify()
|
||||||
= clsDelegate.setDeclaredAttributeValue(attributeName, value)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class KtLightNonSourceAnnotation(
|
class KtLightNonSourceAnnotation(
|
||||||
@@ -196,8 +196,7 @@ class KtLightNonSourceAnnotation(
|
|||||||
): KtLightAbstractAnnotation(parent, { clsDelegate }) {
|
): KtLightAbstractAnnotation(parent, { clsDelegate }) {
|
||||||
override val kotlinOrigin: KtAnnotationEntry? get() = null
|
override val kotlinOrigin: KtAnnotationEntry? get() = null
|
||||||
override fun getQualifiedName() = clsDelegate.qualifiedName
|
override fun getQualifiedName() = clsDelegate.qualifiedName
|
||||||
override fun <T : PsiAnnotationMemberValue?> setDeclaredAttributeValue(attributeName: String?, value: T?)
|
override fun <T : PsiAnnotationMemberValue?> setDeclaredAttributeValue(attributeName: String?, value: T?) = cannotModify()
|
||||||
= clsDelegate.setDeclaredAttributeValue(attributeName, value)
|
|
||||||
override fun findAttributeValue(attributeName: String?) = clsDelegate.findAttributeValue(attributeName)
|
override fun findAttributeValue(attributeName: String?) = clsDelegate.findAttributeValue(attributeName)
|
||||||
override fun findDeclaredAttributeValue(attributeName: String?) = clsDelegate.findDeclaredAttributeValue(attributeName)
|
override fun findDeclaredAttributeValue(attributeName: String?) = clsDelegate.findDeclaredAttributeValue(attributeName)
|
||||||
}
|
}
|
||||||
@@ -244,8 +243,6 @@ class KtLightNullabilityAnnotation(member: KtLightElement<*, PsiModifierListOwne
|
|||||||
override fun findDeclaredAttributeValue(attributeName: String?) = null
|
override fun findDeclaredAttributeValue(attributeName: String?) = null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun cannotModify(): Nothing = error("Cannot modify") // TODO: meaningful message?
|
|
||||||
|
|
||||||
internal fun isNullabilityAnnotation(qualifiedName: String?) = qualifiedName in backendNullabilityAnnotations
|
internal fun isNullabilityAnnotation(qualifiedName: String?) = qualifiedName in backendNullabilityAnnotations
|
||||||
|
|
||||||
private val backendNullabilityAnnotations = arrayOf(Nullable::class.java.name, NotNull::class.java.name)
|
private val backendNullabilityAnnotations = arrayOf(Nullable::class.java.name, NotNull::class.java.name)
|
||||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.asJava
|
|||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import com.intellij.util.IncorrectOperationException
|
||||||
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.elements.KtLightAnnotationForSourceEntry
|
import org.jetbrains.kotlin.asJava.elements.KtLightAnnotationForSourceEntry
|
||||||
|
|||||||
Reference in New Issue
Block a user