From 20559ab87479c279246dd3a1d6f6be06381ce709 Mon Sep 17 00:00:00 2001 From: Suvrat1629 Date: Thu, 22 Jan 2026 12:55:16 +0530 Subject: [PATCH 1/7] add type parameter check for overriding functions --- checker/tests/nullness/A.class | Bin 0 -> 634 bytes checker/tests/nullness/B.class | Bin 0 -> 747 bytes checker/tests/nullness/Issue6741.class | Bin 0 -> 1145 bytes checker/tests/nullness/Issue6816.class | Bin 0 -> 1566 bytes checker/tests/nullness/Issue6864.class | Bin 0 -> 806 bytes checker/tests/nullness/Issue6864.java | 24 ++++++++ .../common/basetype/BaseTypeVisitor.java | 53 +++++++++++++++++- .../common/basetype/messages.properties | 1 + 8 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 checker/tests/nullness/A.class create mode 100644 checker/tests/nullness/B.class create mode 100644 checker/tests/nullness/Issue6741.class create mode 100644 checker/tests/nullness/Issue6816.class create mode 100644 checker/tests/nullness/Issue6864.class create mode 100644 checker/tests/nullness/Issue6864.java diff --git a/checker/tests/nullness/A.class b/checker/tests/nullness/A.class new file mode 100644 index 0000000000000000000000000000000000000000..e397da41a1a44c0001560068ceec25a82ecadacb GIT binary patch literal 634 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 literal 0 HcmV?d00001 diff --git a/checker/tests/nullness/Issue6864.java b/checker/tests/nullness/Issue6864.java new file mode 100644 index 000000000000..6c04733976b3 --- /dev/null +++ b/checker/tests/nullness/Issue6864.java @@ -0,0 +1,24 @@ +import org.checkerframework.checker.nullness.qual.*; +import java.util.*; + +class A { + > T m(T x) { + return x; + } +} + +class B extends A { + > T m(T x) { + x.add(null); + return x; + } +} + + +public class Issue6864 { + public static void main(String[] args) { + A x = new B(); + List y = new LinkedList<>(); + x.m(y).get(0).toString(); + } +} diff --git a/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java b/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java index 896bcd3aac06..4378a3a93283 100644 --- a/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java +++ b/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java @@ -4142,7 +4142,13 @@ public boolean checkOverride() { return true; } - boolean result = checkReturn(); + // First, ensure that method type parameter bounds are compatible. This must be + // checked before return/parameter checks because those checks may depend on + // the meaning of the type parameters. + boolean result = checkTypeParameters(); + + // Then check return type, parameters, receiver, and other properties. + result &= checkReturn(); result &= checkParameters(); if (isMethodReference) { result &= checkMemberReferenceReceivers(); @@ -4155,6 +4161,51 @@ public boolean checkOverride() { return result; } + /** + * Check that corresponding method type parameters have compatible bounds. + * + * @return true if type parameter bounds are compatible + */ + private boolean checkTypeParameters() { + List subTypeVars = overrider.getTypeVariables(); + List superTypeVars = overridden.getTypeVariables(); + + if (subTypeVars == null || superTypeVars == null) { + return true; + } + if (subTypeVars.size() != superTypeVars.size()) { + // Different number of type parameters is handled elsewhere (javac), so skip here. + return true; + } + + boolean result = true; + for (int i = 0; i < subTypeVars.size(); i++) { + AnnotatedTypeVariable subVar = subTypeVars.get(i); + AnnotatedTypeVariable superVar = superTypeVars.get(i); + + // Use the same containment test used for return type type variables: the + // overriding type variable's upper bound must be a subtype of the overridden's + // upper bound, and the overridden's lower bound must be a subtype of the + // overriding's lower bound. + boolean ok = testTypevarContainment(subVar, superVar); + if (!ok) { + FoundRequired pair = FoundRequired.of(subVar, superVar); + checker.reportError( + overriderTree, + "override.typeparam", + Integer.toString(i), + pair.found, + pair.required, + overriderType, + overrider, + overriddenType, + overridden); + } + result &= ok; + } + return result; + } + /** Check that an override respects purity. */ private void checkPurity() { String msgKey = isMethodReference ? "purity.methodref" : "purity.overriding"; diff --git a/framework/src/main/java/org/checkerframework/common/basetype/messages.properties b/framework/src/main/java/org/checkerframework/common/basetype/messages.properties index adddb59542d5..a701697b4045 100644 --- a/framework/src/main/java/org/checkerframework/common/basetype/messages.properties +++ b/framework/src/main/java/org/checkerframework/common/basetype/messages.properties @@ -37,6 +37,7 @@ explicit.annotation.ignored=The qualifier %s is ignored in favor of %s. Either d override.return=Incompatible return type.%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s override.param=Incompatible parameter type for %s.%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s override.receiver=Incompatible receiver type%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s +override.typeparam=Incompatible type parameter bounds for parameter %s.%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s methodref.return=Incompatible return type%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%nis not a valid method reference for method in %s%n %s methodref.param=Incompatible parameter type for %s%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%nis not a valid method reference for method in %s%n %s methodref.receiver=Incompatible receiver type%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%nis not a valid method reference for method in %s%n %s From 0918308574e0d1b7d43495c1d4a8f634b0fa97ce Mon Sep 17 00:00:00 2001 From: Suvrat1629 Date: Fri, 30 Jan 2026 19:39:33 +0530 Subject: [PATCH 2/7] removing unnecessary files Signed-off-by: Suvrat1629 --- checker/tests/nullness/A.class | Bin 634 -> 0 bytes checker/tests/nullness/B.class | Bin 747 -> 0 bytes checker/tests/nullness/Issue6741.class | Bin 1145 -> 0 bytes checker/tests/nullness/Issue6816.class | Bin 1566 -> 0 bytes checker/tests/nullness/Issue6864.class | Bin 806 -> 0 bytes checker/tests/nullness/Issue6864.java | 27 ++++++++++++------------- 6 files changed, 13 insertions(+), 14 deletions(-) delete mode 100644 checker/tests/nullness/A.class delete mode 100644 checker/tests/nullness/B.class delete mode 100644 checker/tests/nullness/Issue6741.class delete mode 100644 checker/tests/nullness/Issue6816.class delete mode 100644 checker/tests/nullness/Issue6864.class diff --git a/checker/tests/nullness/A.class b/checker/tests/nullness/A.class deleted file mode 100644 index e397da41a1a44c0001560068ceec25a82ecadacb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 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 diff --git a/checker/tests/nullness/Issue6864.java b/checker/tests/nullness/Issue6864.java index 6c04733976b3..e1b9d9b59cc6 100644 --- a/checker/tests/nullness/Issue6864.java +++ b/checker/tests/nullness/Issue6864.java @@ -1,24 +1,23 @@ -import org.checkerframework.checker.nullness.qual.*; import java.util.*; +import org.checkerframework.checker.nullness.qual.*; class A { - > T m(T x) { - return x; - } + > T m(T x) { + return x; + } } class B extends A { - > T m(T x) { - x.add(null); - return x; - } + > T m(T x) { + x.add(null); + return x; + } } - public class Issue6864 { - public static void main(String[] args) { - A x = new B(); - List y = new LinkedList<>(); - x.m(y).get(0).toString(); - } + public static void main(String[] args) { + A x = new B(); + List y = new LinkedList<>(); + x.m(y).get(0).toString(); + } } From 985d365346768ccebb0fc255e749870e6454d55d Mon Sep 17 00:00:00 2001 From: Suvrat1629 Date: Fri, 30 Jan 2026 19:42:06 +0530 Subject: [PATCH 3/7] removing unnecessary comments Signed-off-by: Suvrat1629 --- .../checkerframework/common/basetype/BaseTypeVisitor.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java b/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java index 4378a3a93283..ef86424ad0cb 100644 --- a/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java +++ b/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java @@ -4174,7 +4174,6 @@ private boolean checkTypeParameters() { return true; } if (subTypeVars.size() != superTypeVars.size()) { - // Different number of type parameters is handled elsewhere (javac), so skip here. return true; } @@ -4183,10 +4182,6 @@ private boolean checkTypeParameters() { AnnotatedTypeVariable subVar = subTypeVars.get(i); AnnotatedTypeVariable superVar = superTypeVars.get(i); - // Use the same containment test used for return type type variables: the - // overriding type variable's upper bound must be a subtype of the overridden's - // upper bound, and the overridden's lower bound must be a subtype of the - // overriding's lower bound. boolean ok = testTypevarContainment(subVar, superVar); if (!ok) { FoundRequired pair = FoundRequired.of(subVar, superVar); From 1e18e3077c06fcf52d3d6b135ecafed6491d4087 Mon Sep 17 00:00:00 2001 From: Michael Ernst Date: Thu, 23 Apr 2026 08:06:26 -0700 Subject: [PATCH 4/7] Fix compilation error --- checker/tests/nullness/Issue6864.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/checker/tests/nullness/Issue6864.java b/checker/tests/nullness/Issue6864.java index e1b9d9b59cc6..07174f57cc72 100644 --- a/checker/tests/nullness/Issue6864.java +++ b/checker/tests/nullness/Issue6864.java @@ -1,13 +1,14 @@ -import java.util.*; -import org.checkerframework.checker.nullness.qual.*; +import java.util.LinkedList; +import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; -class A { +class Issue6864_A { > T m(T x) { return x; } } -class B extends A { +class Issue6864_B extends Issue6864_A { > T m(T x) { x.add(null); return x; @@ -16,7 +17,7 @@ class B extends A { public class Issue6864 { public static void main(String[] args) { - A x = new B(); + Issue6864_A x = new Issue6864_B(); List y = new LinkedList<>(); x.m(y).get(0).toString(); } From c4391f294fe9234d8320b981f5b012db68e8f4ad Mon Sep 17 00:00:00 2001 From: Michael Ernst Date: Thu, 23 Apr 2026 08:08:25 -0700 Subject: [PATCH 5/7] Add contributor --- docs/manual/contributors.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/manual/contributors.tex b/docs/manual/contributors.tex index fc5a6d8872f5..2eb88be2fa3b 100644 --- a/docs/manual/contributors.tex +++ b/docs/manual/contributors.tex @@ -141,6 +141,7 @@ Steph Dietzel, Stephan Schroevers, Stuart Pernsteiner, +Suvrat Acharya, Suzanne Millstein, Thomas Schweizer, Thomas Wei\ss schuh, From ea6ec1ab92dd95181836b77621486d086f8085bf Mon Sep 17 00:00:00 2001 From: Michael Ernst Date: Thu, 23 Apr 2026 08:13:54 -0700 Subject: [PATCH 6/7] Fixes --- checker/tests/nullness/Issue6864.java | 1 + .../org/checkerframework/common/basetype/BaseTypeVisitor.java | 3 ++- .../org/checkerframework/common/basetype/messages.properties | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/checker/tests/nullness/Issue6864.java b/checker/tests/nullness/Issue6864.java index 07174f57cc72..c3c9ddadaff6 100644 --- a/checker/tests/nullness/Issue6864.java +++ b/checker/tests/nullness/Issue6864.java @@ -9,6 +9,7 @@ > T m(T x) { } class Issue6864_B extends Issue6864_A { + // :: error: [override.typeparam] > T m(T x) { x.add(null); return x; diff --git a/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java b/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java index 62d19545353a..8a1c6ef540e1 100644 --- a/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java +++ b/framework/src/main/java/org/checkerframework/common/basetype/BaseTypeVisitor.java @@ -4172,6 +4172,7 @@ private boolean checkTypeParameters() { return true; } if (subTypeVars.size() != superTypeVars.size()) { + // Arity mismatch between the two methods' type parameters; Java will report an error. return true; } @@ -4186,7 +4187,7 @@ private boolean checkTypeParameters() { checker.reportError( overriderTree, "override.typeparam", - Integer.toString(i), + subVar.getUnderlyingType().asElement().getSimpleName().toString(), pair.found, pair.required, overriderType, diff --git a/framework/src/main/java/org/checkerframework/common/basetype/messages.properties b/framework/src/main/java/org/checkerframework/common/basetype/messages.properties index a701697b4045..1d0cfe77459f 100644 --- a/framework/src/main/java/org/checkerframework/common/basetype/messages.properties +++ b/framework/src/main/java/org/checkerframework/common/basetype/messages.properties @@ -37,7 +37,7 @@ explicit.annotation.ignored=The qualifier %s is ignored in favor of %s. Either d override.return=Incompatible return type.%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s override.param=Incompatible parameter type for %s.%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s override.receiver=Incompatible receiver type%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s -override.typeparam=Incompatible type parameter bounds for parameter %s.%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s +override.typeparam=Incompatible type parameter bounds for type parameter %s.%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%ncannot override method in %s%n %s methodref.return=Incompatible return type%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%nis not a valid method reference for method in %s%n %s methodref.param=Incompatible parameter type for %s%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%nis not a valid method reference for method in %s%n %s methodref.receiver=Incompatible receiver type%nfound : %s%nrequired: %s%nConsequence: method in %s%n %s%nis not a valid method reference for method in %s%n %s From 8c9585d83c3a84a2a6e3efd521b282c696a6b472 Mon Sep 17 00:00:00 2001 From: Michael Ernst Date: Thu, 23 Apr 2026 08:20:04 -0700 Subject: [PATCH 7/7] Rename files for uniqueness --- checker/jtreg/nullness/issue824/Class2.out | 9 --------- .../issue824/{Class1.astub => Issue824_1.astub} | 2 +- .../nullness/issue824/{Class2.java => Issue824_2.java} | 10 +++++----- checker/jtreg/nullness/issue824/Issue824_2.out | 9 +++++++++ .../issue824lib/{Class1.java => Issue824_1.java} | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 checker/jtreg/nullness/issue824/Class2.out rename checker/jtreg/nullness/issue824/{Class1.astub => Issue824_1.astub} (90%) rename checker/jtreg/nullness/issue824/{Class2.java => Issue824_2.java} (61%) create mode 100644 checker/jtreg/nullness/issue824/Issue824_2.out rename checker/jtreg/nullness/issue824lib/{Class1.java => Issue824_1.java} (89%) diff --git a/checker/jtreg/nullness/issue824/Class2.out b/checker/jtreg/nullness/issue824/Class2.out deleted file mode 100644 index 54703a0b76de..000000000000 --- a/checker/jtreg/nullness/issue824/Class2.out +++ /dev/null @@ -1,9 +0,0 @@ -Class2.java:14:39: compiler.err.proc.messager: [type.argument] -Class2.java:15:20: compiler.err.proc.messager: [type.argument] -Class2.java:15:45: compiler.err.proc.messager: [type.argument] -Class2.java:16:27: compiler.err.proc.messager: [type.arguments.not.inferred] -Class2.java:19:27: compiler.err.proc.messager: [type.arguments.not.inferred] -Class2.java:20:26: compiler.err.proc.messager: [argument] -Class2.java:24:14: compiler.err.proc.messager: [override.return] -Class2.java:25:33: compiler.err.proc.messager: [type.arguments.not.inferred] -8 errors diff --git a/checker/jtreg/nullness/issue824/Class1.astub b/checker/jtreg/nullness/issue824/Issue824_1.astub similarity index 90% rename from checker/jtreg/nullness/issue824/Class1.astub rename to checker/jtreg/nullness/issue824/Issue824_1.astub index 58b898949ea0..f9e8497025a0 100644 --- a/checker/jtreg/nullness/issue824/Class1.astub +++ b/checker/jtreg/nullness/issue824/Issue824_1.astub @@ -1,7 +1,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; - class Class1 { + class Issue824_1 { public T methodTypeParam(T t); public void classTypeParam(Q e); diff --git a/checker/jtreg/nullness/issue824/Class2.java b/checker/jtreg/nullness/issue824/Issue824_2.java similarity index 61% rename from checker/jtreg/nullness/issue824/Class2.java rename to checker/jtreg/nullness/issue824/Issue824_2.java index 98790eb74ee4..27c88cb08162 100644 --- a/checker/jtreg/nullness/issue824/Class2.java +++ b/checker/jtreg/nullness/issue824/Issue824_2.java @@ -4,15 +4,15 @@ * The defaults for type variable upper bounds with type Object changed since * the issue was filed. So, this test case has been changed so that * annotations on type variable bounds in stub files is still tested. - * @compile -Xlint:unchecked ../issue824lib/Class1.java - * @compile/fail/ref=Class2.out -XDrawDiagnostics -Xlint:unchecked -processor org.checkerframework.checker.nullness.NullnessChecker -Anomsgtext Class2.java -Astubs=Class1.astub - * @compile -Xlint:unchecked -processor org.checkerframework.checker.nullness.NullnessChecker -Anomsgtext Class2.java + * @compile -Xlint:unchecked ../issue824lib/Issue824_1.java + * @compile/fail/ref=Issue824_2.out -XDrawDiagnostics -Xlint:unchecked -processor org.checkerframework.checker.nullness.NullnessChecker -Anomsgtext Issue824_2.java -Astubs=Issue824_1.astub + * @compile -Xlint:unchecked -processor org.checkerframework.checker.nullness.NullnessChecker -Anomsgtext Issue824_2.java */ import org.checkerframework.checker.nullness.qual.Nullable; -public class Class2 extends Class1 { - void call(Class1<@Nullable X> class1, Gen<@Nullable X> gen) { +public class Issue824_2 extends Issue824_1 { + void call(Issue824_1<@Nullable X> class1, Gen<@Nullable X> gen) { class1.methodTypeParam(null); class1.classTypeParam(null); diff --git a/checker/jtreg/nullness/issue824/Issue824_2.out b/checker/jtreg/nullness/issue824/Issue824_2.out new file mode 100644 index 000000000000..0d34ce4aaeee --- /dev/null +++ b/checker/jtreg/nullness/issue824/Issue824_2.out @@ -0,0 +1,9 @@ +Issue824_2.java:14:39: compiler.err.proc.messager: [type.argument] +Issue824_2.java:15:20: compiler.err.proc.messager: [type.argument] +Issue824_2.java:15:45: compiler.err.proc.messager: [type.argument] +Issue824_2.java:16:27: compiler.err.proc.messager: [type.arguments.not.inferred] +Issue824_2.java:19:27: compiler.err.proc.messager: [type.arguments.not.inferred] +Issue824_2.java:20:26: compiler.err.proc.messager: [argument] +Issue824_2.java:24:14: compiler.err.proc.messager: [override.return] +Issue824_2.java:25:33: compiler.err.proc.messager: [type.arguments.not.inferred] +8 errors diff --git a/checker/jtreg/nullness/issue824lib/Class1.java b/checker/jtreg/nullness/issue824lib/Issue824_1.java similarity index 89% rename from checker/jtreg/nullness/issue824lib/Class1.java rename to checker/jtreg/nullness/issue824lib/Issue824_1.java index a358e8262bcc..04e87ccee363 100644 --- a/checker/jtreg/nullness/issue824lib/Class1.java +++ b/checker/jtreg/nullness/issue824lib/Issue824_1.java @@ -1,4 +1,4 @@ -public class Class1 { +public class Issue824_1 { class Gen {} public T methodTypeParam(T t) {