fix(KT-39423): add support of optional parameters to constructor + fix bug with optional parameters inside functions.
This commit is contained in:
+12
-3
@@ -66,7 +66,6 @@ class ExportedDefaultParameterStub(val context: JsIrBackendContext) : Declaratio
|
||||
variables[valueParameter] = it
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (variables.isNotEmpty()) {
|
||||
@@ -79,7 +78,13 @@ class ExportedDefaultParameterStub(val context: JsIrBackendContext) : Declaratio
|
||||
}
|
||||
|
||||
|
||||
return this
|
||||
return also {
|
||||
valueParameters.forEach {
|
||||
if (it.defaultValue != null) {
|
||||
it.origin = JsLoweredDeclarationOrigin.JS_SHADOWED_DEFAULT_PARAMETER
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
||||
@@ -113,8 +118,12 @@ class ExportedDefaultParameterStub(val context: JsIrBackendContext) : Declaratio
|
||||
exportedDefaultStubFun.copyParameterDeclarationsFrom(declaration)
|
||||
exportedDefaultStubFun.returnType = declaration.returnType.remapTypeParameters(declaration, exportedDefaultStubFun)
|
||||
exportedDefaultStubFun.valueParameters.forEach {
|
||||
if (it.defaultValue != null) {
|
||||
it.origin = JsLoweredDeclarationOrigin.JS_SHADOWED_DEFAULT_PARAMETER
|
||||
}
|
||||
|
||||
it.defaultValue = null
|
||||
it.origin = JsLoweredDeclarationOrigin.JS_SHADOWED_DEFAULT_PARAMETER
|
||||
|
||||
}
|
||||
|
||||
declaration.origin = JsLoweredDeclarationOrigin.JS_SHADOWED_EXPORT
|
||||
|
||||
@@ -33,7 +33,7 @@ declare namespace JS_TESTS {
|
||||
static delegateToCreateFromInts(y: number, z: number): DerivedClassWithSecondaryCtor;
|
||||
}
|
||||
class KotlinGreeter {
|
||||
constructor(greeting: string);
|
||||
constructor(greeting?: string);
|
||||
get greeting(): string;
|
||||
}
|
||||
}
|
||||
|
||||
+12
-1
@@ -13,7 +13,7 @@ declare namespace JS_TESTS {
|
||||
function varargWithOtherParameters(x: string, y: Array<string>, z: string): number;
|
||||
function varargWithComplexType(x: Array<(p0: Array<Int32Array>) => Array<Int32Array>>): number;
|
||||
function sumNullable(x: Nullable<number>, y: Nullable<number>): number;
|
||||
function defaultParameters(x?: number, y?: string): string;
|
||||
function defaultParameters(a: string, x?: number, y?: string): string;
|
||||
function generic1<T>(x: T): T;
|
||||
function generic2<T>(x: Nullable<T>): boolean;
|
||||
function genericWithConstraint<T extends string>(x: T): T;
|
||||
@@ -187,5 +187,16 @@ declare namespace JS_TESTS {
|
||||
get value(): number;
|
||||
}
|
||||
}
|
||||
class KT39423 {
|
||||
constructor(a: string, b?: Nullable<number>);
|
||||
get a(): string;
|
||||
get b(): Nullable<number>;
|
||||
component1(): string;
|
||||
component2(): Nullable<number>;
|
||||
copy(a?: string, b?: Nullable<number>): foo.KT39423;
|
||||
toString(): string;
|
||||
hashCode(): number;
|
||||
equals(other: Nullable<any>): boolean;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,8 +35,8 @@ fun sumNullable(x: Int?, y: Int?): Int =
|
||||
(x ?: 0) + (y ?: 0)
|
||||
|
||||
@JsExport
|
||||
fun defaultParameters(x: Int = 10, y: String = "OK"): String =
|
||||
x.toString() + y
|
||||
fun defaultParameters(a: String, x: Int = 10, y: String = "OK"): String =
|
||||
a + x.toString() + y
|
||||
|
||||
@JsExport
|
||||
fun <T> generic1(x: T): T = x
|
||||
@@ -250,4 +250,10 @@ class __JsNameTest private constructor() {
|
||||
|
||||
@JsName("NestedJsName")
|
||||
class __NestJsNameTest(@JsName("value") val __value: Int)
|
||||
}
|
||||
}
|
||||
|
||||
@JsExport
|
||||
data class KT39423(
|
||||
val a: String,
|
||||
val b: Int? = null
|
||||
)
|
||||
+1
-1
@@ -51,7 +51,7 @@ function box() {
|
||||
assert(sumNullable(10, null) === 10);
|
||||
assert(sumNullable(undefined, 20) === 20);
|
||||
assert(sumNullable(1, 2) === 3);
|
||||
assert(defaultParameters(20, "OK") === "20OK");
|
||||
assert(defaultParameters("", 20, "OK") === "20OK");
|
||||
assert(generic1("FOO") === "FOO");
|
||||
assert(generic1({ x: 10 }).x === 10);
|
||||
assert(generic2(null) === true);
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ function box(): string {
|
||||
assert(sumNullable(10, null) === 10);
|
||||
assert(sumNullable(undefined, 20) === 20);
|
||||
assert(sumNullable(1, 2) === 3);
|
||||
assert(defaultParameters(20, "OK") === "20OK");
|
||||
assert(defaultParameters("", 20, "OK") === "20OK");
|
||||
assert(generic1<string>("FOO") === "FOO");
|
||||
assert(generic1({x: 10}).x === 10);
|
||||
assert(generic2(null) === true);
|
||||
|
||||
Reference in New Issue
Block a user