File tree Expand file tree Collapse file tree 2 files changed +25
-1
lines changed
compiler/src/main/scala/org/scalajs/nscplugin
test-suite/js/src/test/scala/org/scalajs/testsuite/jsinterop Expand file tree Collapse file tree 2 files changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -767,7 +767,10 @@ trait GenJSExports[G <: Global with Singleton] extends SubComponent {
767
767
768
768
if (isJSType(trgSym)) {
769
769
if (isNonNativeJSClass(defaultGetter.owner)) {
770
- genApplyJSClassMethod(trgTree, defaultGetter, defaultGetterArgs)
770
+ if (defaultGetter.hasAnnotation(JSOptionalAnnotation ))
771
+ js.Undefined ()
772
+ else
773
+ genApplyJSClassMethod(trgTree, defaultGetter, defaultGetterArgs)
771
774
} else {
772
775
reporter.error(paramPos, " When overriding a native method " +
773
776
" with default arguments, the overriding method must " +
Original file line number Diff line number Diff line change @@ -239,6 +239,23 @@ class JSOptionalTest {
239
239
assertEquals(" function" , js.typeOf(obj.f))
240
240
assertEquals(6 , obj.f.get(5 ))
241
241
}
242
+
243
+ @ Test def traitWithOptionalDefaultParameter (): Unit = {
244
+ object InheritDefault extends TraitWithOptionalDefaultParameter {
245
+ def foo (x : js.UndefOr [Int ]): Int = x.getOrElse(5 )
246
+ }
247
+
248
+ assertEquals(5 , InheritDefault .foo())
249
+ assertEquals(10 , InheritDefault .foo(10 ))
250
+
251
+ object NewDefault extends TraitWithOptionalDefaultParameter {
252
+ def foo (x : js.UndefOr [Int ] = 6 ): Int =
253
+ x.getOrElse(throw new AssertionError (" x was js.undefined" ))
254
+ }
255
+
256
+ assertEquals(6 , NewDefault .foo())
257
+ assertEquals(10 , NewDefault .foo(10 ))
258
+ }
242
259
}
243
260
244
261
object JSOptionalTest {
@@ -303,4 +320,8 @@ object JSOptionalTest {
303
320
trait TraitWithOptionalFunction extends js.Object {
304
321
val f : js.UndefOr [js.Function1 [Int , Int ]] = js.undefined
305
322
}
323
+
324
+ trait TraitWithOptionalDefaultParameter extends js.Object {
325
+ def foo (x : js.UndefOr [Int ] = js.undefined): Int
326
+ }
306
327
}
You can’t perform that action at this time.
0 commit comments