Summarize methods that convert value parameter nodes

This commit is contained in:
Ivan Cilcic
2019-07-05 20:14:55 +03:00
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