[FIR] Add parameter flattenArrays to FirExpression.unwrapAndFlattenArgument
This commit is contained in:
committed by
Space Team
parent
28a14ebd42
commit
ebb6f4c70f
+1
-1
@@ -144,7 +144,7 @@ private fun <T> FirAnnotation.findFromRawArguments(expectedEnumClass: ClassId, t
|
||||
|
||||
if (this@findFromRawArguments is FirAnnotationCall) {
|
||||
for (arg in argumentList.arguments) {
|
||||
arg.unwrapAndFlattenArgument().forEach(::addIfMatching)
|
||||
arg.unwrapAndFlattenArgument(flattenArrays = true).forEach(::addIfMatching)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -58,7 +58,7 @@ fun FirRegularClass.getAllowedAnnotationTargets(session: FirSession): Set<Kotlin
|
||||
fun FirClassLikeSymbol<*>.getAllowedAnnotationTargets(session: FirSession): Set<KotlinTarget> {
|
||||
lazyResolveToPhase(FirResolvePhase.ANNOTATION_ARGUMENTS)
|
||||
val targetAnnotation = getTargetAnnotation(session) ?: return defaultAnnotationTargets
|
||||
val arguments = targetAnnotation.findArgumentByName(ParameterNames.targetAllowedTargets)?.unwrapAndFlattenArgument().orEmpty()
|
||||
val arguments = targetAnnotation.findArgumentByName(ParameterNames.targetAllowedTargets)?.unwrapAndFlattenArgument(flattenArrays = true).orEmpty()
|
||||
|
||||
return arguments.mapNotNullTo(mutableSetOf()) { argument ->
|
||||
val targetExpression = argument as? FirQualifiedAccessExpression
|
||||
@@ -83,7 +83,7 @@ fun FirClassLikeSymbol<*>.getTargetAnnotation(session: FirSession): FirAnnotatio
|
||||
}
|
||||
|
||||
fun FirExpression.extractClassesFromArgument(session: FirSession): List<FirRegularClassSymbol> {
|
||||
return unwrapAndFlattenArgument().mapNotNull {
|
||||
return unwrapAndFlattenArgument(flattenArrays = true).mapNotNull {
|
||||
it.extractClassFromArgument(session)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -88,11 +88,11 @@ private fun FirAnnotation.findUseSiteTargets(): Set<AnnotationUseSiteTarget> = b
|
||||
|
||||
if (this@findUseSiteTargets is FirAnnotationCall) {
|
||||
for (arg in argumentList.arguments) {
|
||||
arg.unwrapAndFlattenArgument().forEach(::addIfMatching)
|
||||
arg.unwrapAndFlattenArgument(flattenArrays = true).forEach(::addIfMatching)
|
||||
}
|
||||
} else {
|
||||
argumentMapping.mapping[StandardClassIds.Annotations.ParameterNames.targetAllowedTargets]
|
||||
?.unwrapAndFlattenArgument()
|
||||
?.unwrapAndFlattenArgument(flattenArrays = true)
|
||||
?.forEach(::addIfMatching)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,12 +122,18 @@ fun <T : FirStatement> FirBlock.replaceFirstStatement(factory: (T) -> FirStateme
|
||||
|
||||
fun FirExpression.unwrapArgument(): FirExpression = (this as? FirWrappedArgumentExpression)?.expression ?: this
|
||||
|
||||
fun FirExpression.unwrapAndFlattenArgument(): List<FirExpression> = buildList { unwrapAndFlattenArgumentTo(this) }
|
||||
fun FirExpression.unwrapAndFlattenArgument(flattenArrays: Boolean): List<FirExpression> = buildList { unwrapAndFlattenArgumentTo(this, flattenArrays) }
|
||||
|
||||
private fun FirExpression.unwrapAndFlattenArgumentTo(list: MutableList<FirExpression>) {
|
||||
private fun FirExpression.unwrapAndFlattenArgumentTo(list: MutableList<FirExpression>, flattenArrays: Boolean) {
|
||||
when (val unwrapped = unwrapArgument()) {
|
||||
is FirArrayLiteral, is FirFunctionCall -> (unwrapped as FirCall).arguments.forEach { it.unwrapAndFlattenArgumentTo(list) }
|
||||
is FirVarargArgumentsExpression -> unwrapped.arguments.forEach { it.unwrapAndFlattenArgumentTo(list) }
|
||||
is FirArrayLiteral, is FirFunctionCall -> {
|
||||
if (flattenArrays) {
|
||||
(unwrapped as FirCall).arguments.forEach { it.unwrapAndFlattenArgumentTo(list, flattenArrays) }
|
||||
} else {
|
||||
list.add(unwrapped)
|
||||
}
|
||||
}
|
||||
is FirVarargArgumentsExpression -> unwrapped.arguments.forEach { it.unwrapAndFlattenArgumentTo(list, flattenArrays) }
|
||||
else -> list.add(unwrapped)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user