From d762ff30206f8789bde33a5ce6ceb52f62a46ceb Mon Sep 17 00:00:00 2001 From: aditya3434 Date: Sat, 20 Jun 2020 14:43:02 +0530 Subject: [PATCH 1/8] Transferring stubfile.astub annotations in jdk --- src/java.base/share/classes/java/lang/Exception.java | 4 +++- src/java.base/share/classes/java/lang/Object.java | 4 +++- src/java.base/share/classes/java/lang/String.java | 4 +++- src/java.base/share/classes/java/lang/StringBuffer.java | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/java.base/share/classes/java/lang/Exception.java b/src/java.base/share/classes/java/lang/Exception.java index 5b44bbbf99d6e..9c812b110261b 100644 --- a/src/java.base/share/classes/java/lang/Exception.java +++ b/src/java.base/share/classes/java/lang/Exception.java @@ -28,6 +28,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.dataflow.qual.SideEffectFree; import org.checkerframework.framework.qual.AnnotatedFor; +import org.checkerframework.common.aliasing.qual.Unique; /** * The class {@code Exception} and its subclasses are a form of @@ -46,7 +47,7 @@ * @jls 11.2 Compile-Time Checking of Exceptions * @since 1.0 */ -@AnnotatedFor({"nullness"}) +@AnnotatedFor({"aliasing", "nullness"}) public class Exception extends Throwable { static final long serialVersionUID = -3387516993124229948L; @@ -56,6 +57,7 @@ public class Exception extends Throwable { * call to {@link #initCause}. */ @SideEffectFree + @Unique public Exception() { super(); } diff --git a/src/java.base/share/classes/java/lang/Object.java b/src/java.base/share/classes/java/lang/Object.java index 65ab0b7499e47..8fb0ba5313f45 100644 --- a/src/java.base/share/classes/java/lang/Object.java +++ b/src/java.base/share/classes/java/lang/Object.java @@ -37,6 +37,7 @@ import org.checkerframework.dataflow.qual.SideEffectFree; import org.checkerframework.framework.qual.AnnotatedFor; import org.checkerframework.framework.qual.CFComment; +import org.checkerframework.common.aliasing.qual.Unique; import jdk.internal.HotSpotIntrinsicCandidate; @@ -49,7 +50,7 @@ * @see java.lang.Class * @since 1.0 */ -@AnnotatedFor({"guieffect", "index", "lock", "nullness"}) +@AnnotatedFor({"aliasing", "guieffect", "index", "lock", "nullness"}) @PolyUIType public class Object { @@ -62,6 +63,7 @@ public class Object { * Constructs a new object. */ @HotSpotIntrinsicCandidate + @Unique public Object() {} /** diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index 580da7f6cf229..08afbd27a7a5f 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -49,6 +49,7 @@ import org.checkerframework.dataflow.qual.SideEffectFree; import org.checkerframework.framework.qual.AnnotatedFor; import org.checkerframework.framework.qual.CFComment; +import org.checkerframework.common.aliasing.qual.Unique; import java.io.ObjectStreamField; import java.io.UnsupportedEncodingException; @@ -147,7 +148,7 @@ * @jls 15.18.1 String Concatenation Operator + */ -@AnnotatedFor({"formatter", "index", "interning", "lock", "nullness", "regex", "signature", "signedness"}) +@AnnotatedFor({"aliasing", "formatter", "index", "interning", "lock", "nullness", "regex", "signature", "signedness"}) public final class String implements java.io.Serializable, Comparable, CharSequence { @@ -243,6 +244,7 @@ public final class String * unnecessary since Strings are immutable. */ @SideEffectFree + @Unique public String() { this.value = "".value; this.coder = "".coder; diff --git a/src/java.base/share/classes/java/lang/StringBuffer.java b/src/java.base/share/classes/java/lang/StringBuffer.java index f6b6d9ebca1c2..3f51915b2c380 100644 --- a/src/java.base/share/classes/java/lang/StringBuffer.java +++ b/src/java.base/share/classes/java/lang/StringBuffer.java @@ -33,6 +33,7 @@ import org.checkerframework.dataflow.qual.Pure; import org.checkerframework.dataflow.qual.SideEffectFree; import org.checkerframework.framework.qual.AnnotatedFor; +import org.checkerframework.common.aliasing.qual.Unique; import java.util.Arrays; import jdk.internal.HotSpotIntrinsicCandidate; @@ -112,7 +113,7 @@ * @see java.lang.String * @since 1.0 */ -@AnnotatedFor({"lock", "nullness", "index"}) +@AnnotatedFor({"aliasing", "lock", "nullness", "index"}) public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, Comparable, CharSequence @@ -132,6 +133,7 @@ public final class StringBuffer * initial capacity of 16 characters. */ @HotSpotIntrinsicCandidate + @Unique public StringBuffer() { super(16); } From 4b317736abb7ab202a5e1d119c0b474f608c8ebf Mon Sep 17 00:00:00 2001 From: aditya3434 Date: Sat, 20 Jun 2020 17:03:46 +0530 Subject: [PATCH 2/8] Fixing String.java --- src/java.base/share/classes/java/lang/String.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index c864f206a6a14..b097a43c132b1 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -154,11 +154,7 @@ * @jls 15.18.1 String Concatenation Operator + */ -<<<<<<< HEAD @AnnotatedFor({"aliasing", "formatter", "index", "interning", "lock", "nullness", "regex", "signature", "signedness"}) -======= -@AnnotatedFor({"formatter", "index", "interning", "lock", "nullness", "regex", "signature", "signedness", "value"}) ->>>>>>> master public final class String implements java.io.Serializable, Comparable, CharSequence { @@ -253,14 +249,10 @@ public final class String * an empty character sequence. Note that use of this constructor is * unnecessary since Strings are immutable. */ - @SideEffectFree -<<<<<<< HEAD - @Unique - public String() { -======= + @StaticallyExecutable + @Unique public @StringVal("") String() { ->>>>>>> master this.value = "".value; this.coder = "".coder; } From 6cfb5ad8eb08773091492d26e7621a2ac2b34b3b Mon Sep 17 00:00:00 2001 From: aditya3434 Date: Sat, 20 Jun 2020 17:04:31 +0530 Subject: [PATCH 3/8] Fixing String.java --- src/java.base/share/classes/java/lang/String.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index b097a43c132b1..74c3bea03f570 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -250,6 +250,7 @@ public final class String * unnecessary since Strings are immutable. */ + @SideEffectFree @StaticallyExecutable @Unique public @StringVal("") String() { From 9d2e56fc38bbb19cf029666f4cfccd8b6b511dfd Mon Sep 17 00:00:00 2001 From: aditya3434 Date: Wed, 24 Jun 2020 21:26:56 +0530 Subject: [PATCH 4/8] Changing annotation position --- src/java.base/share/classes/java/lang/Exception.java | 3 +-- src/java.base/share/classes/java/lang/Object.java | 3 +-- src/java.base/share/classes/java/lang/String.java | 4 +--- src/java.base/share/classes/java/lang/StringBuffer.java | 3 +-- 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/java.base/share/classes/java/lang/Exception.java b/src/java.base/share/classes/java/lang/Exception.java index 9c812b110261b..d85f9821834dd 100644 --- a/src/java.base/share/classes/java/lang/Exception.java +++ b/src/java.base/share/classes/java/lang/Exception.java @@ -57,8 +57,7 @@ public class Exception extends Throwable { * call to {@link #initCause}. */ @SideEffectFree - @Unique - public Exception() { + public @Unique Exception() { super(); } diff --git a/src/java.base/share/classes/java/lang/Object.java b/src/java.base/share/classes/java/lang/Object.java index 8fb0ba5313f45..1a050b59e8c72 100644 --- a/src/java.base/share/classes/java/lang/Object.java +++ b/src/java.base/share/classes/java/lang/Object.java @@ -63,8 +63,7 @@ public class Object { * Constructs a new object. */ @HotSpotIntrinsicCandidate - @Unique - public Object() {} + public @Unique Object() {} /** * Returns the runtime class of this {@code Object}. The returned diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index 74c3bea03f570..7f03030b60b9a 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -249,11 +249,9 @@ public final class String * an empty character sequence. Note that use of this constructor is * unnecessary since Strings are immutable. */ - @SideEffectFree @StaticallyExecutable - @Unique - public @StringVal("") String() { + public @StringVal("") @Unique String() { this.value = "".value; this.coder = "".coder; } diff --git a/src/java.base/share/classes/java/lang/StringBuffer.java b/src/java.base/share/classes/java/lang/StringBuffer.java index 3f51915b2c380..18eccf035e8cf 100644 --- a/src/java.base/share/classes/java/lang/StringBuffer.java +++ b/src/java.base/share/classes/java/lang/StringBuffer.java @@ -133,8 +133,7 @@ public final class StringBuffer * initial capacity of 16 characters. */ @HotSpotIntrinsicCandidate - @Unique - public StringBuffer() { + public @Unique StringBuffer() { super(16); } From 048d5928d3eb4779959a488841a2d709333bea73 Mon Sep 17 00:00:00 2001 From: aditya3434 Date: Sun, 28 Jun 2020 12:53:13 +0530 Subject: [PATCH 5/8] Updating Object constructor --- src/java.base/share/classes/java/lang/Object.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/java/lang/Object.java b/src/java.base/share/classes/java/lang/Object.java index 1a050b59e8c72..9de17965279a8 100644 --- a/src/java.base/share/classes/java/lang/Object.java +++ b/src/java.base/share/classes/java/lang/Object.java @@ -63,7 +63,7 @@ public class Object { * Constructs a new object. */ @HotSpotIntrinsicCandidate - public @Unique Object() {} + public @Unique @Untainted Object() {} /** * Returns the runtime class of this {@code Object}. The returned From 211d04c071aa04ba4589dd769fd9ceaf4a788e91 Mon Sep 17 00:00:00 2001 From: aditya3434 Date: Sun, 28 Jun 2020 17:19:08 +0530 Subject: [PATCH 6/8] Annotating remaining constructors and some methods --- .../share/classes/java/lang/Exception.java | 8 +++--- .../share/classes/java/lang/String.java | 28 +++++++++---------- .../share/classes/java/lang/StringBuffer.java | 10 ++++--- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/java.base/share/classes/java/lang/Exception.java b/src/java.base/share/classes/java/lang/Exception.java index d85f9821834dd..51d57a81326ae 100644 --- a/src/java.base/share/classes/java/lang/Exception.java +++ b/src/java.base/share/classes/java/lang/Exception.java @@ -70,7 +70,7 @@ public class Exception extends Throwable { * later retrieval by the {@link #getMessage()} method. */ @SideEffectFree - public Exception(@Nullable String message) { + public @Unique Exception(@Nullable String message) { super(message); } @@ -89,7 +89,7 @@ public Exception(@Nullable String message) { * @since 1.4 */ @SideEffectFree - public Exception(@Nullable String message, @Nullable Throwable cause) { + public @Unique Exception(@Nullable String message, @Nullable Throwable cause) { super(message, cause); } @@ -108,7 +108,7 @@ public Exception(@Nullable String message, @Nullable Throwable cause) { * @since 1.4 */ @SideEffectFree - public Exception(@Nullable Throwable cause) { + public @Unique Exception(@Nullable Throwable cause) { super(cause); } @@ -126,7 +126,7 @@ public Exception(@Nullable Throwable cause) { * be writable * @since 1.7 */ - protected Exception(@Nullable String message, @Nullable Throwable cause, + protected @Unique Exception(@Nullable String message, @Nullable Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index 7f03030b60b9a..e209fcaa2d24f 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -269,7 +269,7 @@ public final class String @SideEffectFree @StaticallyExecutable @HotSpotIntrinsicCandidate - public @PolyValue String(@PolyValue String original) { + public @PolyValue @Unique String(@PolyValue String original) { this.value = original.value; this.coder = original.coder; this.hash = original.hash; @@ -286,7 +286,7 @@ public final class String */ @SideEffectFree @StaticallyExecutable - public @PolyValue String(char value @GuardSatisfied @PolyValue []) { + public @PolyValue @Unique String(char value @GuardSatisfied @PolyValue []) { this(value, 0, value.length, null); } @@ -313,7 +313,7 @@ public final class String */ @SideEffectFree @StaticallyExecutable - public String(char value @GuardSatisfied [], @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int count) { + public @Unique String(char value @GuardSatisfied [], @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int count) { this(value, offset, count, rangeCheck(value, offset, count)); } @@ -352,7 +352,7 @@ private static Void rangeCheck(char[] value, int offset, int count) { */ @SideEffectFree @StaticallyExecutable - public String(int @GuardSatisfied [] codePoints, @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int count) { + public @Unique String(int @GuardSatisfied [] codePoints, @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int count) { checkBoundsOffCount(offset, count, codePoints.length); if (count == 0) { this.value = "".value; @@ -414,7 +414,7 @@ public String(int @GuardSatisfied [] codePoints, @IndexOrHigh({"#1"}) int offset @SideEffectFree @StaticallyExecutable @Deprecated(since="1.1") - public String(byte ascii @GuardSatisfied [], int hibyte, @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int count) { + public @Unique String(byte ascii @GuardSatisfied [], int hibyte, @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int count) { checkBoundsOffCount(offset, count, ascii.length); if (count == 0) { this.value = "".value; @@ -468,7 +468,7 @@ public String(byte ascii @GuardSatisfied [], int hibyte, @IndexOrHigh({"#1"}) in @SideEffectFree @StaticallyExecutable @Deprecated(since="1.1") - public String(byte ascii @GuardSatisfied [], int hibyte) { + public @Unique String(byte ascii @GuardSatisfied [], int hibyte) { this(ascii, hibyte, 0, ascii.length); } @@ -507,7 +507,7 @@ public String(byte ascii @GuardSatisfied [], int hibyte) { */ @SideEffectFree @StaticallyExecutable - public String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int length, String charsetName) + public @Unique String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int length, String charsetName) throws UnsupportedEncodingException { if (charsetName == null) throw new NullPointerException("charsetName"); @@ -550,7 +550,7 @@ public String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) in */ @SideEffectFree @StaticallyExecutable - public String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int length, Charset charset) { + public @Unique String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int length, Charset charset) { if (charset == null) throw new NullPointerException("charset"); checkBoundsOffCount(offset, length, bytes.length); @@ -585,7 +585,7 @@ public String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) in */ @SideEffectFree @StaticallyExecutable - public String(@PolySigned byte bytes @GuardSatisfied [], String charsetName) + public @Unique String(@PolySigned byte bytes @GuardSatisfied [], String charsetName) throws UnsupportedEncodingException { this(bytes, 0, bytes.length, charsetName); } @@ -612,7 +612,7 @@ public String(@PolySigned byte bytes @GuardSatisfied [], String charsetName) */ @SideEffectFree @StaticallyExecutable - public String(@PolySigned byte bytes @GuardSatisfied [], Charset charset) { + public @Unique String(@PolySigned byte bytes @GuardSatisfied [], Charset charset) { this(bytes, 0, bytes.length, charset); } @@ -644,7 +644,7 @@ public String(@PolySigned byte bytes @GuardSatisfied [], Charset charset) { */ @SideEffectFree @StaticallyExecutable - public String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int length) { + public @Unique String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) int offset, @LTLengthOf(value={"#1"}, offset={"#2 - 1"}) @NonNegative int length) { checkBoundsOffCount(offset, length, bytes.length); StringCoding.Result ret = StringCoding.decode(bytes, offset, length); this.value = ret.value; @@ -669,7 +669,7 @@ public String(@PolySigned byte bytes @GuardSatisfied [], @IndexOrHigh({"#1"}) in */ @SideEffectFree @StaticallyExecutable - public String(@PolySigned byte @GuardSatisfied [] bytes) { + public @Unique String(@PolySigned byte @GuardSatisfied [] bytes) { this(bytes, 0, bytes.length); } @@ -684,7 +684,7 @@ public String(@PolySigned byte @GuardSatisfied [] bytes) { */ @SideEffectFree @StaticallyExecutable - public String(@GuardSatisfied StringBuffer buffer) { + public @Unique String(@GuardSatisfied StringBuffer buffer) { this(buffer.toString()); } @@ -705,7 +705,7 @@ public String(@GuardSatisfied StringBuffer buffer) { */ @SideEffectFree @StaticallyExecutable - public String(@GuardSatisfied StringBuilder builder) { + public @Unique String(@GuardSatisfied StringBuilder builder) { this(builder, null); } diff --git a/src/java.base/share/classes/java/lang/StringBuffer.java b/src/java.base/share/classes/java/lang/StringBuffer.java index 18eccf035e8cf..ae2a5565cd94e 100644 --- a/src/java.base/share/classes/java/lang/StringBuffer.java +++ b/src/java.base/share/classes/java/lang/StringBuffer.java @@ -34,6 +34,8 @@ import org.checkerframework.dataflow.qual.SideEffectFree; import org.checkerframework.framework.qual.AnnotatedFor; import org.checkerframework.common.aliasing.qual.Unique; +import org.checkerframework.common.aliasing.qual.LeakedToResult; +import org.checkerframework.common.aliasing.qual.NonLeaked; import java.util.Arrays; import jdk.internal.HotSpotIntrinsicCandidate; @@ -146,7 +148,7 @@ public final class StringBuffer * argument is less than {@code 0}. */ @HotSpotIntrinsicCandidate - public StringBuffer(@NonNegative int capacity) { + public @Unique StringBuffer(@NonNegative int capacity) { super(capacity); } @@ -158,7 +160,7 @@ public StringBuffer(@NonNegative int capacity) { * @param str the initial contents of the buffer. */ @HotSpotIntrinsicCandidate - public StringBuffer(String str) { + public @Unique StringBuffer(String str) { super(str.length() + 16); append(str); } @@ -176,7 +178,7 @@ public StringBuffer(String str) { * @param seq the sequence to copy. * @since 1.5 */ - public StringBuffer(CharSequence seq) { + public @Unique StringBuffer(CharSequence seq) { this(seq.length() + 16); append(seq); } @@ -319,7 +321,7 @@ public synchronized StringBuffer append(@Nullable Object obj) { @Override @HotSpotIntrinsicCandidate - public synchronized StringBuffer append(@Nullable String str) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked @Nullable String s) { toStringCache = null; super.append(str); return this; From d0cabbdcb0ce90a0dddfa4e28b8511c245cf404b Mon Sep 17 00:00:00 2001 From: aditya3434 Date: Sun, 28 Jun 2020 19:20:43 +0530 Subject: [PATCH 7/8] Fixing parameter --- src/java.base/share/classes/java/lang/StringBuffer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/java/lang/StringBuffer.java b/src/java.base/share/classes/java/lang/StringBuffer.java index ae2a5565cd94e..ac1e349bac58b 100644 --- a/src/java.base/share/classes/java/lang/StringBuffer.java +++ b/src/java.base/share/classes/java/lang/StringBuffer.java @@ -321,7 +321,7 @@ public synchronized StringBuffer append(@Nullable Object obj) { @Override @HotSpotIntrinsicCandidate - public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked @Nullable String s) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked @Nullable String str) { toStringCache = null; super.append(str); return this; From 1df80aaee70a6741db40aed9f674bb3fd880ef10 Mon Sep 17 00:00:00 2001 From: aditya3434 Date: Mon, 29 Jun 2020 01:12:51 +0530 Subject: [PATCH 8/8] Annotating other append functions --- .../share/classes/java/lang/StringBuffer.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/java.base/share/classes/java/lang/StringBuffer.java b/src/java.base/share/classes/java/lang/StringBuffer.java index ac1e349bac58b..60a11ee6194a0 100644 --- a/src/java.base/share/classes/java/lang/StringBuffer.java +++ b/src/java.base/share/classes/java/lang/StringBuffer.java @@ -313,7 +313,7 @@ public synchronized void setCharAt(int index, char ch) { } @Override - public synchronized StringBuffer append(@Nullable Object obj) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked @Nullable Object obj) { toStringCache = null; super.append(String.valueOf(obj)); return this; @@ -351,7 +351,7 @@ public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonL * @return a reference to this object. * @since 1.4 */ - public synchronized StringBuffer append(@Nullable StringBuffer sb) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked @Nullable StringBuffer sb) { toStringCache = null; super.append(sb); return this; @@ -361,7 +361,7 @@ public synchronized StringBuffer append(@Nullable StringBuffer sb) { * @since 1.8 */ @Override - synchronized StringBuffer append(AbstractStringBuilder asb) { + synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked AbstractStringBuilder asb) { toStringCache = null; super.append(asb); return this; @@ -389,7 +389,7 @@ synchronized StringBuffer append(AbstractStringBuilder asb) { * @since 1.5 */ @Override - public synchronized StringBuffer append(@Nullable CharSequence s) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked @Nullable CharSequence s) { toStringCache = null; super.append(s); return this; @@ -400,7 +400,7 @@ public synchronized StringBuffer append(@Nullable CharSequence s) { * @since 1.5 */ @Override - public synchronized StringBuffer append(@Nullable CharSequence s, @IndexOrHigh({"#1"}) int start, @IndexOrHigh({"#1"}) int end) + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked @Nullable CharSequence s, @IndexOrHigh({"#1"}) int start, @IndexOrHigh({"#1"}) int end) { toStringCache = null; super.append(s, start, end); @@ -408,7 +408,7 @@ public synchronized StringBuffer append(@Nullable CharSequence s, @IndexOrHigh({ } @Override - public synchronized StringBuffer append(char[] str) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked char[] str) { toStringCache = null; super.append(str); return this; @@ -418,14 +418,14 @@ public synchronized StringBuffer append(char[] str) { * @throws IndexOutOfBoundsException {@inheritDoc} */ @Override - public synchronized StringBuffer append(char[] str, @IndexOrHigh({"#1"}) int offset, @IndexOrHigh({"#1"}) int len) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked char[] str, @IndexOrHigh({"#1"}) int offset, @IndexOrHigh({"#1"}) int len) { toStringCache = null; super.append(str, offset, len); return this; } @Override - public synchronized StringBuffer append(boolean b) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked boolean b) { toStringCache = null; super.append(b); return this; @@ -433,7 +433,7 @@ public synchronized StringBuffer append(boolean b) { @Override @HotSpotIntrinsicCandidate - public synchronized StringBuffer append(char c) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked char c) { toStringCache = null; super.append(c); return this; @@ -441,7 +441,7 @@ public synchronized StringBuffer append(char c) { @Override @HotSpotIntrinsicCandidate - public synchronized StringBuffer append(int i) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked int i) { toStringCache = null; super.append(i); return this; @@ -458,21 +458,21 @@ public synchronized StringBuffer appendCodePoint(int codePoint) { } @Override - public synchronized StringBuffer append(long lng) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked long lng) { toStringCache = null; super.append(lng); return this; } @Override - public synchronized StringBuffer append(float f) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked float f) { toStringCache = null; super.append(f); return this; } @Override - public synchronized StringBuffer append(double d) { + public synchronized StringBuffer append(@LeakedToResult StringBuffer this, @NonLeaked double d) { toStringCache = null; super.append(d); return this;