diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000000..1ca8b047bc6 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,22 @@ +{ + "enabledPlugins": { + "rust-analyzer-lsp@claude-plugins-official": true + } + "permissions": { + "allow": [ + "WebFetch(domain:checkerframework.org)", + "Bash(mkdir:*)", + "Bash(./gradlew:*)", + "Bash(git -C /home/mernst/research/types/checker-framework-fork-mernst-branch-override-order diff master..override-order --stat)" + "Bash(git -C /home/mernst/research/types/checker-framework-fork-mernst-branch-override-order log master..override-order --oneline)", + "Bash(java:*)", + "Bash(javac:*)", + "Bash(ls)", + "Bash(timeout 300 ./gradlew:*)", + "Bash(./x.py check:*)", + "Read(//scratch/mernst/**)" + ], + "deny": [], + "ask": [] + } +} diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 00000000000..bcd9365ae43 --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,46 @@ +# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json + +language: "en-US" + +reviews: + profile: "assertive" + high_level_summary: false + review_status: false + collapse_walkthrough: true + changed_files_summary: false + sequence_diagrams: false + estimate_code_review_effort: false + in_progress_fortune: false + poem: false + path_filters: + - "!**/build/**" + - "!**/out/**" + - "!**/.gradle/**" + - "!**/.idea/**" + - "!**/node_modules/**" + auto_review: + auto_pause_after_reviewed_commits: 0 + ignore_title_keywords: + - "wip" + - "draft" + ignore_usernames: + - "dependabot" + - "dependabot[bot]" + - "mend" + - "renovate" + - "renovate[bot]" + pre_merge_checks: + title: + mode: "off" + description: + mode: "off" + +chat: + art: false + +knowledge_base: + code_guidelines: + enabled: true + filePatterns: + - "**/.cursorrules" + - "**/CODING_STANDARDS.md" diff --git a/src/java.base/share/classes/java/lang/System.java b/src/java.base/share/classes/java/lang/System.java index fd8cf225401..9a6a386a39b 100644 --- a/src/java.base/share/classes/java/lang/System.java +++ b/src/java.base/share/classes/java/lang/System.java @@ -31,6 +31,7 @@ import org.checkerframework.checker.mustcall.qual.MustCall; import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.PolyNull; +import org.checkerframework.checker.regex.qual.Regex; import org.checkerframework.checker.signedness.qual.PolySigned; import org.checkerframework.dataflow.qual.Pure; import org.checkerframework.dataflow.qual.SideEffectFree; @@ -122,7 +123,7 @@ * * @since 1.0 */ -@AnnotatedFor({"index", "interning", "lock", "mustcall", "nullness", "signedness"}) +@AnnotatedFor({"index", "interning", "lock", "mustcall", "nullness", "regex", "signedness"}) public final @UsesObjectEquals class System { /* Register the natives via the static initializer. * @@ -905,7 +906,7 @@ public static Properties getProperties() { * @since 1.7 */ @Pure - public static String lineSeparator() { + public static @Regex String lineSeparator() { return lineSeparator; } diff --git a/src/java.base/share/classes/java/lang/ThreadGroup.java b/src/java.base/share/classes/java/lang/ThreadGroup.java index f994598eee3..8ec6a4fb649 100644 --- a/src/java.base/share/classes/java/lang/ThreadGroup.java +++ b/src/java.base/share/classes/java/lang/ThreadGroup.java @@ -550,7 +550,8 @@ public int activeGroupCount() { * the current thread cannot access this thread group */ public @NonNegative int enumerate(ThreadGroup[] list, boolean recurse) { - Objects.requireNonNull(list); checkAccess(); + Objects.requireNonNull(list); + checkAccess(); return enumerate(list, 0, recurse); } diff --git a/src/java.base/share/classes/java/net/HttpURLConnection.java b/src/java.base/share/classes/java/net/HttpURLConnection.java index b501fa25e45..8fc5fcc8284 100644 --- a/src/java.base/share/classes/java/net/HttpURLConnection.java +++ b/src/java.base/share/classes/java/net/HttpURLConnection.java @@ -25,6 +25,9 @@ package java.net; +import org.checkerframework.checker.mustcall.qual.InheritableMustCall; +import org.checkerframework.framework.qual.AnnotatedFor; + import java.io.InputStream; import java.io.IOException; import java.security.Permission; @@ -66,6 +69,8 @@ * @see java.net.HttpURLConnection#disconnect() * @since 1.1 */ +@AnnotatedFor("mustcall") +@InheritableMustCall("disconnect") public abstract class HttpURLConnection extends URLConnection { /* instance variables */ diff --git a/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java b/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java index cbd24ee2f0b..da3ab40ec6a 100644 --- a/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java +++ b/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java @@ -25,6 +25,9 @@ package sun.net.www.protocol.http; +import org.checkerframework.checker.mustcall.qual.InheritableMustCall; +import org.checkerframework.framework.qual.AnnotatedFor; + import java.security.PrivilegedAction; import java.util.Arrays; import java.net.URL; @@ -98,6 +101,8 @@ */ +@AnnotatedFor("mustcall") +@InheritableMustCall("disconnect") public class HttpURLConnection extends java.net.HttpURLConnection { static final String HTTP_CONNECT = "CONNECT"; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java index e737f56b362..89b78a63d5b 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java @@ -340,7 +340,8 @@ public FileObject getFileForOutputForOriginatingFiles(Location location, String } } - @Override @DefinedBy(Api.COMPILER) public boolean contains(Location location, FileObject file) throws IOException { + @Override @DefinedBy(Api.COMPILER) + public boolean contains(Location location, FileObject file) throws IOException { try { return clientJavaFileManager.contains(location, unwrap(file)); } catch (ClientCodeException e) {