Skip to content

Commit 9fadcf6

Browse files
committed
Created FunctionTypeName
1 parent f4fc186 commit 9fadcf6

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

formver.compiler-plugin/core/src/org/jetbrains/kotlin/formver/core/embeddings/types/FunctionTypeEmbedding.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
package org.jetbrains.kotlin.formver.core.embeddings.types
77

88
import org.jetbrains.kotlin.formver.core.domains.RuntimeTypeDomain
9-
import org.jetbrains.kotlin.formver.core.names.SetOfNames
9+
import org.jetbrains.kotlin.formver.core.names.FunctionTypeName
10+
import org.jetbrains.kotlin.formver.core.names.ListOfNames
11+
import org.jetbrains.kotlin.formver.core.names.NameOfType
1012

1113
data class FunctionTypeEmbedding(
1214
val dispatchReceiverType: TypeEmbedding?,
@@ -17,7 +19,8 @@ data class FunctionTypeEmbedding(
1719
) : PretypeEmbedding {
1820
override val runtimeType = RuntimeTypeDomain.functionType()
1921

20-
override val name: SetOfNames = SetOfNames(formalArgTypes.map { it -> it.name } + listOf(returnType.name))
22+
private val argsTypeNames = ListOfNames<NameOfType>(formalArgTypes.map { it.name })
23+
override val name: FunctionTypeName = FunctionTypeName(argsTypeNames, returnType.name)
2124

2225
/**
2326
* The flattened structure of the callable parameters: in case the callable has a receiver

formver.compiler-plugin/core/src/org/jetbrains/kotlin/formver/core/embeddings/types/TypeEmbedding.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ data class TypeEmbedding(val pretype: PretypeEmbedding, val flags: TypeEmbedding
3737
* It may at some point necessary to make a `TypeName` hierarchy of some sort to
3838
* represent these names, but we do it inline for now.
3939
*/
40-
val name: SymbolicName
40+
val name: TypeName
4141
get() = TypeName(pretype, flags.nullable)
4242

4343
val havocMethodName: SymbolicName by lazy {

formver.compiler-plugin/core/src/org/jetbrains/kotlin/formver/core/names/KotlinName.kt

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,16 @@ data class ConstructorKotlinName(val type: FunctionTypeEmbedding) : KotlinName {
8383
get() = type.name.mangledBaseName
8484
}
8585

86-
data class PretypeName(val name: String) : KotlinName {
86+
interface NameOfType : SymbolicName
87+
88+
data class PretypeName(val name: String) : NameOfType {
8789

8890
context(nameResolver: NameResolver)
8991
override val mangledBaseName: String
9092
get() = name
9193
}
9294

93-
data class SetOfNames(val names: List<SymbolicName>) : KotlinName {
95+
data class ListOfNames<T : SymbolicName>(val names: List<T>) : SymbolicName {
9496
override val mangledType: NameType
9597
get() = NameType.Type
9698

@@ -99,7 +101,17 @@ data class SetOfNames(val names: List<SymbolicName>) : KotlinName {
99101
get() = names.joinToString(SEPARATOR) { it.mangled }
100102
}
101103

102-
data class TypeName(val pretype: PretypeEmbedding, val nullable: Boolean) : KotlinName {
104+
data class FunctionTypeName(val args: ListOfNames<NameOfType>, val returns: TypeName) : NameOfType {
105+
context(nameResolver: NameResolver)
106+
override val mangledBaseName: String
107+
get() = buildString {
108+
append(args.mangledBaseName)
109+
if (isNotEmpty()) append(SEPARATOR)
110+
append(returns.mangled)
111+
}
112+
}
113+
114+
data class TypeName(val pretype: PretypeEmbedding, val nullable: Boolean) : NameOfType {
103115

104116
override val mangledType: NameType
105117
get() = NameType.Type
@@ -112,5 +124,4 @@ data class TypeName(val pretype: PretypeEmbedding, val nullable: Boolean) : Kotl
112124
if (isNotEmpty()) append(SEPARATOR)
113125
append(pretype.name.mangledBaseName)
114126
}
115-
116127
}

0 commit comments

Comments
 (0)