Kotlin / dukat

Converter of <any kind of declarations> to Kotlin external declarations
552 stars 42 forks source link

Declarations clash after removing string literals in params and type params #279

Closed Schahen closed 4 years ago

Schahen commented 4 years ago

Following code:

interface Options<A, B> {}
interface Result<T> {}

declare function generate(options: Options<'pem', 'pem'>): Result<{ publicKey: string, privateKey: string }>;
declare function generate(options: Options<'pem', 'der'>): Result<{ publicKey: string, privateKey: Buffer }>;
declare function generate(options: Options<'der', 'pem'>): Result<{ publicKey: Buffer, privateKey: string }>;
declare function generate(options: Options<'der', 'der'>): Result<{ publicKey: Buffer, privateKey: Buffer }>;

is translated to:

external interface Options<A, B>

external interface Result<T>

external interface `T$0` {
    var publicKey: String
    var privateKey: String
}

external fun generate(options: Options<String /* 'pem' */, String /* 'pem' */>): Result<`T$0`>

external interface `T$1` {
    var publicKey: String
    var privateKey: Any 
}

external fun generate(options: Options<String /* 'pem' */, String /* 'der' */>): Result<`T$1`>

external interface `T$2` {
    var publicKey: Any 
    var privateKey: String
}

external fun generate(options: Options<String /* 'der' */, String /* 'pem' */>): Result<`T$2`>

external interface `T$3` {
    var publicKey: Any 
    var privateKey: Any 
}

external fun generate(options: Options<String /* 'der' */, String /* 'der' */>): Result<`T$3`>

Which compiles only because of @file:Suppress("CONFLICTING_OVERLOADS") We should merge such functions and methods.

Schahen commented 4 years ago

see also https://github.com/Kotlin/dukat/issues/278