[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
This commit is contained in:
Marco Pennekamp
2023-06-01 14:16:21 +02:00
committed by Space Team
parent a036e41809
commit c00eb050ce
2 changed files with 8 additions and 10 deletions
@@ -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<String>,
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