IDEA-191570 Mutates contracts should be changed from "argN" to "paramN"

This commit is contained in:
Tagir Valeev
2018-05-10 12:15:00 +07:00
parent 4861c7cc17
commit c4079a4c4e
6 changed files with 107 additions and 107 deletions
@@ -14,13 +14,13 @@ public class MutationSignature {
private static final String CONTRACT_ANNOTATION = "org.jetbrains.annotations.Contract";
private static final MutationSignature UNKNOWN = new MutationSignature(false, new boolean[0]);
private static final MutationSignature PURE = new MutationSignature(false, new boolean[0]);
public static final String INVALID_TOKEN_MESSAGE = "Invalid token: %s; supported are 'this', 'arg1', 'arg2', etc.";
public static final String INVALID_TOKEN_MESSAGE = "Invalid token: %s; supported are 'this', 'param1', 'param2', etc.";
private final boolean myThis;
private final boolean[] myArgs;
private final boolean[] myParameters;
private MutationSignature(boolean mutatesThis, boolean[] args) {
private MutationSignature(boolean mutatesThis, boolean[] params) {
myThis = mutatesThis;
myArgs = args;
myParameters = params;
}
public boolean mutatesThis() {
@@ -28,7 +28,7 @@ public class MutationSignature {
}
public boolean mutatesArg(int n) {
return n < myArgs.length && myArgs[n];
return n < myParameters.length && myParameters[n];
}
public boolean preservesThis() {
@@ -55,15 +55,15 @@ public class MutationSignature {
if (part.equals("this")) {
mutatesThis = true;
}
else if (part.equals("arg")) {
else if (part.equals("param")) {
if (args.length == 0) {
args = new boolean[] {true};
} else {
args[0] = true;
}
}
else if (part.startsWith("arg")) {
int argNum = Integer.parseInt(part.substring("arg".length()));
else if (part.startsWith("param")) {
int argNum = Integer.parseInt(part.substring("param".length()));
if (argNum < 0 || argNum > 255) {
throw new IllegalArgumentException(String.format(INVALID_TOKEN_MESSAGE, part));
}
@@ -93,11 +93,11 @@ public class MutationSignature {
return "Static method cannot mutate 'this'";
}
PsiParameter[] parameters = method.getParameterList().getParameters();
if (ms.myArgs.length > parameters.length) {
return "Reference to parameter #" + ms.myArgs.length + " is invalid";
if (ms.myParameters.length > parameters.length) {
return "Reference to parameter #" + ms.myParameters.length + " is invalid";
}
for (int i = 0; i < ms.myArgs.length; i++) {
if (ms.myArgs[i]) {
for (int i = 0; i < ms.myParameters.length; i++) {
if (ms.myParameters[i]) {
PsiType type = parameters[i].getType();
if (ClassUtils.isImmutable(type)) {
return "Parameter #" + (i + 1) + " has immutable type '" + type.getPresentableText() + "'";
@@ -14,30 +14,30 @@ class Test {
@Contract(mutates = <warning descr="Static method cannot mutate 'this'">"this"</warning>)
public static void test1(List<String> list) {}
@Contract(mutates = <warning descr="Reference to parameter #3 is invalid">"arg3"</warning>)
@Contract(mutates = <warning descr="Reference to parameter #3 is invalid">"param3"</warning>)
public static void test2(List<String> list) {}
@Contract(mutates = <warning descr="Invalid token: blahblahblah; supported are 'this', 'arg1', 'arg2', etc.">"blahblahblah"</warning>)
@Contract(mutates = <warning descr="Invalid token: blahblahblah; supported are 'this', 'param1', 'param2', etc.">"blahblahblah"</warning>)
public static void test3(List<String> list) {}
@Contract(mutates = "arg")
@Contract(mutates = "param")
public static void test4(List<String> list) {}
@Contract(mutates = <warning descr="Pure method cannot have mutation contract">"arg"</warning>, pure = true)
@Contract(mutates = <warning descr="Pure method cannot have mutation contract">"param"</warning>, pure = true)
public static void test5(List<String> list) {}
@Contract(mutates = "arg", pure = false)
@Contract(mutates = "param", pure = false)
public static void test6(List<String> list) {}
@Contract(mutates = "", pure = true)
public static void test7(List<String> list) {}
@Contract(mutates = <warning descr="Parameter #1 has immutable type 'String'">"arg1"</warning>)
@Contract(mutates = <warning descr="Parameter #1 has immutable type 'String'">"param1"</warning>)
public static void test8(String s, int i, List<String> list) {}
@Contract(mutates = <warning descr="Parameter #2 has immutable type 'int'">"arg2"</warning>)
@Contract(mutates = <warning descr="Parameter #2 has immutable type 'int'">"param2"</warning>)
public static void test9(String s, int i, List<String> list) {}
@Contract(mutates = "arg3")
@Contract(mutates = "param3")
public static void test10(String s, int i, List<String> list) {}
}
@@ -12,12 +12,12 @@ public class MutabilityBasics {
return Collections.emptyList();
}
@Contract(<error descr="Cannot resolve method 'mutates'">mutates</error> = "arg")
@Contract(<error descr="Cannot resolve method 'mutates'">mutates</error> = "param")
static <T extends Comparable<T>> void sort(List<T> collection) {
Collections.sort(collection);
}
@Contract(<error descr="Cannot resolve method 'mutates'">mutates</error> = "arg1")
@Contract(<error descr="Cannot resolve method 'mutates'">mutates</error> = "param1")
static <T extends Comparable<T>> void addAll(Collection<T> collection, List<T> other) {
sort(<warning descr="Immutable object is passed where mutable is expected">other</warning>);
collection.addAll(other);
@@ -721,7 +721,7 @@
</item>
<item name='java.lang.Thread int enumerate(java.lang.Thread[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg&quot;"/>
<val name="mutates" val="&quot;param&quot;"/>
</annotation>
</item>
<item name='java.lang.Thread java.lang.StackTraceElement[] getStackTrace()'>
+81 -81
View File
@@ -368,7 +368,7 @@
</item>
<item name='java.util.Arrays void fill(boolean[], boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(boolean[], boolean) 0">
@@ -376,7 +376,7 @@
</item>
<item name='java.util.Arrays void fill(boolean[], int, int, boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(boolean[], int, int, boolean) 0">
@@ -384,7 +384,7 @@
</item>
<item name='java.util.Arrays void fill(byte[], byte)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(byte[], byte) 0">
@@ -392,7 +392,7 @@
</item>
<item name='java.util.Arrays void fill(byte[], int, int, byte)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(byte[], int, int, byte) 0">
@@ -400,7 +400,7 @@
</item>
<item name='java.util.Arrays void fill(char[], char)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(char[], char) 0">
@@ -408,7 +408,7 @@
</item>
<item name='java.util.Arrays void fill(char[], int, int, char)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(char[], int, int, char) 0">
@@ -416,7 +416,7 @@
</item>
<item name='java.util.Arrays void fill(double[], double)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(double[], double) 0">
@@ -424,7 +424,7 @@
</item>
<item name='java.util.Arrays void fill(double[], int, int, double)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(double[], int, int, double) 0">
@@ -432,7 +432,7 @@
</item>
<item name='java.util.Arrays void fill(float[], float)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(float[], float) 0">
@@ -440,7 +440,7 @@
</item>
<item name='java.util.Arrays void fill(float[], int, int, float)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(float[], int, int, float) 0">
@@ -448,7 +448,7 @@
</item>
<item name='java.util.Arrays void fill(int[], int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(int[], int) 0">
@@ -456,7 +456,7 @@
</item>
<item name='java.util.Arrays void fill(int[], int, int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(int[], int, int, int) 0">
@@ -464,7 +464,7 @@
</item>
<item name='java.util.Arrays void fill(java.lang.Object[], int, int, java.lang.Object)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(java.lang.Object[], int, int, java.lang.Object) 0">
@@ -472,7 +472,7 @@
</item>
<item name='java.util.Arrays void fill(java.lang.Object[], java.lang.Object)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(java.lang.Object[], java.lang.Object) 0">
@@ -480,7 +480,7 @@
</item>
<item name='java.util.Arrays void fill(long[], int, int, long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(long[], int, int, long) 0">
@@ -488,7 +488,7 @@
</item>
<item name='java.util.Arrays void fill(long[], long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(long[], long) 0">
@@ -496,7 +496,7 @@
</item>
<item name='java.util.Arrays void fill(short[], int, int, short)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(short[], int, int, short) 0">
@@ -504,7 +504,7 @@
</item>
<item name='java.util.Arrays void fill(short[], short)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void fill(short[], short) 0">
@@ -512,177 +512,177 @@
</item>
<item name='java.util.Arrays void parallelPrefix(T[], int, int, java.util.function.BinaryOperator&lt;T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelPrefix(T[], java.util.function.BinaryOperator&lt;T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelPrefix(double[], int, int, java.util.function.DoubleBinaryOperator)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelPrefix(double[], java.util.function.DoubleBinaryOperator)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelPrefix(int[], int, int, java.util.function.IntBinaryOperator)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelPrefix(int[], java.util.function.IntBinaryOperator)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelPrefix(long[], int, int, java.util.function.LongBinaryOperator)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelPrefix(long[], java.util.function.LongBinaryOperator)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSetAll(T[], java.util.function.IntFunction&lt;? extends T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSetAll(double[], java.util.function.IntToDoubleFunction)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSetAll(int[], java.util.function.IntUnaryOperator)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSetAll(long[], java.util.function.IntToLongFunction)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(T[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(T[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(T[], int, int, java.util.Comparator&lt;? super T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(T[], java.util.Comparator&lt;? super T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(byte[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(byte[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(char[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(char[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(double[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(double[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(float[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(float[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(int[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(int[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(long[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(long[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(short[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void parallelSort(short[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void setAll(T[], java.util.function.IntFunction&lt;? extends T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void setAll(double[], java.util.function.IntToDoubleFunction)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void setAll(int[], java.util.function.IntUnaryOperator)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void setAll(long[], java.util.function.IntToLongFunction)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void sort(T[], int, int, java.util.Comparator&lt;? super T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(T[], int, int, java.util.Comparator&lt;? super T&gt;) 0">
@@ -693,7 +693,7 @@
</item>
<item name='java.util.Arrays void sort(T[], java.util.Comparator&lt;? super T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name='java.util.Arrays void sort(T[], java.util.Comparator&lt;? super T&gt;) 0'>
@@ -704,7 +704,7 @@
</item>
<item name='java.util.Arrays void sort(byte[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(byte[]) 0">
@@ -712,7 +712,7 @@
</item>
<item name='java.util.Arrays void sort(byte[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(byte[], int, int) 0">
@@ -720,7 +720,7 @@
</item>
<item name='java.util.Arrays void sort(char[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(char[]) 0">
@@ -728,7 +728,7 @@
</item>
<item name='java.util.Arrays void sort(char[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(char[], int, int) 0">
@@ -736,7 +736,7 @@
</item>
<item name='java.util.Arrays void sort(double[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(double[]) 0">
@@ -744,7 +744,7 @@
</item>
<item name='java.util.Arrays void sort(double[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(double[], int, int) 0">
@@ -752,7 +752,7 @@
</item>
<item name='java.util.Arrays void sort(float[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(float[]) 0">
@@ -760,7 +760,7 @@
</item>
<item name='java.util.Arrays void sort(float[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(float[], int, int) 0">
@@ -768,7 +768,7 @@
</item>
<item name='java.util.Arrays void sort(int[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(int[]) 0">
@@ -776,7 +776,7 @@
</item>
<item name='java.util.Arrays void sort(int[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(int[], int, int) 0">
@@ -784,7 +784,7 @@
</item>
<item name='java.util.Arrays void sort(java.lang.Object[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(java.lang.Object[]) 0">
@@ -792,7 +792,7 @@
</item>
<item name='java.util.Arrays void sort(java.lang.Object[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(java.lang.Object[], int, int) 0">
@@ -800,7 +800,7 @@
</item>
<item name='java.util.Arrays void sort(long[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(long[]) 0">
@@ -808,7 +808,7 @@
</item>
<item name='java.util.Arrays void sort(long[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(long[], int, int) 0">
@@ -816,7 +816,7 @@
</item>
<item name='java.util.Arrays void sort(short[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(short[]) 0">
@@ -824,7 +824,7 @@
</item>
<item name='java.util.Arrays void sort(short[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Arrays void sort(short[], int, int) 0">
@@ -1056,7 +1056,7 @@
</item>
<item name='java.util.Collections boolean addAll(java.util.Collection&lt;? super T&gt;, T...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections boolean addAll(java.util.Collection&lt;? super T&gt;, T...) 0">
@@ -1073,7 +1073,7 @@
</item>
<item name='java.util.Collections boolean replaceAll(java.util.List&lt;T&gt;, T, T)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections boolean replaceAll(java.util.List&lt;T&gt;, T, T) 0">
@@ -1297,7 +1297,7 @@
</item>
<item name='java.util.Collections void copy(java.util.List&lt;? super T&gt;, java.util.List&lt;? extends T&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void copy(java.util.List&lt;? super T&gt;, java.util.List&lt;? extends T&gt;) 0">
@@ -1308,7 +1308,7 @@
</item>
<item name="java.util.Collections void fill(java.util.List&lt;? super T&gt;, T)">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void fill(java.util.List&lt;? super T&gt;, T) 0">
@@ -1316,7 +1316,7 @@
</item>
<item name="java.util.Collections void reverse(java.util.List&lt;?&gt;)">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void reverse(java.util.List&lt;?&gt;) 0">
@@ -1324,7 +1324,7 @@
</item>
<item name="java.util.Collections void rotate(java.util.List&lt;?&gt;, int)">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void rotate(java.util.List&lt;?&gt;, int) 0">
@@ -1332,7 +1332,7 @@
</item>
<item name="java.util.Collections void shuffle(java.util.List&lt;?&gt;)">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void shuffle(java.util.List&lt;?&gt;) 0">
@@ -1340,7 +1340,7 @@
</item>
<item name="java.util.Collections void shuffle(java.util.List&lt;?&gt;, java.util.Random)">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void shuffle(java.util.List&lt;?&gt;, java.util.Random) 0">
@@ -1351,7 +1351,7 @@
</item>
<item name="java.util.Collections void sort(java.util.List&lt;T&gt;)">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void sort(java.util.List&lt;T&gt;) 0">
@@ -1359,7 +1359,7 @@
</item>
<item name="java.util.Collections void sort(java.util.List&lt;T&gt;, java.util.Comparator&lt;? super T&gt;)">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void sort(java.util.List&lt;T&gt;, java.util.Comparator&lt;? super T&gt;) 0">
@@ -1370,7 +1370,7 @@
</item>
<item name="java.util.Collections void swap(java.util.List&lt;?&gt;, int, int)">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;arg1&quot;"/>
<val name="mutates" val="&quot;param1&quot;"/>
</annotation>
</item>
<item name="java.util.Collections void swap(java.util.List&lt;?&gt;, int, int) 0">
@@ -81,9 +81,9 @@ public @interface Contract {
* The following values are possible:
* <table summary="">
* <tr><td>"this"</td><td>Method mutates the receiver object, and doesn't mutates any objects passed as arguments (cannot be applied for static method or constructor)</td></tr>
* <tr><td>"arg"</td><td>Method mutates the sole argument and doesn't mutate the receiver object (if applicable)</td></tr>
* <tr><td>"arg1", "arg2", ...</td><td>Method mutates the N-th argument</td></tr>
* <tr><td>"this,arg1"</td><td>Method mutates the receiver and first argument and doesn't mutate any other arguments</td></tr>
* <tr><td>"param"</td><td>Method mutates the sole argument and doesn't mutate the receiver object (if applicable)</td></tr>
* <tr><td>"param1", "param2", ...</td><td>Method mutates the N-th argument</td></tr>
* <tr><td>"this,param1"</td><td>Method mutates the receiver and first argument and doesn't mutate any other arguments</td></tr>
* </table>
*
* <strong>Warning: This annotation parameter is experimental and may be changed or removed without further notice!</strong>