Summarize methods that convert value parameter nodes
This commit is contained in:
committed by
Mikhail Glukhikh
parent
5fc3367c25
commit
bbf7263ddc
@@ -301,7 +301,7 @@ class Converter(
|
|||||||
//parse properties
|
//parse properties
|
||||||
val properties = primaryConstructor
|
val properties = primaryConstructor
|
||||||
.getChildNodesByType(VALUE_PARAMETER_LIST)
|
.getChildNodesByType(VALUE_PARAMETER_LIST)
|
||||||
.flatMap { convertClassParameters(it) }
|
.flatMap { convertValueParameters(it) }
|
||||||
.filter { it.hasValOrVar() }
|
.filter { it.hasValOrVar() }
|
||||||
.map { it.toFirProperty() }
|
.map { it.toFirProperty() }
|
||||||
firClass.addDeclarations(properties)
|
firClass.addDeclarations(properties)
|
||||||
@@ -335,7 +335,7 @@ class Converter(
|
|||||||
primaryConstructor?.forEachChildren {
|
primaryConstructor?.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
||||||
VALUE_PARAMETER_LIST -> valueParameters += convertClassParameters(it)
|
VALUE_PARAMETER_LIST -> valueParameters += convertValueParameters(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,28 +363,22 @@ class Converter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private fun convertValueParameters(valueParameters: LighterASTNode): List<ValueParameter> {
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseValueParameterList
|
return valueParameters.forEachChildrenReturnList { node, container ->
|
||||||
*/
|
|
||||||
private fun convertClassParameters(classParameters: LighterASTNode): List<ValueParameter> {
|
|
||||||
return classParameters.forEachChildrenReturnList { node, container ->
|
|
||||||
when (node.tokenType) {
|
when (node.tokenType) {
|
||||||
VALUE_PARAMETER -> container += convertClassParameter(node)
|
VALUE_PARAMETER -> container += convertValueParameter(node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private fun convertValueParameter(valueParameter: LighterASTNode): ValueParameter {
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseValueParameter
|
|
||||||
*/
|
|
||||||
private fun convertClassParameter(classParameter: LighterASTNode): ValueParameter {
|
|
||||||
var modifiers = Modifier(session)
|
var modifiers = Modifier(session)
|
||||||
var isVal = false
|
var isVal = false
|
||||||
var isVar = false
|
var isVar = false
|
||||||
lateinit var identifier: String
|
var identifier: String? = null
|
||||||
lateinit var firType: FirTypeRef
|
var firType: FirTypeRef? = null
|
||||||
var firExpression: FirExpression? = null
|
var firExpression: FirExpression? = null
|
||||||
classParameter.forEachChildren {
|
valueParameter.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
||||||
VAL_KEYWORD -> isVal = true
|
VAL_KEYWORD -> isVal = true
|
||||||
@@ -399,7 +393,7 @@ class Converter(
|
|||||||
session,
|
session,
|
||||||
null,
|
null,
|
||||||
identifier.nameAsSafeName(),
|
identifier.nameAsSafeName(),
|
||||||
firType,
|
firType ?: implicitType,
|
||||||
firExpression,
|
firExpression,
|
||||||
isCrossinline = modifiers.hasCrossinline(),
|
isCrossinline = modifiers.hasCrossinline(),
|
||||||
isNoinline = modifiers.hasNoinline(),
|
isNoinline = modifiers.hasNoinline(),
|
||||||
@@ -552,14 +546,14 @@ class Converter(
|
|||||||
*/
|
*/
|
||||||
private fun convertSecondaryConstructor(secondaryConstructor: LighterASTNode, classWrapper: ClassWrapper): FirConstructor {
|
private fun convertSecondaryConstructor(secondaryConstructor: LighterASTNode, classWrapper: ClassWrapper): FirConstructor {
|
||||||
var modifiers = Modifier(session)
|
var modifiers = Modifier(session)
|
||||||
val firValueParameters = mutableListOf<FirValueParameter>()
|
val firValueParameters = mutableListOf<ValueParameter>()
|
||||||
var constructorDelegationCall: FirDelegatedConstructorCall? = null
|
var constructorDelegationCall: FirDelegatedConstructorCall? = null
|
||||||
var firBlock: FirBlock? = null
|
var firBlock: FirBlock? = null
|
||||||
|
|
||||||
secondaryConstructor.forEachChildren {
|
secondaryConstructor.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
||||||
VALUE_PARAMETER_LIST -> firValueParameters += convertFunctionValueParameters(it)
|
VALUE_PARAMETER_LIST -> firValueParameters += convertValueParameters(it)
|
||||||
CONSTRUCTOR_DELEGATION_CALL -> constructorDelegationCall = convertConstructorDelegationCall(it, classWrapper)
|
CONSTRUCTOR_DELEGATION_CALL -> constructorDelegationCall = convertConstructorDelegationCall(it, classWrapper)
|
||||||
BLOCK -> firBlock = visitBlock(it)
|
BLOCK -> firBlock = visitBlock(it)
|
||||||
}
|
}
|
||||||
@@ -579,7 +573,7 @@ class Converter(
|
|||||||
FunctionUtil.firFunctions += firConstructor
|
FunctionUtil.firFunctions += firConstructor
|
||||||
firConstructor.annotations += modifiers.annotations
|
firConstructor.annotations += modifiers.annotations
|
||||||
firConstructor.typeParameters += ConverterUtil.typeParametersFromSelfType(classWrapper.delegatedSelfTypeRef)
|
firConstructor.typeParameters += ConverterUtil.typeParametersFromSelfType(classWrapper.delegatedSelfTypeRef)
|
||||||
firConstructor.valueParameters += firValueParameters
|
firConstructor.valueParameters += firValueParameters.map { it.firValueParameter }
|
||||||
firConstructor.body = visitFunctionBody(firBlock, null)
|
firConstructor.body = visitFunctionBody(firBlock, null)
|
||||||
FunctionUtil.firFunctions.removeLast()
|
FunctionUtil.firFunctions.removeLast()
|
||||||
return firConstructor
|
return firConstructor
|
||||||
@@ -639,7 +633,7 @@ class Converter(
|
|||||||
var modifiers = Modifier(session)
|
var modifiers = Modifier(session)
|
||||||
lateinit var identifier: String
|
lateinit var identifier: String
|
||||||
val firTypeParameters = mutableListOf<FirTypeParameter>()
|
val firTypeParameters = mutableListOf<FirTypeParameter>()
|
||||||
val valueParametersList = mutableListOf<FirValueParameter>()
|
val valueParametersList = mutableListOf<ValueParameter>()
|
||||||
var isReturnType = false
|
var isReturnType = false
|
||||||
var receiverType: FirTypeRef? = null
|
var receiverType: FirTypeRef? = null
|
||||||
var returnType: FirTypeRef? = null
|
var returnType: FirTypeRef? = null
|
||||||
@@ -651,7 +645,7 @@ class Converter(
|
|||||||
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
||||||
IDENTIFIER -> identifier = it.getAsString()
|
IDENTIFIER -> identifier = it.getAsString()
|
||||||
TYPE_PARAMETER_LIST -> firTypeParameters += convertTypeParameters(it)
|
TYPE_PARAMETER_LIST -> firTypeParameters += convertTypeParameters(it)
|
||||||
VALUE_PARAMETER_LIST -> valueParametersList += convertFunctionValueParameters(it)
|
VALUE_PARAMETER_LIST -> valueParametersList += convertValueParameters(it)
|
||||||
COLON -> isReturnType = true
|
COLON -> isReturnType = true
|
||||||
TYPE_REFERENCE -> if (isReturnType) returnType = convertType(it) else receiverType = convertType(it)
|
TYPE_REFERENCE -> if (isReturnType) returnType = convertType(it) else receiverType = convertType(it)
|
||||||
TYPE_CONSTRAINT_LIST -> typeConstraints += convertTypeConstraints(it)
|
TYPE_CONSTRAINT_LIST -> typeConstraints += convertTypeConstraints(it)
|
||||||
@@ -694,78 +688,12 @@ class Converter(
|
|||||||
firFunction.typeParameters += firTypeParameters
|
firFunction.typeParameters += firTypeParameters
|
||||||
firFunction.joinTypeParameters(typeConstraints)
|
firFunction.joinTypeParameters(typeConstraints)
|
||||||
|
|
||||||
firFunction.valueParameters += valueParametersList
|
firFunction.valueParameters += valueParametersList.map { it.firValueParameter }
|
||||||
firFunction.body = visitFunctionBody(firBlock, firExpression)
|
firFunction.body = visitFunctionBody(firBlock, firExpression)
|
||||||
FunctionUtil.firFunctions.removeLast()
|
FunctionUtil.firFunctions.removeLast()
|
||||||
return firFunction
|
return firFunction
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseValueParameterList
|
|
||||||
*/
|
|
||||||
private fun convertFunctionValueParameters(functionValueParameters: LighterASTNode): List<FirValueParameter> {
|
|
||||||
return functionValueParameters.forEachChildrenReturnList { node, container ->
|
|
||||||
when (node.tokenType) {
|
|
||||||
VALUE_PARAMETER -> container += convertFunctionValueParameter(node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseValueParameter
|
|
||||||
*/
|
|
||||||
private fun convertFunctionValueParameter(functionValueParameter: LighterASTNode): FirValueParameter {
|
|
||||||
var modifiers = Modifier(session)
|
|
||||||
lateinit var identifier: String
|
|
||||||
lateinit var firType: FirTypeRef
|
|
||||||
var firExpression: FirExpression? = null
|
|
||||||
functionValueParameter.forEachChildren {
|
|
||||||
when (it.tokenType) {
|
|
||||||
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
|
||||||
IDENTIFIER -> identifier = it.getAsString()
|
|
||||||
TYPE_REFERENCE -> firType = convertType(it)
|
|
||||||
else -> if (it.isExpression()) firExpression = visitExpression(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FirValueParameterImpl(
|
|
||||||
session,
|
|
||||||
null,
|
|
||||||
identifier.nameAsSafeName(),
|
|
||||||
firType,
|
|
||||||
firExpression,
|
|
||||||
isCrossinline = modifiers.hasCrossinline(),
|
|
||||||
isNoinline = modifiers.hasNoinline(),
|
|
||||||
isVararg = modifiers.hasVararg()
|
|
||||||
).apply { annotations += modifiers.annotations }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseFunctionParameterRest
|
|
||||||
*/
|
|
||||||
private fun convertParameter(parameter: LighterASTNode): FirValueParameter {
|
|
||||||
var identifier: String? = null
|
|
||||||
var firType: FirTypeRef? = null
|
|
||||||
parameter.forEachChildren {
|
|
||||||
when (it.tokenType) {
|
|
||||||
IDENTIFIER -> identifier = it.getAsString()
|
|
||||||
TYPE_REFERENCE -> firType = convertType(it)
|
|
||||||
//TODO expression?
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FirValueParameterImpl(
|
|
||||||
session,
|
|
||||||
null,
|
|
||||||
identifier.nameAsSafeName(),
|
|
||||||
firType ?: implicitType,
|
|
||||||
null,
|
|
||||||
isCrossinline = false,
|
|
||||||
isNoinline = false,
|
|
||||||
isVararg = false
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* this is just a VALUE_PARAMETER_LIST
|
* this is just a VALUE_PARAMETER_LIST
|
||||||
*
|
*
|
||||||
@@ -778,7 +706,7 @@ class Converter(
|
|||||||
setterParameter.forEachChildren {
|
setterParameter.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
||||||
VALUE_PARAMETER -> firValueParameter = convertParameter(it)
|
VALUE_PARAMETER -> firValueParameter = convertValueParameter(it).firValueParameter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -787,7 +715,7 @@ class Converter(
|
|||||||
null,
|
null,
|
||||||
firValueParameter.name,
|
firValueParameter.name,
|
||||||
if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef,
|
if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef,
|
||||||
null,//TODO implement
|
firValueParameter.defaultValue,
|
||||||
isCrossinline = modifiers.hasCrossinline(),
|
isCrossinline = modifiers.hasCrossinline(),
|
||||||
isNoinline = modifiers.hasNoinline(),
|
isNoinline = modifiers.hasNoinline(),
|
||||||
isVararg = modifiers.hasVararg()
|
isVararg = modifiers.hasVararg()
|
||||||
@@ -915,10 +843,7 @@ class Converter(
|
|||||||
SET_KEYWORD -> isGetter = false
|
SET_KEYWORD -> isGetter = false
|
||||||
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
MODIFIER_LIST -> modifiers = convertModifiers(it)
|
||||||
TYPE_REFERENCE -> returnType = convertType(it)
|
TYPE_REFERENCE -> returnType = convertType(it)
|
||||||
VALUE_PARAMETER_LIST -> {
|
VALUE_PARAMETER_LIST -> firValueParameters = convertSetterParameter(it, propertyTypeRef)
|
||||||
//isGetter = false
|
|
||||||
firValueParameters = convertSetterParameter(it, propertyTypeRef)
|
|
||||||
}
|
|
||||||
BLOCK -> firBlock = visitBlock(it)
|
BLOCK -> firBlock = visitBlock(it)
|
||||||
else -> if (it.isExpression()) firExpression = visitExpression(it)
|
else -> if (it.isExpression()) firExpression = visitExpression(it)
|
||||||
}
|
}
|
||||||
@@ -1092,11 +1017,11 @@ class Converter(
|
|||||||
private fun convertFunctionType(functionType: LighterASTNode, isNullable: Boolean = false): FirTypeRef {
|
private fun convertFunctionType(functionType: LighterASTNode, isNullable: Boolean = false): FirTypeRef {
|
||||||
var receiverTypeReference: FirTypeRef? = null
|
var receiverTypeReference: FirTypeRef? = null
|
||||||
lateinit var returnTypeReference: FirTypeRef
|
lateinit var returnTypeReference: FirTypeRef
|
||||||
val valueParametersList = mutableListOf<FirValueParameter>()
|
val valueParametersList = mutableListOf<ValueParameter>()
|
||||||
functionType.forEachChildren {
|
functionType.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
FUNCTION_TYPE_RECEIVER -> receiverTypeReference = convertReceiverType(it)
|
FUNCTION_TYPE_RECEIVER -> receiverTypeReference = convertReceiverType(it)
|
||||||
VALUE_PARAMETER_LIST -> valueParametersList += convertFunctionTypeParameters(it)
|
VALUE_PARAMETER_LIST -> valueParametersList += convertValueParameters(it)
|
||||||
TYPE_REFERENCE -> returnTypeReference = convertType(it)
|
TYPE_REFERENCE -> returnTypeReference = convertType(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1107,7 +1032,7 @@ class Converter(
|
|||||||
isNullable,
|
isNullable,
|
||||||
receiverTypeReference,
|
receiverTypeReference,
|
||||||
returnTypeReference
|
returnTypeReference
|
||||||
).apply { valueParameters += valueParametersList }
|
).apply { valueParameters += valueParametersList.map { it.firValueParameter } }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1153,17 +1078,6 @@ class Converter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseValueParameter
|
|
||||||
*/
|
|
||||||
private fun convertFunctionTypeParameters(functionTypeParameters: LighterASTNode): List<FirValueParameter> {
|
|
||||||
return functionTypeParameters.forEachChildrenReturnList { node, container ->
|
|
||||||
when (node.tokenType) {
|
|
||||||
VALUE_PARAMETER -> container += convertParameter(node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeConstraintList
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeConstraintList
|
||||||
*/
|
*/
|
||||||
@@ -1302,7 +1216,7 @@ class Converter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun convertAnnotationTarget(annotationUseSiteTarget: LighterASTNode): AnnotationUseSiteTarget {
|
private fun convertAnnotationTarget(annotationUseSiteTarget: LighterASTNode): AnnotationUseSiteTarget {
|
||||||
var annotationTarget: AnnotationUseSiteTarget? = null
|
lateinit var annotationTarget: AnnotationUseSiteTarget
|
||||||
annotationUseSiteTarget.forEachChildren {
|
annotationUseSiteTarget.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
FILE_KEYWORD -> annotationTarget = AnnotationUseSiteTarget.FILE
|
FILE_KEYWORD -> annotationTarget = AnnotationUseSiteTarget.FILE
|
||||||
@@ -1316,8 +1230,7 @@ class Converter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO specify error
|
return annotationTarget
|
||||||
return annotationTarget ?: throw Exception()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//equals to ANNOTATION_ENTRY
|
//equals to ANNOTATION_ENTRY
|
||||||
|
|||||||
Reference in New Issue
Block a user