[FIR] Adapt AllOpenVisibilityTransformer to work with unresolved annotation arguments
This commit is contained in:
committed by
TeamCityServer
parent
e011ca183d
commit
84dab9230e
+5
-8
@@ -8,21 +8,19 @@ package org.jetbrains.kotlin.fir.plugin
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
|
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.arguments
|
import org.jetbrains.kotlin.fir.expressions.arguments
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension
|
import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension
|
||||||
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
|
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
|
||||||
import org.jetbrains.kotlin.fir.extensions.predicate.hasOrUnder
|
import org.jetbrains.kotlin.fir.extensions.predicate.hasOrUnder
|
||||||
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
|
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
|
||||||
import org.jetbrains.kotlin.fir.extensions.transform
|
import org.jetbrains.kotlin.fir.extensions.transform
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -59,10 +57,9 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx
|
|||||||
val annotation = annotations.firstOrNull {
|
val annotation = annotations.firstOrNull {
|
||||||
it.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag?.classId == AllPublicClassId
|
it.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag?.classId == AllPublicClassId
|
||||||
} as? FirAnnotationCall ?: return null
|
} as? FirAnnotationCall ?: return null
|
||||||
val argument = annotation.arguments.firstOrNull() as? FirQualifiedAccessExpression ?: return null
|
val argument = annotation.arguments.firstOrNull() as? FirPropertyAccessExpression ?: return null
|
||||||
val symbol = (argument.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol as? FirVariableSymbol<*> ?: return null
|
val reference = argument.calleeReference as? FirNamedReference ?: return null
|
||||||
val name = symbol.takeIf { it.containingClass()?.classId == VisibilityClassId }?.callableId?.callableName ?: return null
|
return when (reference.name) {
|
||||||
return when (name) {
|
|
||||||
PublicName -> Visibilities.Public
|
PublicName -> Visibilities.Public
|
||||||
InternalName -> Visibilities.Internal
|
InternalName -> Visibilities.Internal
|
||||||
PrivateName -> Visibilities.Private
|
PrivateName -> Visibilities.Private
|
||||||
|
|||||||
+16
-16
@@ -1,43 +1,43 @@
|
|||||||
FILE: visibilityTransformation.kt
|
FILE: visibilityTransformation.kt
|
||||||
@R|org/jetbrains/kotlin/fir/plugin/AllPublic|(visibility = Q|org/jetbrains/kotlin/fir/plugin/Visibility|.R|org/jetbrains/kotlin/fir/plugin/Visibility.Protected|) public final class A : R|kotlin/Any| {
|
@R|org/jetbrains/kotlin/fir/plugin/AllPublic|(visibility = Q|org/jetbrains/kotlin/fir/plugin/Visibility|.R|org/jetbrains/kotlin/fir/plugin/Visibility.Protected|) protected final class A : R|kotlin/Any| {
|
||||||
public constructor(): R|A| {
|
protected constructor(): R|A| {
|
||||||
super<R|kotlin/Any|>()
|
super<R|kotlin/Any|>()
|
||||||
}
|
}
|
||||||
|
|
||||||
public final val x: R|kotlin/String| = String()
|
protected final val x: R|kotlin/String| = String()
|
||||||
public get(): R|kotlin/String|
|
protected get(): R|kotlin/String|
|
||||||
|
|
||||||
public final fun foo(): R|kotlin/Unit| {
|
protected final fun foo(): R|kotlin/Unit| {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class Nested : R|kotlin/Any| {
|
protected final class Nested : R|kotlin/Any| {
|
||||||
public constructor(): R|A.Nested| {
|
protected constructor(): R|A.Nested| {
|
||||||
super<R|kotlin/Any|>()
|
super<R|kotlin/Any|>()
|
||||||
}
|
}
|
||||||
|
|
||||||
public final fun bar(): R|kotlin/Unit| {
|
protected final fun bar(): R|kotlin/Unit| {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@R|org/jetbrains/kotlin/fir/plugin/AllPublic|(visibility = Q|org/jetbrains/kotlin/fir/plugin/Visibility|.R|org/jetbrains/kotlin/fir/plugin/Visibility.Private|) public final class B : R|kotlin/Any| {
|
@R|org/jetbrains/kotlin/fir/plugin/AllPublic|(visibility = Q|org/jetbrains/kotlin/fir/plugin/Visibility|.R|org/jetbrains/kotlin/fir/plugin/Visibility.Private|) private final class B : R|kotlin/Any| {
|
||||||
public constructor(): R|B| {
|
private constructor(): R|B| {
|
||||||
super<R|kotlin/Any|>()
|
super<R|kotlin/Any|>()
|
||||||
}
|
}
|
||||||
|
|
||||||
public final val x: R|kotlin/String| = String()
|
private final val x: R|kotlin/String| = String()
|
||||||
public get(): R|kotlin/String|
|
private get(): R|kotlin/String|
|
||||||
|
|
||||||
public final fun foo(): R|kotlin/Unit| {
|
private final fun foo(): R|kotlin/Unit| {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class Nested : R|kotlin/Any| {
|
private final class Nested : R|kotlin/Any| {
|
||||||
public constructor(): R|B.Nested| {
|
private constructor(): R|B.Nested| {
|
||||||
super<R|kotlin/Any|>()
|
super<R|kotlin/Any|>()
|
||||||
}
|
}
|
||||||
|
|
||||||
public final fun bar(): R|kotlin/Unit| {
|
private final fun bar(): R|kotlin/Unit| {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -3,7 +3,7 @@ import org.jetbrains.kotlin.fir.plugin.Visibility
|
|||||||
|
|
||||||
@AllPublic(Visibility.Protected)
|
@AllPublic(Visibility.Protected)
|
||||||
class A {
|
class A {
|
||||||
val x: String
|
val x: String = ""
|
||||||
|
|
||||||
fun foo() {}
|
fun foo() {}
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ class A {
|
|||||||
|
|
||||||
@AllPublic(Visibility.Private)
|
@AllPublic(Visibility.Private)
|
||||||
class B {
|
class B {
|
||||||
val x: String
|
val x: String = ""
|
||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
|
|
||||||
@@ -27,4 +27,4 @@ class B {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user