diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/implUtils.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/implUtils.kt index 21884ec178d..b90f66abe47 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/implUtils.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/implUtils.kt @@ -16,5 +16,12 @@ 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 -fun lazyPub(initializer: () -> T) = lazy(LazyThreadSafetyMode.PUBLICATION, initializer) \ No newline at end of file +fun lazyPub(initializer: () -> T) = lazy(LazyThreadSafetyMode.PUBLICATION, initializer) + +fun LightElement.cannotModify(): Nothing { + throw IncorrectOperationException("Modification not implemented.") +} \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightFieldImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightFieldImpl.kt index cede7272b08..9e3df58f567 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightFieldImpl.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightFieldImpl.kt @@ -18,13 +18,12 @@ package org.jetbrains.kotlin.asJava.elements import com.intellij.psi.* import com.intellij.psi.impl.PsiVariableEx -import com.intellij.util.IncorrectOperationException 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.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.classes.KtLightClass 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.psi.KtEnumEntry import org.jetbrains.kotlin.psi.KtNamedDeclaration @@ -41,8 +40,7 @@ sealed class KtLightFieldImpl( @Suppress("UNCHECKED_CAST") get() = super.clsDelegate as D - @Throws(IncorrectOperationException::class) - override fun setInitializer(initializer: PsiExpression?) = throw IncorrectOperationException("Not supported") + override fun setInitializer(initializer: PsiExpression?) = cannotModify() override fun getType() = clsDelegate.type @@ -52,8 +50,7 @@ sealed class KtLightFieldImpl( override fun hasInitializer() = clsDelegate.hasInitializer() - @Throws(IncorrectOperationException::class) - override fun normalizeDeclaration() = throw IncorrectOperationException("Not supported") + override fun normalizeDeclaration() = cannotModify() override fun computeConstantValue() = clsDelegate.computeConstantValue() diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt index 692418b2308..692934a7677 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt @@ -20,10 +20,13 @@ import com.intellij.psi.* import com.intellij.psi.impl.compiled.ClsTypeElementImpl import com.intellij.psi.scope.PsiScopeProcessor import com.intellij.psi.util.* -import com.intellij.util.IncorrectOperationException 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.cannotModify import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.propertyNameByAccessor import org.jetbrains.kotlin.asJava.unwrapped @@ -93,7 +96,7 @@ class KtLightMethodImpl private constructor( nameExpression.replace(KtPsiFactory(this).createStringTemplate(name)) } else { - val toRename = kotlinOrigin as? PsiNamedElement ?: throwCanNotModify() + val toRename = kotlinOrigin as? PsiNamedElement ?: cannotModify() toRename.setName(newNameForOrigin) } return this @@ -104,12 +107,9 @@ class KtLightMethodImpl private constructor( if (it.isValid) { it.delete() } - } ?: throwCanNotModify() + } ?: cannotModify() } - // TODO: add message - private fun throwCanNotModify(): Nothing = throw IncorrectOperationException() - override fun getModifierList(): PsiModifierList { if (calculatingReturnType.get() == true) { return KotlinJavaPsiFacade.getInstance(project).emptyModifierList diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt index 46778c4bdff..146e6314d8d 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt @@ -22,6 +22,7 @@ import com.intellij.psi.* import org.jetbrains.annotations.NotNull import org.jetbrains.annotations.Nullable import org.jetbrains.kotlin.asJava.LightClassGenerationSupport +import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.psi.* @@ -187,8 +188,7 @@ class KtLightAnnotationForSourceEntry( override fun hashCode() = kotlinOrigin.hashCode() - override fun setDeclaredAttributeValue(attributeName: String?, value: T?): T - = clsDelegate.setDeclaredAttributeValue(attributeName, value) + override fun setDeclaredAttributeValue(attributeName: String?, value: T?) = cannotModify() } class KtLightNonSourceAnnotation( @@ -196,8 +196,7 @@ class KtLightNonSourceAnnotation( ): KtLightAbstractAnnotation(parent, { clsDelegate }) { override val kotlinOrigin: KtAnnotationEntry? get() = null override fun getQualifiedName() = clsDelegate.qualifiedName - override fun setDeclaredAttributeValue(attributeName: String?, value: T?) - = clsDelegate.setDeclaredAttributeValue(attributeName, value) + override fun setDeclaredAttributeValue(attributeName: String?, value: T?) = cannotModify() override fun findAttributeValue(attributeName: String?) = clsDelegate.findAttributeValue(attributeName) override fun findDeclaredAttributeValue(attributeName: String?) = clsDelegate.findDeclaredAttributeValue(attributeName) } @@ -244,8 +243,6 @@ class KtLightNullabilityAnnotation(member: KtLightElement<*, PsiModifierListOwne override fun findDeclaredAttributeValue(attributeName: String?) = null } -private fun cannotModify(): Nothing = error("Cannot modify") // TODO: meaningful message? - internal fun isNullabilityAnnotation(qualifiedName: String?) = qualifiedName in backendNullabilityAnnotations private val backendNullabilityAnnotations = arrayOf(Nullable::class.java.name, NotNull::class.java.name) \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt index f9312643df1..bcfe80f1709 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.asJava import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope +import com.intellij.util.IncorrectOperationException import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade import org.jetbrains.kotlin.asJava.elements.KtLightAnnotationForSourceEntry