[FIR] FirAbstractBodyResolveTransformerDispatcher: refactor code
Extract transformation logic into expressionTransformation, declarationTransformation and controlFlowStatementsTransformation. This simplifies logic (we do not need to write ?: each time) and adds an one-place enter-point for transformations which can be used by LL FIR later. ^KT-56551
This commit is contained in:
committed by
Space Team
parent
9d2d75313b
commit
274d7ba47d
+449
-222
@@ -45,17 +45,32 @@ abstract class FirAbstractBodyResolveTransformerDispatcher(
|
|||||||
|
|
||||||
private val controlFlowStatementsTransformer = FirControlFlowStatementsResolveTransformer(this)
|
private val controlFlowStatementsTransformer = FirControlFlowStatementsResolveTransformer(this)
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: ResolutionMode): FirFile {
|
override fun transformFile(
|
||||||
return declarationsTransformer?.transformFile(file, data) ?: file
|
file: FirFile,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirFile = declarationTransformation(
|
||||||
|
file,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformFile,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformScript(script: FirScript, data: ResolutionMode): FirScript {
|
override fun transformScript(
|
||||||
return declarationsTransformer?.transformScript(script, data) ?: script
|
script: FirScript,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirScript = declarationTransformation(
|
||||||
|
script,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformScript,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformCodeFragment(codeFragment: FirCodeFragment, data: ResolutionMode): FirCodeFragment {
|
override fun transformCodeFragment(
|
||||||
return declarationsTransformer?.transformCodeFragment(codeFragment, data) ?: codeFragment
|
codeFragment: FirCodeFragment,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirCodeFragment = declarationTransformation(
|
||||||
|
codeFragment,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformCodeFragment,
|
||||||
|
)
|
||||||
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: ResolutionMode): E {
|
override fun <E : FirElement> transformElement(element: E, data: ResolutionMode): E {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
@@ -95,360 +110,572 @@ abstract class FirAbstractBodyResolveTransformerDispatcher(
|
|||||||
|
|
||||||
// ------------------------------------- Expressions -------------------------------------
|
// ------------------------------------- Expressions -------------------------------------
|
||||||
|
|
||||||
|
private inline fun <T : R, R> expressionTransformation(
|
||||||
|
expression: T,
|
||||||
|
data: ResolutionMode,
|
||||||
|
transformation: FirExpressionsResolveTransformer.(T, ResolutionMode) -> R,
|
||||||
|
): R {
|
||||||
|
return expressionsTransformer?.transformation(expression, data) ?: expression
|
||||||
|
}
|
||||||
|
|
||||||
override fun transformExpression(expression: FirExpression, data: ResolutionMode): FirStatement {
|
override fun transformExpression(expression: FirExpression, data: ResolutionMode): FirStatement {
|
||||||
return expressionsTransformer?.transformExpression(expression, data) ?: expression
|
return expressionTransformation(expression, data, FirExpressionsResolveTransformer::transformExpression)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformWrappedArgumentExpression(
|
override fun transformWrappedArgumentExpression(
|
||||||
wrappedArgumentExpression: FirWrappedArgumentExpression,
|
wrappedArgumentExpression: FirWrappedArgumentExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement {
|
||||||
return transformElement(wrappedArgumentExpression, data)
|
return transformElement(wrappedArgumentExpression, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformQualifiedAccessExpression(
|
override fun transformQualifiedAccessExpression(
|
||||||
qualifiedAccessExpression: FirQualifiedAccessExpression,
|
qualifiedAccessExpression: FirQualifiedAccessExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformQualifiedAccessExpression(qualifiedAccessExpression, data) ?: qualifiedAccessExpression
|
qualifiedAccessExpression,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformQualifiedAccessExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformPropertyAccessExpression(
|
override fun transformPropertyAccessExpression(
|
||||||
propertyAccessExpression: FirPropertyAccessExpression,
|
propertyAccessExpression: FirPropertyAccessExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformQualifiedAccessExpression(propertyAccessExpression, data) ?: propertyAccessExpression
|
propertyAccessExpression,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformQualifiedAccessExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformFunctionCall(functionCall: FirFunctionCall, data: ResolutionMode): FirStatement {
|
override fun transformFunctionCall(
|
||||||
return expressionsTransformer?.transformFunctionCall(functionCall, data) ?: functionCall
|
functionCall: FirFunctionCall,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
functionCall,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformFunctionCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: ResolutionMode): FirStatement {
|
override fun transformStringConcatenationCall(
|
||||||
return expressionsTransformer?.transformStringConcatenationCall(stringConcatenationCall, data) ?: stringConcatenationCall
|
stringConcatenationCall: FirStringConcatenationCall,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
stringConcatenationCall,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformStringConcatenationCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformCallableReferenceAccess(
|
override fun transformCallableReferenceAccess(
|
||||||
callableReferenceAccess: FirCallableReferenceAccess,
|
callableReferenceAccess: FirCallableReferenceAccess,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformCallableReferenceAccess(callableReferenceAccess, data) ?: callableReferenceAccess
|
callableReferenceAccess,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformCallableReferenceAccess,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformBlock(block: FirBlock, data: ResolutionMode): FirStatement {
|
override fun transformBlock(
|
||||||
return expressionsTransformer?.transformBlock(block, data) ?: block
|
block: FirBlock,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
block,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformBlock,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformThisReceiverExpression(
|
override fun transformThisReceiverExpression(
|
||||||
thisReceiverExpression: FirThisReceiverExpression,
|
thisReceiverExpression: FirThisReceiverExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformThisReceiverExpression(thisReceiverExpression, data) ?: thisReceiverExpression
|
thisReceiverExpression,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformThisReceiverExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformComparisonExpression(
|
override fun transformComparisonExpression(
|
||||||
comparisonExpression: FirComparisonExpression,
|
comparisonExpression: FirComparisonExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformComparisonExpression(comparisonExpression, data) ?: comparisonExpression
|
comparisonExpression,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformComparisonExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformTypeOperatorCall(
|
override fun transformTypeOperatorCall(
|
||||||
typeOperatorCall: FirTypeOperatorCall,
|
typeOperatorCall: FirTypeOperatorCall,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformTypeOperatorCall(typeOperatorCall, data) ?: typeOperatorCall
|
typeOperatorCall,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformTypeOperatorCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAssignmentOperatorStatement(
|
override fun transformAssignmentOperatorStatement(
|
||||||
assignmentOperatorStatement: FirAssignmentOperatorStatement,
|
assignmentOperatorStatement: FirAssignmentOperatorStatement,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformAssignmentOperatorStatement(assignmentOperatorStatement, data)
|
assignmentOperatorStatement,
|
||||||
?: assignmentOperatorStatement
|
data,
|
||||||
}
|
FirExpressionsResolveTransformer::transformAssignmentOperatorStatement,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformIncrementDecrementExpression(
|
override fun transformIncrementDecrementExpression(
|
||||||
incrementDecrementExpression: FirIncrementDecrementExpression,
|
incrementDecrementExpression: FirIncrementDecrementExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformIncrementDecrementExpression(incrementDecrementExpression, data)
|
incrementDecrementExpression,
|
||||||
?: incrementDecrementExpression
|
data,
|
||||||
}
|
FirExpressionsResolveTransformer::transformIncrementDecrementExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformEqualityOperatorCall(
|
override fun transformEqualityOperatorCall(
|
||||||
equalityOperatorCall: FirEqualityOperatorCall,
|
equalityOperatorCall: FirEqualityOperatorCall,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformEqualityOperatorCall(equalityOperatorCall, data) ?: equalityOperatorCall
|
equalityOperatorCall,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformEqualityOperatorCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformCheckNotNullCall(
|
override fun transformCheckNotNullCall(
|
||||||
checkNotNullCall: FirCheckNotNullCall,
|
checkNotNullCall: FirCheckNotNullCall,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformCheckNotNullCall(checkNotNullCall, data) ?: checkNotNullCall
|
checkNotNullCall,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformCheckNotNullCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformBinaryLogicExpression(
|
override fun transformBinaryLogicExpression(
|
||||||
binaryLogicExpression: FirBinaryLogicExpression,
|
binaryLogicExpression: FirBinaryLogicExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformBinaryLogicExpression(binaryLogicExpression, data) ?: binaryLogicExpression
|
binaryLogicExpression,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformBinaryLogicExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformDesugaredAssignmentValueReferenceExpression(
|
override fun transformDesugaredAssignmentValueReferenceExpression(
|
||||||
desugaredAssignmentValueReferenceExpression: FirDesugaredAssignmentValueReferenceExpression,
|
desugaredAssignmentValueReferenceExpression: FirDesugaredAssignmentValueReferenceExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformDesugaredAssignmentValueReferenceExpression(
|
desugaredAssignmentValueReferenceExpression,
|
||||||
desugaredAssignmentValueReferenceExpression,
|
data,
|
||||||
data,
|
FirExpressionsResolveTransformer::transformDesugaredAssignmentValueReferenceExpression,
|
||||||
) ?: desugaredAssignmentValueReferenceExpression
|
)
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformVariableAssignment(
|
override fun transformVariableAssignment(
|
||||||
variableAssignment: FirVariableAssignment,
|
variableAssignment: FirVariableAssignment,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformVariableAssignment(variableAssignment, data) ?: variableAssignment
|
variableAssignment,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformVariableAssignment,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformGetClassCall(getClassCall: FirGetClassCall, data: ResolutionMode): FirStatement {
|
override fun transformGetClassCall(
|
||||||
return expressionsTransformer?.transformGetClassCall(getClassCall, data) ?: getClassCall
|
getClassCall: FirGetClassCall,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
getClassCall,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformGetClassCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformWrappedDelegateExpression(
|
override fun transformWrappedDelegateExpression(
|
||||||
wrappedDelegateExpression: FirWrappedDelegateExpression,
|
wrappedDelegateExpression: FirWrappedDelegateExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = declarationTransformation(
|
||||||
return declarationsTransformer?.transformWrappedDelegateExpression(wrappedDelegateExpression, data) ?: wrappedDelegateExpression
|
wrappedDelegateExpression,
|
||||||
}
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformWrappedDelegateExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun <T> transformConstExpression(
|
override fun <T> transformConstExpression(
|
||||||
constExpression: FirConstExpression<T>,
|
constExpression: FirConstExpression<T>,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformConstExpression(constExpression, data) ?: constExpression
|
constExpression,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformConstExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAnnotation(annotation: FirAnnotation, data: ResolutionMode): FirStatement {
|
override fun transformAnnotation(
|
||||||
return expressionsTransformer?.transformAnnotation(annotation, data) ?: annotation
|
annotation: FirAnnotation,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
annotation,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformAnnotation,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): FirStatement {
|
override fun transformAnnotationCall(
|
||||||
return expressionsTransformer?.transformAnnotationCall(annotationCall, data) ?: annotationCall
|
annotationCall: FirAnnotationCall,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
annotationCall,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformAnnotationCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformErrorAnnotationCall(errorAnnotationCall: FirErrorAnnotationCall, data: ResolutionMode): FirStatement {
|
override fun transformErrorAnnotationCall(
|
||||||
return expressionsTransformer?.transformErrorAnnotationCall(errorAnnotationCall, data) ?: errorAnnotationCall
|
errorAnnotationCall: FirErrorAnnotationCall,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
errorAnnotationCall,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformErrorAnnotationCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformDelegatedConstructorCall(
|
override fun transformDelegatedConstructorCall(
|
||||||
delegatedConstructorCall: FirDelegatedConstructorCall,
|
delegatedConstructorCall: FirDelegatedConstructorCall,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformDelegatedConstructorCall(delegatedConstructorCall, data) ?: delegatedConstructorCall
|
delegatedConstructorCall,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformDelegatedConstructorCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAugmentedArraySetCall(
|
override fun transformAugmentedArraySetCall(
|
||||||
augmentedArraySetCall: FirAugmentedArraySetCall,
|
augmentedArraySetCall: FirAugmentedArraySetCall,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformAugmentedArraySetCall(augmentedArraySetCall, data) ?: augmentedArraySetCall
|
augmentedArraySetCall,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformAugmentedArraySetCall,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformSafeCallExpression(
|
override fun transformSafeCallExpression(
|
||||||
safeCallExpression: FirSafeCallExpression,
|
safeCallExpression: FirSafeCallExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformSafeCallExpression(safeCallExpression, data) ?: safeCallExpression
|
safeCallExpression,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformSafeCallExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformCheckedSafeCallSubject(
|
override fun transformCheckedSafeCallSubject(
|
||||||
checkedSafeCallSubject: FirCheckedSafeCallSubject,
|
checkedSafeCallSubject: FirCheckedSafeCallSubject,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformCheckedSafeCallSubject(checkedSafeCallSubject, data) ?: checkedSafeCallSubject
|
checkedSafeCallSubject,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformCheckedSafeCallSubject,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformArrayLiteral(arrayLiteral: FirArrayLiteral, data: ResolutionMode): FirStatement {
|
override fun transformArrayLiteral(
|
||||||
return expressionsTransformer?.transformArrayLiteral(arrayLiteral, data) ?: arrayLiteral
|
arrayLiteral: FirArrayLiteral,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
arrayLiteral,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformArrayLiteral,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformSmartCastExpression(smartCastExpression: FirSmartCastExpression, data: ResolutionMode): FirStatement {
|
override fun transformSmartCastExpression(
|
||||||
return expressionsTransformer?.transformSmartCastExpression(smartCastExpression, data) ?: smartCastExpression
|
smartCastExpression: FirSmartCastExpression,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = expressionTransformation(
|
||||||
|
smartCastExpression,
|
||||||
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformSmartCastExpression,
|
||||||
|
)
|
||||||
|
|
||||||
// ------------------------------------- Declarations -------------------------------------
|
// ------------------------------------- Declarations -------------------------------------
|
||||||
|
|
||||||
override fun transformDeclaration(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration {
|
private inline fun <T : R, R : FirElement> declarationTransformation(
|
||||||
return declarationsTransformer?.transformDeclaration(declaration, data) ?: declaration
|
declaration: T,
|
||||||
|
data: ResolutionMode,
|
||||||
|
transformation: FirDeclarationsResolveTransformer.(T, ResolutionMode) -> R,
|
||||||
|
): R {
|
||||||
|
return declarationsTransformer?.transformation(declaration, data) ?: declaration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun transformDeclaration(
|
||||||
|
declaration: FirDeclaration,
|
||||||
|
data: ResolutionMode,
|
||||||
|
): FirDeclaration = declarationTransformation(
|
||||||
|
declaration,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformDeclaration,
|
||||||
|
)
|
||||||
|
|
||||||
open fun transformDeclarationContent(
|
open fun transformDeclarationContent(
|
||||||
declaration: FirDeclaration, data: ResolutionMode
|
declaration: FirDeclaration, data: ResolutionMode,
|
||||||
): FirDeclaration {
|
): FirDeclaration {
|
||||||
return transformElement(declaration, data)
|
return transformElement(declaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformDeclarationStatus(
|
override fun transformDeclarationStatus(
|
||||||
declarationStatus: FirDeclarationStatus,
|
declarationStatus: FirDeclarationStatus,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirDeclarationStatus {
|
): FirDeclarationStatus = declarationTransformation(
|
||||||
return declarationsTransformer?.transformDeclarationStatus(declarationStatus, data) ?: declarationStatus
|
declarationStatus,
|
||||||
}
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformDeclarationStatus,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry {
|
override fun transformEnumEntry(
|
||||||
return declarationsTransformer?.transformEnumEntry(enumEntry, data) ?: enumEntry
|
enumEntry: FirEnumEntry,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirEnumEntry = declarationTransformation(
|
||||||
|
enumEntry,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformEnumEntry,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformProperty(property: FirProperty, data: ResolutionMode): FirProperty {
|
override fun transformProperty(
|
||||||
return declarationsTransformer?.transformProperty(property, data) ?: property
|
property: FirProperty,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirProperty = declarationTransformation(
|
||||||
|
property,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformProperty,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: ResolutionMode): FirStatement {
|
override fun transformPropertyAccessor(
|
||||||
return declarationsTransformer?.transformPropertyAccessor(propertyAccessor, data) ?: propertyAccessor
|
propertyAccessor: FirPropertyAccessor,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirPropertyAccessor = declarationTransformation(
|
||||||
|
propertyAccessor,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformPropertyAccessor,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformBackingField(
|
override fun transformBackingField(
|
||||||
backingField: FirBackingField,
|
backingField: FirBackingField,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirBackingField = declarationTransformation(
|
||||||
return declarationsTransformer?.transformBackingField(backingField, data) ?: backingField
|
backingField,
|
||||||
}
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformBackingField,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformField(field: FirField, data: ResolutionMode): FirField {
|
override fun transformField(
|
||||||
return declarationsTransformer?.transformField(field, data) ?: field
|
field: FirField,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirField = declarationTransformation(
|
||||||
|
field,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformField,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement {
|
override fun transformRegularClass(
|
||||||
return declarationsTransformer?.transformRegularClass(regularClass, data) ?: regularClass
|
regularClass: FirRegularClass,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirRegularClass = declarationTransformation(
|
||||||
|
regularClass,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformRegularClass,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAnonymousObject(
|
override fun transformAnonymousObject(
|
||||||
anonymousObject: FirAnonymousObject,
|
anonymousObject: FirAnonymousObject,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = declarationTransformation(
|
||||||
return declarationsTransformer?.transformAnonymousObject(anonymousObject, data) ?: anonymousObject
|
anonymousObject,
|
||||||
}
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformAnonymousObject,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAnonymousObjectExpression(
|
override fun transformAnonymousObjectExpression(
|
||||||
anonymousObjectExpression: FirAnonymousObjectExpression,
|
anonymousObjectExpression: FirAnonymousObjectExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformAnonymousObjectExpression(anonymousObjectExpression, data) ?: anonymousObjectExpression
|
anonymousObjectExpression,
|
||||||
}
|
data,
|
||||||
|
FirExpressionsResolveTransformer::transformAnonymousObjectExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformSimpleFunction(
|
override fun transformSimpleFunction(
|
||||||
simpleFunction: FirSimpleFunction,
|
simpleFunction: FirSimpleFunction,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirSimpleFunction {
|
): FirSimpleFunction = declarationTransformation(
|
||||||
return declarationsTransformer?.transformSimpleFunction(simpleFunction, data) ?: simpleFunction
|
simpleFunction,
|
||||||
}
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformSimpleFunction,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformFunction(
|
override fun transformFunction(
|
||||||
function: FirFunction,
|
function: FirFunction,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirFunction = declarationTransformation(
|
||||||
return declarationsTransformer?.transformFunction(function, data) ?: function
|
function,
|
||||||
}
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformFunction,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor {
|
override fun transformConstructor(
|
||||||
return declarationsTransformer?.transformConstructor(constructor, data) ?: constructor
|
constructor: FirConstructor,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirConstructor = declarationTransformation(
|
||||||
|
constructor,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformConstructor,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode): FirStatement {
|
override fun transformErrorPrimaryConstructor(
|
||||||
return declarationsTransformer?.transformErrorPrimaryConstructor(errorPrimaryConstructor, data) ?: errorPrimaryConstructor
|
errorPrimaryConstructor: FirErrorPrimaryConstructor,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirErrorPrimaryConstructor = declarationTransformation(
|
||||||
|
errorPrimaryConstructor,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformErrorPrimaryConstructor,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAnonymousInitializer(
|
override fun transformAnonymousInitializer(
|
||||||
anonymousInitializer: FirAnonymousInitializer,
|
anonymousInitializer: FirAnonymousInitializer,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirAnonymousInitializer {
|
): FirAnonymousInitializer = declarationTransformation(
|
||||||
return declarationsTransformer?.transformAnonymousInitializer(anonymousInitializer, data) ?: anonymousInitializer
|
anonymousInitializer,
|
||||||
}
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformAnonymousInitializer,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAnonymousFunction(
|
override fun transformAnonymousFunction(
|
||||||
anonymousFunction: FirAnonymousFunction,
|
anonymousFunction: FirAnonymousFunction,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirAnonymousFunction = declarationTransformation(
|
||||||
return declarationsTransformer?.transformAnonymousFunction(anonymousFunction, data) ?: anonymousFunction
|
anonymousFunction,
|
||||||
}
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformAnonymousFunction,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformAnonymousFunctionExpression(
|
override fun transformAnonymousFunctionExpression(
|
||||||
anonymousFunctionExpression: FirAnonymousFunctionExpression,
|
anonymousFunctionExpression: FirAnonymousFunctionExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = expressionTransformation(
|
||||||
return expressionsTransformer?.transformAnonymousFunctionExpression(anonymousFunctionExpression, data)
|
anonymousFunctionExpression,
|
||||||
?: anonymousFunctionExpression
|
data,
|
||||||
}
|
FirExpressionsResolveTransformer::transformAnonymousFunctionExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement {
|
override fun transformValueParameter(
|
||||||
return declarationsTransformer?.transformValueParameter(valueParameter, data) ?: valueParameter
|
valueParameter: FirValueParameter,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirValueParameter = declarationTransformation(
|
||||||
|
valueParameter,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformValueParameter,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias {
|
override fun transformTypeAlias(
|
||||||
return declarationsTransformer?.transformTypeAlias(typeAlias, data) ?: typeAlias
|
typeAlias: FirTypeAlias,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirTypeAlias = declarationTransformation(
|
||||||
|
typeAlias,
|
||||||
|
data,
|
||||||
|
FirDeclarationsResolveTransformer::transformTypeAlias,
|
||||||
|
)
|
||||||
|
|
||||||
// ------------------------------------- Control flow statements -------------------------------------
|
// ------------------------------------- Control flow statements -------------------------------------
|
||||||
|
|
||||||
override fun transformWhileLoop(whileLoop: FirWhileLoop, data: ResolutionMode): FirStatement {
|
private inline fun <T, R> controlFlowStatementsTransformation(
|
||||||
return controlFlowStatementsTransformer.transformWhileLoop(whileLoop, data)
|
declaration: T,
|
||||||
|
data: ResolutionMode,
|
||||||
|
transformation: FirControlFlowStatementsResolveTransformer.(T, ResolutionMode) -> R,
|
||||||
|
): R {
|
||||||
|
return controlFlowStatementsTransformer.transformation(declaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: ResolutionMode): FirStatement {
|
override fun transformWhileLoop(
|
||||||
return controlFlowStatementsTransformer.transformDoWhileLoop(doWhileLoop, data)
|
whileLoop: FirWhileLoop,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
|
whileLoop,
|
||||||
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformWhileLoop,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformWhenExpression(whenExpression: FirWhenExpression, data: ResolutionMode): FirStatement {
|
override fun transformDoWhileLoop(
|
||||||
return controlFlowStatementsTransformer.transformWhenExpression(whenExpression, data)
|
doWhileLoop: FirDoWhileLoop,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
|
doWhileLoop,
|
||||||
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformDoWhileLoop,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformWhenBranch(whenBranch: FirWhenBranch, data: ResolutionMode): FirWhenBranch {
|
override fun transformWhenExpression(
|
||||||
return controlFlowStatementsTransformer.transformWhenBranch(whenBranch, data)
|
whenExpression: FirWhenExpression,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
|
whenExpression,
|
||||||
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformWhenExpression,
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun transformWhenBranch(
|
||||||
|
whenBranch: FirWhenBranch,
|
||||||
|
data: ResolutionMode,
|
||||||
|
): FirWhenBranch = controlFlowStatementsTransformation(
|
||||||
|
whenBranch,
|
||||||
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformWhenBranch,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformWhenSubjectExpression(
|
override fun transformWhenSubjectExpression(
|
||||||
whenSubjectExpression: FirWhenSubjectExpression,
|
whenSubjectExpression: FirWhenSubjectExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
return controlFlowStatementsTransformer.transformWhenSubjectExpression(whenSubjectExpression, data)
|
whenSubjectExpression,
|
||||||
}
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformWhenSubjectExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformTryExpression(tryExpression: FirTryExpression, data: ResolutionMode): FirStatement {
|
override fun transformTryExpression(
|
||||||
return controlFlowStatementsTransformer.transformTryExpression(tryExpression, data)
|
tryExpression: FirTryExpression,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
|
tryExpression,
|
||||||
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformTryExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformCatch(catch: FirCatch, data: ResolutionMode): FirCatch {
|
override fun transformCatch(
|
||||||
return controlFlowStatementsTransformer.transformCatch(catch, data)
|
catch: FirCatch,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirCatch = controlFlowStatementsTransformation(
|
||||||
|
catch,
|
||||||
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformCatch,
|
||||||
|
)
|
||||||
|
|
||||||
override fun <E : FirTargetElement> transformJump(jump: FirJump<E>, data: ResolutionMode): FirStatement {
|
override fun <E : FirTargetElement> transformJump(
|
||||||
return controlFlowStatementsTransformer.transformJump(jump, data)
|
jump: FirJump<E>,
|
||||||
}
|
data: ResolutionMode,
|
||||||
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
|
jump,
|
||||||
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformJump,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformReturnExpression(
|
override fun transformReturnExpression(
|
||||||
returnExpression: FirReturnExpression,
|
returnExpression: FirReturnExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
return controlFlowStatementsTransformer.transformReturnExpression(returnExpression, data)
|
returnExpression,
|
||||||
}
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformReturnExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformThrowExpression(
|
override fun transformThrowExpression(
|
||||||
throwExpression: FirThrowExpression,
|
throwExpression: FirThrowExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
return controlFlowStatementsTransformer.transformThrowExpression(throwExpression, data)
|
throwExpression,
|
||||||
}
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformThrowExpression,
|
||||||
|
)
|
||||||
|
|
||||||
override fun transformElvisExpression(
|
override fun transformElvisExpression(
|
||||||
elvisExpression: FirElvisExpression,
|
elvisExpression: FirElvisExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode,
|
||||||
): FirStatement {
|
): FirStatement = controlFlowStatementsTransformation(
|
||||||
return controlFlowStatementsTransformer.transformElvisExpression(elvisExpression, data)
|
elvisExpression,
|
||||||
}
|
data,
|
||||||
|
FirControlFlowStatementsResolveTransformer::transformElvisExpression,
|
||||||
|
)
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
+12
-10
@@ -325,7 +325,7 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
dataFlowAnalyzer.exitDelegateExpression(delegate)
|
dataFlowAnalyzer.exitDelegateExpression(delegate)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: ResolutionMode): FirStatement {
|
override fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: ResolutionMode): FirPropertyAccessor {
|
||||||
return propertyAccessor.also {
|
return propertyAccessor.also {
|
||||||
transformProperty(it.propertySymbol.fir, data)
|
transformProperty(it.propertySymbol.fir, data)
|
||||||
}
|
}
|
||||||
@@ -604,7 +604,7 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
override fun transformRegularClass(
|
override fun transformRegularClass(
|
||||||
regularClass: FirRegularClass,
|
regularClass: FirRegularClass,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement =
|
): FirRegularClass =
|
||||||
whileAnalysing(session, regularClass) {
|
whileAnalysing(session, regularClass) {
|
||||||
return context.withContainingClass(regularClass) {
|
return context.withContainingClass(regularClass) {
|
||||||
if (regularClass.isLocal && regularClass !in context.targetedLocalClasses) {
|
if (regularClass.isLocal && regularClass !in context.targetedLocalClasses) {
|
||||||
@@ -705,7 +705,7 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
override fun transformAnonymousObject(
|
override fun transformAnonymousObject(
|
||||||
anonymousObject: FirAnonymousObject,
|
anonymousObject: FirAnonymousObject,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement = whileAnalysing(session, anonymousObject) {
|
): FirAnonymousObject = whileAnalysing(session, anonymousObject) {
|
||||||
if (anonymousObject !in context.targetedLocalClasses) {
|
if (anonymousObject !in context.targetedLocalClasses) {
|
||||||
return anonymousObject.runAllPhasesForLocalClass(transformer, components, data, transformer.firResolveContextCollector)
|
return anonymousObject.runAllPhasesForLocalClass(transformer, components, data, transformer.firResolveContextCollector)
|
||||||
}
|
}
|
||||||
@@ -785,14 +785,14 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
override fun transformFunction(
|
override fun transformFunction(
|
||||||
function: FirFunction,
|
function: FirFunction,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement = whileAnalysing(session, function) {
|
): FirFunction = whileAnalysing(session, function) {
|
||||||
if (function.bodyResolved) return function
|
if (function.bodyResolved) return function
|
||||||
dataFlowAnalyzer.enterFunction(function)
|
dataFlowAnalyzer.enterFunction(function)
|
||||||
return transformDeclarationContent(function, data).also {
|
return transformDeclarationContent(function, data).also {
|
||||||
val result = it as FirFunction
|
val result = it as FirFunction
|
||||||
val controlFlowGraphReference = dataFlowAnalyzer.exitFunction(result)
|
val controlFlowGraphReference = dataFlowAnalyzer.exitFunction(result)
|
||||||
result.replaceControlFlowGraphReference(controlFlowGraphReference)
|
result.replaceControlFlowGraphReference(controlFlowGraphReference)
|
||||||
} as FirStatement
|
} as FirFunction
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor =
|
override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor =
|
||||||
@@ -809,8 +809,10 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
return doTransformConstructor(constructor, data)
|
return doTransformConstructor(constructor, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) =
|
override fun transformErrorPrimaryConstructor(
|
||||||
transformConstructor(errorPrimaryConstructor, data)
|
errorPrimaryConstructor: FirErrorPrimaryConstructor,
|
||||||
|
data: ResolutionMode,
|
||||||
|
): FirErrorPrimaryConstructor = transformConstructor(errorPrimaryConstructor, data) as FirErrorPrimaryConstructor
|
||||||
|
|
||||||
private fun doTransformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor {
|
private fun doTransformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor {
|
||||||
val owningClass = context.containerIfAny as? FirRegularClass
|
val owningClass = context.containerIfAny as? FirRegularClass
|
||||||
@@ -863,7 +865,7 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
override fun transformValueParameter(
|
override fun transformValueParameter(
|
||||||
valueParameter: FirValueParameter,
|
valueParameter: FirValueParameter,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement = whileAnalysing(session, valueParameter) {
|
): FirValueParameter = whileAnalysing(session, valueParameter) {
|
||||||
dataFlowAnalyzer.enterValueParameter(valueParameter)
|
dataFlowAnalyzer.enterValueParameter(valueParameter)
|
||||||
val result = context.withValueParameter(valueParameter, session) {
|
val result = context.withValueParameter(valueParameter, session) {
|
||||||
transformDeclarationContent(
|
transformDeclarationContent(
|
||||||
@@ -882,7 +884,7 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
override fun transformAnonymousFunction(
|
override fun transformAnonymousFunction(
|
||||||
anonymousFunction: FirAnonymousFunction,
|
anonymousFunction: FirAnonymousFunction,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement = whileAnalysing(session, anonymousFunction) {
|
): FirAnonymousFunction = whileAnalysing(session, anonymousFunction) {
|
||||||
// Either ContextDependent, ContextIndependent or WithExpectedType could be here
|
// Either ContextDependent, ContextIndependent or WithExpectedType could be here
|
||||||
anonymousFunction.transformAnnotations(transformer, ResolutionMode.ContextIndependent)
|
anonymousFunction.transformAnnotations(transformer, ResolutionMode.ContextIndependent)
|
||||||
if (data !is ResolutionMode.LambdaResolution) {
|
if (data !is ResolutionMode.LambdaResolution) {
|
||||||
@@ -1079,7 +1081,7 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
override fun transformBackingField(
|
override fun transformBackingField(
|
||||||
backingField: FirBackingField,
|
backingField: FirBackingField,
|
||||||
data: ResolutionMode,
|
data: ResolutionMode,
|
||||||
): FirStatement = whileAnalysing(session, backingField) {
|
): FirBackingField = whileAnalysing(session, backingField) {
|
||||||
val propertyType = data.expectedType
|
val propertyType = data.expectedType
|
||||||
val initializerData = when {
|
val initializerData = when {
|
||||||
backingField.returnTypeRef is FirResolvedTypeRef -> withExpectedType(backingField.returnTypeRef)
|
backingField.returnTypeRef is FirResolvedTypeRef -> withExpectedType(backingField.returnTypeRef)
|
||||||
|
|||||||
+6
-4
@@ -265,7 +265,7 @@ abstract class FirAbstractContractResolveTransformerDispatcher(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement {
|
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirRegularClass {
|
||||||
return withRegularClass(regularClass) {
|
return withRegularClass(regularClass) {
|
||||||
transformDeclarationContent(regularClass, data)
|
transformDeclarationContent(regularClass, data)
|
||||||
regularClass
|
regularClass
|
||||||
@@ -281,7 +281,7 @@ abstract class FirAbstractContractResolveTransformerDispatcher(
|
|||||||
override fun transformAnonymousObject(
|
override fun transformAnonymousObject(
|
||||||
anonymousObject: FirAnonymousObject,
|
anonymousObject: FirAnonymousObject,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement {
|
): FirAnonymousObject {
|
||||||
context.withAnonymousObject(anonymousObject, components) {
|
context.withAnonymousObject(anonymousObject, components) {
|
||||||
transformDeclarationContent(anonymousObject, data)
|
transformDeclarationContent(anonymousObject, data)
|
||||||
}
|
}
|
||||||
@@ -306,8 +306,10 @@ abstract class FirAbstractContractResolveTransformerDispatcher(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) =
|
override fun transformErrorPrimaryConstructor(
|
||||||
transformConstructor(errorPrimaryConstructor, data)
|
errorPrimaryConstructor: FirErrorPrimaryConstructor,
|
||||||
|
data: ResolutionMode,
|
||||||
|
): FirErrorPrimaryConstructor = transformConstructor(errorPrimaryConstructor, data) as FirErrorPrimaryConstructor
|
||||||
|
|
||||||
override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry {
|
override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry {
|
||||||
return enumEntry
|
return enumEntry
|
||||||
|
|||||||
+8
-6
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.transformers.plugin
|
package org.jetbrains.kotlin.fir.resolve.transformers.plugin
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.util.PrivateForInline
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirErrorAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirErrorAnnotationCall
|
||||||
@@ -17,6 +16,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||||
|
import org.jetbrains.kotlin.util.PrivateForInline
|
||||||
|
|
||||||
open class FirAnnotationArgumentsMappingTransformer(
|
open class FirAnnotationArgumentsMappingTransformer(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
@@ -91,7 +91,7 @@ private class FirDeclarationsResolveTransformerForAnnotationArgumentsMapping(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement {
|
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirRegularClass {
|
||||||
regularClass.transformAnnotations(this, data)
|
regularClass.transformAnnotations(this, data)
|
||||||
doTransformTypeParameters(regularClass)
|
doTransformTypeParameters(regularClass)
|
||||||
regularClass.transformSuperTypeRefs(this, data)
|
regularClass.transformSuperTypeRefs(this, data)
|
||||||
@@ -154,10 +154,12 @@ private class FirDeclarationsResolveTransformerForAnnotationArgumentsMapping(
|
|||||||
return constructor
|
return constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) =
|
override fun transformErrorPrimaryConstructor(
|
||||||
transformConstructor(errorPrimaryConstructor, data)
|
errorPrimaryConstructor: FirErrorPrimaryConstructor,
|
||||||
|
data: ResolutionMode,
|
||||||
|
): FirErrorPrimaryConstructor = transformConstructor(errorPrimaryConstructor, data) as FirErrorPrimaryConstructor
|
||||||
|
|
||||||
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement {
|
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirValueParameter {
|
||||||
context.withValueParameter(valueParameter, session) {
|
context.withValueParameter(valueParameter, session) {
|
||||||
valueParameter
|
valueParameter
|
||||||
.transformAnnotations(transformer, data)
|
.transformAnnotations(transformer, data)
|
||||||
@@ -220,7 +222,7 @@ private class FirDeclarationsResolveTransformerForAnnotationArgumentsMapping(
|
|||||||
return field
|
return field
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformBackingField(backingField: FirBackingField, data: ResolutionMode): FirStatement {
|
override fun transformBackingField(backingField: FirBackingField, data: ResolutionMode): FirBackingField {
|
||||||
backingField.transformAnnotations(transformer, data)
|
backingField.transformAnnotations(transformer, data)
|
||||||
return backingField
|
return backingField
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-4
@@ -61,7 +61,7 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement {
|
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirRegularClass {
|
||||||
regularClass.transformAnnotations(this, data)
|
regularClass.transformAnnotations(this, data)
|
||||||
withRegularClass(regularClass) {
|
withRegularClass(regularClass) {
|
||||||
regularClass
|
regularClass
|
||||||
@@ -109,10 +109,12 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations(
|
|||||||
return constructor
|
return constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) =
|
override fun transformErrorPrimaryConstructor(
|
||||||
transformConstructor(errorPrimaryConstructor, data)
|
errorPrimaryConstructor: FirErrorPrimaryConstructor,
|
||||||
|
data: ResolutionMode,
|
||||||
|
): FirErrorPrimaryConstructor = transformConstructor(errorPrimaryConstructor, data) as FirErrorPrimaryConstructor
|
||||||
|
|
||||||
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement {
|
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirValueParameter {
|
||||||
valueParameter
|
valueParameter
|
||||||
.transformAnnotations(transformer, data)
|
.transformAnnotations(transformer, data)
|
||||||
.transformReturnTypeRef(transformer, data)
|
.transformReturnTypeRef(transformer, data)
|
||||||
|
|||||||
Reference in New Issue
Block a user