From 0e7d1b39459e238733324d4c5567d6e294a4851f Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Wed, 27 Oct 2021 16:20:24 -0700 Subject: [PATCH] FIR LC: refactor creation of property accessors --- .../symbol/classes/firLightClassUtils.kt | 141 +++++++++--------- 1 file changed, 73 insertions(+), 68 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt index 0c45b8f7416..961a7b5b239 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt @@ -191,74 +191,7 @@ internal fun FirLightClassBase.createMethods( } } } - is KtPropertySymbol -> { - - if (declaration is KtKotlinPropertySymbol && declaration.isConst) return - - if (declaration.visibility.isPrivateOrPrivateToThis() && - declaration.getter?.hasBody == false && - declaration.setter?.hasBody == false - ) return - - if (declaration.hasJvmFieldAnnotation()) return - - fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean { - if (isInline) return false - if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false - if (declaration.isHiddenOrSynthetic(project, siteTarget)) return false - if (isHiddenOrSynthetic(project)) return false - return true - } - - val originalElement = declaration.psi as? KtDeclaration - - val getter = declaration.getter?.takeIf { - it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_GETTER) - } - - if (getter != null) { - val lightMemberOrigin = originalElement?.let { - LightMemberOriginForDeclaration( - originalElement = it, - originKind = JvmDeclarationOriginKind.OTHER, - auxiliaryOriginalElement = getter.psi as? KtDeclaration - ) - } - - result.add( - FirLightAccessorMethodForSymbol( - propertyAccessorSymbol = getter, - containingPropertySymbol = declaration, - lightMemberOrigin = lightMemberOrigin, - containingClass = this@createMethods, - isTopLevel = isTopLevel - ) - ) - } - - val setter = declaration.setter?.takeIf { - !isAnnotationType && it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_SETTER) - } - - if (setter != null) { - val lightMemberOrigin = originalElement?.let { - LightMemberOriginForDeclaration( - originalElement = it, - originKind = JvmDeclarationOriginKind.OTHER, - auxiliaryOriginalElement = setter.psi as? KtDeclaration - ) - } - result.add( - FirLightAccessorMethodForSymbol( - propertyAccessorSymbol = setter, - containingPropertySymbol = declaration, - lightMemberOrigin = lightMemberOrigin, - containingClass = this@createMethods, - isTopLevel = isTopLevel - ) - ) - } - } + is KtPropertySymbol -> createPropertyAccessors(result, declaration, isTopLevel) is KtConstructorSymbol -> error("Constructors should be handled separately and not passed to this function") } } @@ -273,6 +206,78 @@ internal fun FirLightClassBase.createMethods( } } +internal fun FirLightClassBase.createPropertyAccessors( + result: MutableList, + declaration: KtPropertySymbol, + isTopLevel: Boolean, +) { + if (declaration is KtKotlinPropertySymbol && declaration.isConst) return + + if (declaration.visibility.isPrivateOrPrivateToThis() && + declaration.getter?.hasBody == false && + declaration.setter?.hasBody == false + ) return + + if (declaration.hasJvmFieldAnnotation()) return + + fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean { + if (isInline) return false + if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false + if (declaration.isHiddenOrSynthetic(project, siteTarget)) return false + if (isHiddenOrSynthetic(project)) return false + return true + } + + val originalElement = declaration.psi as? KtDeclaration + + val getter = declaration.getter?.takeIf { + it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_GETTER) + } + + if (getter != null) { + val lightMemberOrigin = originalElement?.let { + LightMemberOriginForDeclaration( + originalElement = it, + originKind = JvmDeclarationOriginKind.OTHER, + auxiliaryOriginalElement = getter.psi as? KtDeclaration + ) + } + + result.add( + FirLightAccessorMethodForSymbol( + propertyAccessorSymbol = getter, + containingPropertySymbol = declaration, + lightMemberOrigin = lightMemberOrigin, + containingClass = this@createPropertyAccessors, + isTopLevel = isTopLevel + ) + ) + } + + val setter = declaration.setter?.takeIf { + !isAnnotationType && it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_SETTER) + } + + if (setter != null) { + val lightMemberOrigin = originalElement?.let { + LightMemberOriginForDeclaration( + originalElement = it, + originKind = JvmDeclarationOriginKind.OTHER, + auxiliaryOriginalElement = setter.psi as? KtDeclaration + ) + } + result.add( + FirLightAccessorMethodForSymbol( + propertyAccessorSymbol = setter, + containingPropertySymbol = declaration, + lightMemberOrigin = lightMemberOrigin, + containingClass = this@createPropertyAccessors, + isTopLevel = isTopLevel + ) + ) + } +} + internal fun FirLightClassBase.createField( declaration: KtPropertySymbol, nameGenerator: FirLightField.FieldNameGenerator,