[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) {
|
if (this@findFromRawArguments is FirAnnotationCall) {
|
||||||
for (arg in argumentList.arguments) {
|
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> {
|
fun FirClassLikeSymbol<*>.getAllowedAnnotationTargets(session: FirSession): Set<KotlinTarget> {
|
||||||
lazyResolveToPhase(FirResolvePhase.ANNOTATION_ARGUMENTS)
|
lazyResolveToPhase(FirResolvePhase.ANNOTATION_ARGUMENTS)
|
||||||
val targetAnnotation = getTargetAnnotation(session) ?: return defaultAnnotationTargets
|
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 ->
|
return arguments.mapNotNullTo(mutableSetOf()) { argument ->
|
||||||
val targetExpression = argument as? FirQualifiedAccessExpression
|
val targetExpression = argument as? FirQualifiedAccessExpression
|
||||||
@@ -83,7 +83,7 @@ fun FirClassLikeSymbol<*>.getTargetAnnotation(session: FirSession): FirAnnotatio
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun FirExpression.extractClassesFromArgument(session: FirSession): List<FirRegularClassSymbol> {
|
fun FirExpression.extractClassesFromArgument(session: FirSession): List<FirRegularClassSymbol> {
|
||||||
return unwrapAndFlattenArgument().mapNotNull {
|
return unwrapAndFlattenArgument(flattenArrays = true).mapNotNull {
|
||||||
it.extractClassFromArgument(session)
|
it.extractClassFromArgument(session)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -88,11 +88,11 @@ private fun FirAnnotation.findUseSiteTargets(): Set<AnnotationUseSiteTarget> = b
|
|||||||
|
|
||||||
if (this@findUseSiteTargets is FirAnnotationCall) {
|
if (this@findUseSiteTargets is FirAnnotationCall) {
|
||||||
for (arg in argumentList.arguments) {
|
for (arg in argumentList.arguments) {
|
||||||
arg.unwrapAndFlattenArgument().forEach(::addIfMatching)
|
arg.unwrapAndFlattenArgument(flattenArrays = true).forEach(::addIfMatching)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
argumentMapping.mapping[StandardClassIds.Annotations.ParameterNames.targetAllowedTargets]
|
argumentMapping.mapping[StandardClassIds.Annotations.ParameterNames.targetAllowedTargets]
|
||||||
?.unwrapAndFlattenArgument()
|
?.unwrapAndFlattenArgument(flattenArrays = true)
|
||||||
?.forEach(::addIfMatching)
|
?.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.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()) {
|
when (val unwrapped = unwrapArgument()) {
|
||||||
is FirArrayLiteral, is FirFunctionCall -> (unwrapped as FirCall).arguments.forEach { it.unwrapAndFlattenArgumentTo(list) }
|
is FirArrayLiteral, is FirFunctionCall -> {
|
||||||
is FirVarargArgumentsExpression -> unwrapped.arguments.forEach { it.unwrapAndFlattenArgumentTo(list) }
|
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)
|
else -> list.add(unwrapped)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user