@@ -516,6 +516,127 @@ public void testVarargsRestrictive() {
516
516
.doTest ();
517
517
}
518
518
519
+ @ Test
520
+ public void varargsOverride () {
521
+ makeHelper ()
522
+ .addSourceLines (
523
+ "VarargsOverride.java" ,
524
+ "package com.uber;" ,
525
+ "import org.jspecify.annotations.Nullable;" ,
526
+ "public class VarargsOverride {" ,
527
+ " interface NullableVarargsContents {" ,
528
+ " void varargs(@Nullable Object... params);" ,
529
+ " }" ,
530
+ " static class NullableVarargsContentsImpl1 implements NullableVarargsContents {" ,
531
+ " @Override" ,
532
+ " // legal override" ,
533
+ " public void varargs(@Nullable Object... params) {" ,
534
+ " }" ,
535
+ " }" ,
536
+ " static class NullableVarargsContentsImpl2 implements NullableVarargsContents {" ,
537
+ " @Override" ,
538
+ " // BUG: Diagnostic contains: Parameter has type Object[], but overridden method" ,
539
+ " public void varargs(Object... params) {" ,
540
+ " }" ,
541
+ " }" ,
542
+ " static class NullableVarargsContentsImpl3 implements NullableVarargsContents {" ,
543
+ " @Override" ,
544
+ // TODO open an issue to improve the error message in a follow up
545
+ " // BUG: Diagnostic contains: Parameter has type Object[]" ,
546
+ " public void varargs(Object @Nullable... params) {" ,
547
+ " }" ,
548
+ " }" ,
549
+ " static class NullableVarargsContentsImpl4 implements NullableVarargsContents {" ,
550
+ " @Override" ,
551
+ " // legal override" ,
552
+ " public void varargs(@Nullable Object @Nullable... params) {" ,
553
+ " }" ,
554
+ " }" ,
555
+ " interface NullableVarargsArray {" ,
556
+ " void varargs(Object @Nullable... params);" ,
557
+ " }" ,
558
+ " static class NullableVarargsArrayImpl1 implements NullableVarargsArray {" ,
559
+ " @Override" ,
560
+ " // BUG: Diagnostic contains: parameter params is @NonNull" ,
561
+ " public void varargs(@Nullable Object... params) {" ,
562
+ " }" ,
563
+ " }" ,
564
+ " static class NullableVarargsArrayImpl2 implements NullableVarargsArray {" ,
565
+ " @Override" ,
566
+ " // BUG: Diagnostic contains: parameter params is @NonNull" ,
567
+ " public void varargs(Object... params) {" ,
568
+ " }" ,
569
+ " }" ,
570
+ " static class NullableVarargsArrayImpl3 implements NullableVarargsArray {" ,
571
+ " @Override" ,
572
+ " // legal override" ,
573
+ " public void varargs(Object @Nullable... params) {" ,
574
+ " }" ,
575
+ " }" ,
576
+ " static class NullableVarargsArrayImpl4 implements NullableVarargsArray {" ,
577
+ " @Override" ,
578
+ " // ok: contravariance" ,
579
+ " public void varargs(@Nullable Object @Nullable... params) {" ,
580
+ " }" ,
581
+ " }" ,
582
+ " interface NullableVarargsBoth {" ,
583
+ " void varargs(@Nullable Object @Nullable... params);" ,
584
+ " }" ,
585
+ " static class NullableVarargsBothImpl1 implements NullableVarargsBoth {" ,
586
+ " @Override" ,
587
+ " // BUG: Diagnostic contains: parameter params is @NonNull" ,
588
+ " public void varargs(@Nullable Object... params) {" ,
589
+ " }" ,
590
+ " }" ,
591
+ " static class NullableVarargsBothImpl2 implements NullableVarargsBoth {" ,
592
+ " @Override" ,
593
+ " // BUG: Diagnostic contains: parameter params is @NonNull" ,
594
+ " public void varargs(Object... params) {" ,
595
+ " }" ,
596
+ " }" ,
597
+ " static class NullableVarargsBothImpl3 implements NullableVarargsBoth {" ,
598
+ " @Override" ,
599
+ " // BUG: Diagnostic contains: Parameter has type Object[]" ,
600
+ " public void varargs(Object @Nullable... params) {" ,
601
+ " }" ,
602
+ " }" ,
603
+ " static class NullableVarargsBothImpl4 implements NullableVarargsBoth {" ,
604
+ " @Override" ,
605
+ " // legal override" ,
606
+ " public void varargs(@Nullable Object @Nullable... params) {" ,
607
+ " }" ,
608
+ " }" ,
609
+ " interface NonNullVarargs {" ,
610
+ " void varargs(Object... params);" ,
611
+ " }" ,
612
+ " static class NonNullVarargsImpl1 implements NonNullVarargs {" ,
613
+ " @Override" ,
614
+ " // ok: contravariance" ,
615
+ " public void varargs(@Nullable Object... params) {" ,
616
+ " }" ,
617
+ " }" ,
618
+ " static class NonNullVarargsImpl2 implements NonNullVarargs {" ,
619
+ " @Override" ,
620
+ " // legal override" ,
621
+ " public void varargs(Object... params) {" ,
622
+ " }" ,
623
+ " }" ,
624
+ " static class NonNullVarargsImpl3 implements NonNullVarargs {" ,
625
+ " @Override" ,
626
+ " // legal override" ,
627
+ " public void varargs(Object @Nullable... params) {" ,
628
+ " }" ,
629
+ " }" ,
630
+ " static class NonNullVarargsImpl4 implements NonNullVarargs {" ,
631
+ " @Override" ,
632
+ " // ok: contravariance" ,
633
+ " public void varargs(@Nullable Object @Nullable... params) {" ,
634
+ " }" ,
635
+ " }" ,
636
+ "}" )
637
+ .doTest ();
638
+ }
639
+
519
640
private CompilationTestHelper makeHelper () {
520
641
return makeTestHelperWithArgs (
521
642
Arrays .asList (
0 commit comments