[lombok] Generate no-arg static factory method

This commit is contained in:
Andrey Zinovyev
2021-03-26 15:14:55 +03:00
committed by TeamCityServer
parent 37926f333e
commit 59f936fdef
11 changed files with 103 additions and 22 deletions
@@ -78,7 +78,7 @@ class LazyJavaClassMemberScope(
addAll(declaredMemberIndex().getMethodNames())
addAll(declaredMemberIndex().getRecordComponentNames())
addAll(computeClassNames(kindFilter, nameFilter))
addAll(c.components.syntheticPartsProvider.getSyntheticFunctionNames(ownerDescriptor))
addAll(c.components.syntheticPartsProvider.getMethodNames(ownerDescriptor))
}
internal val constructors = c.storageManager.createLazyValue {
@@ -99,7 +99,7 @@ class LazyJavaClassMemberScope(
}
}
c.components.syntheticPartsProvider.generateSyntheticConstructors(ownerDescriptor, result)
c.components.syntheticPartsProvider.generateConstructors(ownerDescriptor, result)
c.components.signatureEnhancement.enhanceSignatures(
c,
@@ -500,7 +500,7 @@ class LazyJavaClassMemberScope(
result.add(resolveRecordComponentToFunctionDescriptor(declaredMemberIndex().findRecordComponentByName(name)!!))
}
c.components.syntheticPartsProvider.generateSyntheticMethods(ownerDescriptor, name, result)
c.components.syntheticPartsProvider.generateMethods(ownerDescriptor, name, result)
}
private fun resolveRecordComponentToFunctionDescriptor(recordComponent: JavaRecordComponent): JavaMethodDescriptor {
@@ -48,6 +48,7 @@ class LazyJavaStaticClassScope(
if (jClass.isEnum) {
addAll(listOf(StandardNames.ENUM_VALUE_OF, StandardNames.ENUM_VALUES))
}
addAll(c.components.syntheticPartsProvider.getStaticFunctionNames(ownerDescriptor))
}
override fun computePropertyNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?) =
@@ -81,6 +82,10 @@ class LazyJavaStaticClassScope(
}
}
override fun computeImplicitlyDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, name: Name) {
c.components.syntheticPartsProvider.generateStaticFunctions(ownerDescriptor, name, result)
}
override fun computeNonDeclaredProperties(name: Name, result: MutableCollection<PropertyDescriptor>) {
val propertiesFromSupertypes = flatMapJavaStaticSupertypesScopes(ownerDescriptor, mutableSetOf()) {
it.getContributedVariables(name, NoLookupLocation.WHEN_GET_SUPER_MEMBERS)
@@ -16,31 +16,46 @@ interface SyntheticJavaPartsProvider {
val EMPTY = CompositeSyntheticJavaPartsProvider(emptyList())
}
fun getSyntheticFunctionNames(thisDescriptor: ClassDescriptor): List<Name>
fun getMethodNames(thisDescriptor: ClassDescriptor): List<Name>
fun generateSyntheticMethods(
fun generateMethods(
thisDescriptor: ClassDescriptor,
name: Name,
result: MutableCollection<SimpleFunctionDescriptor>
)
fun generateSyntheticConstructors(thisDescriptor: ClassDescriptor, result: MutableList<ClassConstructorDescriptor>)
fun getStaticFunctionNames(thisDescriptor: ClassDescriptor): List<Name>
fun generateStaticFunctions(
thisDescriptor: ClassDescriptor,
name: Name,
result: MutableCollection<SimpleFunctionDescriptor>
)
fun generateConstructors(thisDescriptor: ClassDescriptor, result: MutableList<ClassConstructorDescriptor>)
}
class CompositeSyntheticJavaPartsProvider(private val inner: List<SyntheticJavaPartsProvider>) : SyntheticJavaPartsProvider {
override fun getSyntheticFunctionNames(thisDescriptor: ClassDescriptor): List<Name> =
inner.flatMap { it.getSyntheticFunctionNames(thisDescriptor) }
override fun getMethodNames(thisDescriptor: ClassDescriptor): List<Name> =
inner.flatMap { it.getMethodNames(thisDescriptor) }
override fun generateSyntheticMethods(
override fun generateMethods(
thisDescriptor: ClassDescriptor,
name: Name,
result: MutableCollection<SimpleFunctionDescriptor>
) {
inner.forEach { it.generateSyntheticMethods(thisDescriptor, name, result) }
inner.forEach { it.generateMethods(thisDescriptor, name, result) }
}
override fun generateSyntheticConstructors(thisDescriptor: ClassDescriptor, result: MutableList<ClassConstructorDescriptor>) {
inner.forEach { it.generateSyntheticConstructors(thisDescriptor, result) }
override fun getStaticFunctionNames(thisDescriptor: ClassDescriptor): List<Name> =
inner.flatMap { it.getStaticFunctionNames(thisDescriptor) }
override fun generateStaticFunctions(thisDescriptor: ClassDescriptor, name: Name, result: MutableCollection<SimpleFunctionDescriptor>) {
inner.forEach { it.generateStaticFunctions(thisDescriptor, name, result) }
}
override fun generateConstructors(thisDescriptor: ClassDescriptor, result: MutableList<ClassConstructorDescriptor>) {
inner.forEach { it.generateConstructors(thisDescriptor, result) }
}
}