Simplify JavaClassEnhancementScope: callback -> TypeInSignature
This commit is contained in:
+46
-32
@@ -182,15 +182,12 @@ class JavaClassEnhancementScope(
|
|||||||
typeQualifierResolver,
|
typeQualifierResolver,
|
||||||
// TODO: check me
|
// TODO: check me
|
||||||
parameterContainer = ownerFunction,
|
parameterContainer = ownerFunction,
|
||||||
methodContext = memberContext
|
methodContext = memberContext,
|
||||||
) {
|
typeInSignature = TypeInSignature.Receiver
|
||||||
it.receiverTypeRef!!
|
).enhance(jsr305State)
|
||||||
}.enhance(jsr305State)
|
|
||||||
return signatureParts.type
|
return signatureParts.type
|
||||||
}
|
}
|
||||||
|
|
||||||
private val FirTypedDeclaration.valueParameters: List<FirValueParameter> get() = (this as? FirFunction)?.valueParameters.orEmpty()
|
|
||||||
|
|
||||||
private fun enhanceValueParameterType(
|
private fun enhanceValueParameterType(
|
||||||
ownerFunction: FirJavaMethod,
|
ownerFunction: FirJavaMethod,
|
||||||
memberContext: FirJavaEnhancementContext,
|
memberContext: FirJavaEnhancementContext,
|
||||||
@@ -201,10 +198,9 @@ class JavaClassEnhancementScope(
|
|||||||
val signatureParts = ownerFunction.partsForValueParameter(
|
val signatureParts = ownerFunction.partsForValueParameter(
|
||||||
typeQualifierResolver,
|
typeQualifierResolver,
|
||||||
parameterContainer = ownerParameter,
|
parameterContainer = ownerParameter,
|
||||||
methodContext = memberContext
|
methodContext = memberContext,
|
||||||
) {
|
typeInSignature = TypeInSignature.ValueParameter(index)
|
||||||
it.valueParameters[index].returnTypeRef
|
).enhance(jsr305State, predefinedEnhancementInfo?.parametersInfo?.getOrNull(index))
|
||||||
}.enhance(jsr305State, predefinedEnhancementInfo?.parametersInfo?.getOrNull(index))
|
|
||||||
return signatureParts.type
|
return signatureParts.type
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,27 +215,12 @@ class JavaClassEnhancementScope(
|
|||||||
containerContext = memberContext,
|
containerContext = memberContext,
|
||||||
containerApplicabilityType =
|
containerApplicabilityType =
|
||||||
if (owner is FirJavaField) AnnotationTypeQualifierResolver.QualifierApplicabilityType.FIELD
|
if (owner is FirJavaField) AnnotationTypeQualifierResolver.QualifierApplicabilityType.FIELD
|
||||||
else AnnotationTypeQualifierResolver.QualifierApplicabilityType.METHOD_RETURN_TYPE
|
else AnnotationTypeQualifierResolver.QualifierApplicabilityType.METHOD_RETURN_TYPE,
|
||||||
) { it.returnTypeRef }.enhance(jsr305State, predefinedEnhancementInfo?.returnTypeInfo)
|
typeInSignature = TypeInSignature.Return
|
||||||
|
).enhance(jsr305State, predefinedEnhancementInfo?.returnTypeInfo)
|
||||||
return signatureParts.type
|
return signatureParts.type
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirCallableMember.partsForValueParameter(
|
|
||||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
|
||||||
// TODO: investigate if it's really can be a null (check properties' with extension overrides in Java)
|
|
||||||
parameterContainer: FirAnnotationContainer?,
|
|
||||||
methodContext: FirJavaEnhancementContext,
|
|
||||||
collector: (FirCallableMember) -> FirTypeRef
|
|
||||||
) = parts(
|
|
||||||
typeQualifierResolver,
|
|
||||||
parameterContainer, false,
|
|
||||||
parameterContainer?.let {
|
|
||||||
methodContext.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, it.annotations)
|
|
||||||
} ?: methodContext,
|
|
||||||
AnnotationTypeQualifierResolver.QualifierApplicabilityType.VALUE_PARAMETER,
|
|
||||||
collector
|
|
||||||
)
|
|
||||||
|
|
||||||
private val overriddenMemberCache = mutableMapOf<FirCallableMember, List<FirCallableMember>>()
|
private val overriddenMemberCache = mutableMapOf<FirCallableMember, List<FirCallableMember>>()
|
||||||
|
|
||||||
private fun FirCallableMember.overriddenMembers(): List<FirCallableMember> {
|
private fun FirCallableMember.overriddenMembers(): List<FirCallableMember> {
|
||||||
@@ -262,25 +243,58 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private sealed class TypeInSignature {
|
||||||
|
abstract fun getTypeRef(member: FirCallableMember): FirTypeRef
|
||||||
|
|
||||||
|
object Return : TypeInSignature() {
|
||||||
|
override fun getTypeRef(member: FirCallableMember): FirTypeRef = member.returnTypeRef
|
||||||
|
}
|
||||||
|
|
||||||
|
object Receiver : TypeInSignature() {
|
||||||
|
override fun getTypeRef(member: FirCallableMember): FirTypeRef = member.receiverTypeRef!!
|
||||||
|
}
|
||||||
|
|
||||||
|
class ValueParameter(val index: Int) : TypeInSignature() {
|
||||||
|
override fun getTypeRef(member: FirCallableMember): FirTypeRef = (member as FirFunction).valueParameters[index].returnTypeRef
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun FirCallableMember.partsForValueParameter(
|
||||||
|
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||||
|
// TODO: investigate if it's really can be a null (check properties' with extension overrides in Java)
|
||||||
|
parameterContainer: FirAnnotationContainer?,
|
||||||
|
methodContext: FirJavaEnhancementContext,
|
||||||
|
typeInSignature: TypeInSignature
|
||||||
|
) = parts(
|
||||||
|
typeQualifierResolver,
|
||||||
|
parameterContainer, false,
|
||||||
|
parameterContainer?.let {
|
||||||
|
methodContext.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, it.annotations)
|
||||||
|
} ?: methodContext,
|
||||||
|
AnnotationTypeQualifierResolver.QualifierApplicabilityType.VALUE_PARAMETER,
|
||||||
|
typeInSignature
|
||||||
|
)
|
||||||
|
|
||||||
private fun FirCallableMember.parts(
|
private fun FirCallableMember.parts(
|
||||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||||
typeContainer: FirAnnotationContainer?,
|
typeContainer: FirAnnotationContainer?,
|
||||||
isCovariant: Boolean,
|
isCovariant: Boolean,
|
||||||
containerContext: FirJavaEnhancementContext,
|
containerContext: FirJavaEnhancementContext,
|
||||||
containerApplicabilityType: AnnotationTypeQualifierResolver.QualifierApplicabilityType,
|
containerApplicabilityType: AnnotationTypeQualifierResolver.QualifierApplicabilityType,
|
||||||
collector: (FirCallableMember) -> FirTypeRef
|
typeInSignature: TypeInSignature
|
||||||
): EnhancementSignatureParts {
|
): EnhancementSignatureParts {
|
||||||
|
val typeRef = typeInSignature.getTypeRef(this)
|
||||||
return EnhancementSignatureParts(
|
return EnhancementSignatureParts(
|
||||||
typeQualifierResolver,
|
typeQualifierResolver,
|
||||||
typeContainer,
|
typeContainer,
|
||||||
collector(this) as FirJavaTypeRef,
|
typeRef as FirJavaTypeRef,
|
||||||
this.overriddenMembers().map {
|
this.overriddenMembers().map {
|
||||||
collector(it)
|
typeInSignature.getTypeRef(it)
|
||||||
},
|
},
|
||||||
isCovariant,
|
isCovariant,
|
||||||
// recompute default type qualifiers using type annotations
|
// recompute default type qualifiers using type annotations
|
||||||
containerContext.copyWithNewDefaultTypeQualifiers(
|
containerContext.copyWithNewDefaultTypeQualifiers(
|
||||||
typeQualifierResolver, jsr305State, collector(this).annotations
|
typeQualifierResolver, jsr305State, typeRef.annotations
|
||||||
),
|
),
|
||||||
containerApplicabilityType
|
containerApplicabilityType
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user