From c00eb050ce79b56ac3d41b5be27fe50427a22d96 Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Thu, 1 Jun 2023 14:16:21 +0200 Subject: [PATCH] [SLC/ULC] KTIJ-25335 Avoid generating fields with special names - Due to the fixes for KTIJ-23584, when calling the UAST conversion `convertDeclarationOrElement` from `BaseKotlinConverter` (intellij project) for an SLC/ULC property, `convertDeclaration` failed because the declaration is "special". This caused `convertPsiElement` to be tried instead, which also returned `null`, causing the "failed to convert element" exception described in KTIJ-25335. - In parallel to the solution for KTIJ-23584, which fixed the special names issue for functions, this commit skips UAST field generation for properties with special names. ^KTIJ-25335 fixed ^KTIJ-24121 fixed --- .../symbol/classes/symbolLightClassUtils.kt | 14 +++++++------- .../asJava/classes/ultraLightMembersCreator.kt | 4 +--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt index f6f9070dccb..cbd8da7856e 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt @@ -35,18 +35,17 @@ import org.jetbrains.kotlin.config.JvmDefaultMode import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.lexer.KtTokens.* -import org.jetbrains.kotlin.light.classes.symbol.* -import org.jetbrains.kotlin.light.classes.symbol.annotations.* +import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmOverloadsAnnotation +import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation +import org.jetbrains.kotlin.light.classes.symbol.annotations.isHiddenOrSynthetic +import org.jetbrains.kotlin.light.classes.symbol.annotations.toOptionalFilter import org.jetbrains.kotlin.light.classes.symbol.copy import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForProperty +import org.jetbrains.kotlin.light.classes.symbol.isJvmField import org.jetbrains.kotlin.light.classes.symbol.mapType -import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightAccessorMethod -import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightAnnotationsMethod -import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightConstructor -import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightNoArgConstructor -import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod +import org.jetbrains.kotlin.light.classes.symbol.methods.* import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.psi.* @@ -391,6 +390,7 @@ internal fun SymbolLightClassBase.createField( isStatic: Boolean, result: MutableList ) { + if (declaration.name.isSpecial) return if (!hasBackingField(declaration)) return val isDelegated = (declaration as? KtKotlinPropertySymbol)?.isDelegatedProperty == true diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt index 7c0d7b0099a..eb2dcdfc443 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt @@ -10,7 +10,6 @@ import com.intellij.psi.* import com.intellij.psi.impl.light.LightMethodBuilder import com.intellij.psi.impl.light.LightModifierList import com.intellij.psi.impl.light.LightParameterListBuilder -import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod @@ -30,7 +29,6 @@ import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier import org.jetbrains.kotlin.psi.psiUtil.hasSuspendModifier -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.isPublishedApi import org.jetbrains.kotlin.resolve.inline.isInlineOnly @@ -61,7 +59,7 @@ internal class UltraLightMembersCreator( usedPropertyNames: HashSet, forceStatic: Boolean ): KtLightField? { - + if (variable.nameAsSafeName.isSpecial) return null if (!hasBackingField(variable)) return null if (variable.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) || variable.hasExpectModifier()) return null