fun foldTokensToType()

in src/main/kotlin/org/jetbrains/objcdiff/parsers/parseObjCType.kt [13:42]


fun foldTokensToType(
    tokens: List<ObjCToken>,
    classOrInterface: ClassifierType = ClassifierType.Undefined
): List<ObjCType> {
    if (tokens.isEmpty()) return emptyList()

    return tokens.filterPrimaryTokens().map { token ->
        if (token is ObjCToken.PrimitiveType) {
            buildPrimitiveType(token.value)
        } else if (token is ObjCToken.LambdaType) {
            buildLambdaType(
                foldTokensToType(
                    listOf(token.returnType)
                ).first(),
                foldTokensToType(token.arguments)
            )
        } else {
            var nullable = false
            val generics = if (token is ObjCToken.IdType) {
                nullable = token.nullable
                foldTokensToType(token.tokens, classOrInterface)
            } else if (token is ObjCToken.ObjectType) {
                nullable = token.nullable
                foldTokensToType(token.tokens, classOrInterface)
            } else emptyList()

            buildObjectType(token.value, generics, emptyList(), nullable, null)
        }
    }
}