[java-dfa] IDEA-355908 Add new mutation contract option: io

GitOrigin-RevId: 206fae268d8444d475a4feac6ebc5ef96ffc57bb
This commit is contained in:
Tagir Valeev
2024-07-04 16:18:18 +02:00
committed by intellij-monorepo-bot
parent 218c446c7e
commit d52f6c789f
12 changed files with 1149 additions and 17 deletions

View File

@@ -577,7 +577,7 @@ element.kind.objects=objects
mutation.signature.problem.static.method.cannot.mutate.this=Static method cannot mutate 'this'
mutation.signature.problem.reference.to.parameter.invalid=Reference to parameter #{0} is invalid
mutation.signature.problem.parameter.has.immutable.type=Parameter #{0} has immutable type ''{1}''
mutation.signature.problem.invalid.token=Invalid token: {0}; supported are ''this'', ''param1'', ''param2'', and so on.
mutation.signature.problem.invalid.token=Invalid token: {0}; supported are ''this'', ''io'', ''param1'', ''param2'', and so on.
required.type=Required type
provided.type=Provided
type.mismatch.reason=reason: {0}

View File

@@ -2486,6 +2486,7 @@ create.missing.switch.branches=Create missing branches: {0}
redundant.as.list.for.iteration.problem=Unnecessary 'Arrays.asList()' call
redundant.as.list.for.iteration.fix.name=Unwrap
assert.with.side.effects.call.mutates.expression=call to ''{0}()'' mutates ''{1}''
assert.with.side.effects.call.performs.io=call to ''{0}()'' performs input/output operation
assert.with.side.effects.call.mutates.field=call to ''{0}()'' mutates field ''{1}''
inspection.comparator.combinators.fix.chain=Replace with 'Comparator' chain
constant.on.lhs.of.comparison.options.item.left=left

View File

@@ -26,14 +26,16 @@ import java.util.stream.Stream;
*/
public final class MutationSignature {
public static final String ATTR_MUTATES = "mutates";
static final MutationSignature UNKNOWN = new MutationSignature(false, new boolean[0]);
static final MutationSignature PURE = new MutationSignature(false, new boolean[0]);
private static final MutationSignature MUTATES_THIS_ONLY = new MutationSignature(true, new boolean[0]);
static final MutationSignature UNKNOWN = new MutationSignature(false, false, new boolean[0]);
static final MutationSignature PURE = new MutationSignature(false, false, new boolean[0]);
private static final MutationSignature MUTATES_THIS_ONLY = new MutationSignature(true, false, new boolean[0]);
private final boolean myThis;
private final boolean myIo;
private final boolean[] myParameters;
private MutationSignature(boolean mutatesThis, boolean[] params) {
private MutationSignature(boolean mutatesThis, boolean io, boolean[] params) {
myThis = mutatesThis;
myIo = io;
myParameters = params;
}
@@ -44,6 +46,13 @@ public final class MutationSignature {
return myThis;
}
/**
* @return true if the method may perform input/output operations
*/
public boolean performsIO() {
return myIo;
}
/**
* @param n argument number (zero-based)
* @return true if the method may mutate given argument
@@ -72,7 +81,7 @@ public final class MutationSignature {
*/
public MutationSignature alsoMutatesThis() {
return this == UNKNOWN || myThis ? this :
isPure() ? MUTATES_THIS_ONLY : new MutationSignature(true, myParameters);
isPure() ? MUTATES_THIS_ONLY : new MutationSignature(true, myIo, myParameters);
}
/**
@@ -83,7 +92,7 @@ public final class MutationSignature {
if (myParameters.length > n && myParameters[n]) return this;
boolean[] params = Arrays.copyOf(myParameters, Math.max(n + 1, myParameters.length));
params[n] = true;
return new MutationSignature(myThis, params);
return new MutationSignature(myThis, myIo, params);
}
/**
@@ -95,15 +104,15 @@ public final class MutationSignature {
@Override
public int hashCode() {
return (myThis ? 137 : 731) + Arrays.hashCode(myParameters);
return (myThis ? 4247 : 22661) + (myIo ? 137 : 731) + Arrays.hashCode(myParameters);
}
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if ((this == UNKNOWN) != (obj == UNKNOWN)) return false;
return obj instanceof MutationSignature && ((MutationSignature)obj).myThis == myThis &&
Arrays.equals(((MutationSignature)obj).myParameters, myParameters);
return obj instanceof MutationSignature signature && signature.myThis == myThis && signature.myIo == myIo &&
Arrays.equals(signature.myParameters, myParameters);
}
@Override
@@ -111,7 +120,7 @@ public final class MutationSignature {
if (isPure()) return "(pure)";
if (this == UNKNOWN) return "(unknown)";
return IntStreamEx.range(myParameters.length).mapToEntry(idx -> "param" + (idx + 1), idx -> myParameters[idx])
.prepend("this", myThis).filterValues(b -> b).keys().joining(",");
.prepend("this", myThis).prepend("io", myIo).filterValues(b -> b).keys().joining(",");
}
/**
@@ -137,10 +146,10 @@ public final class MutationSignature {
}
/**
* @return true if known to mutate any parameter or receiver; false if pure or not known
* @return true if known to mutate any parameter or receiver, or performs an input/output; false if pure or not known
*/
public boolean mutatesAnything() {
if (myThis) return true;
if (myThis || myIo) return true;
for (boolean parameter : myParameters) {
if (parameter) return true;
}
@@ -157,12 +166,16 @@ public final class MutationSignature {
return UNKNOWN;
}
boolean mutatesThis = false;
boolean mutatesIO = false;
boolean[] args = {};
for (String part : signature.split(",")) {
part = part.trim();
if (part.equals("this")) {
mutatesThis = true;
}
else if (part.startsWith("io")) {
mutatesIO = true;
}
else if (part.equals("param")) {
if (args.length == 0) {
args = new boolean[] {true};
@@ -184,7 +197,7 @@ public final class MutationSignature {
throw new IllegalArgumentException(JavaAnalysisBundle.message("mutation.signature.problem.invalid.token", part));
}
}
return new MutationSignature(mutatesThis, args);
return new MutationSignature(mutatesThis, mutatesIO, args);
}
/**

View File

@@ -99,6 +99,9 @@ public final class AssertWithSideEffectsInspection extends BaseInspection {
if (JavaMethodContractUtil.isPure(method)) return null;
MutationSignature signature = MutationSignature.fromMethod(method);
if (signature.mutatesAnything()) {
if (signature.performsIO()) {
return InspectionGadgetsBundle.message("assert.with.side.effects.call.performs.io", method.getName());
}
PsiExpression expression =
signature.mutatedExpressions(call).filter(expr -> !ExpressionUtils.isNewObject(expr)).findFirst().orElse(null);
if (expression != null) {

View File

@@ -254,7 +254,7 @@ public final class ExtractMethodRecommenderInspection extends AbstractBaseJavaLo
MutationSignature signature = MutationSignature.fromCall(expression);
if (!assumeOkMethod(expression) &&
(ExpressionUtils.isVoidContext(expression) ||
signature == MutationSignature.unknown() ||
signature == MutationSignature.unknown() || signature.performsIO() ||
signature.mutatedExpressions(expression).map(ExpressionUtils::resolveLocalVariable)
.anyMatch(var -> !isInside(var)))) {
addSideEffect();

View File

@@ -1,6 +1,7 @@
package com.siyeh.igtest.bugs.assert_with_side_effects;
import java.sql.*;
import java.util.*;
import java.io.*;
public class AssertWithSideEffects {
private int sideEffect = 0;
@@ -31,4 +32,8 @@ public class AssertWithSideEffects {
void jdbc(ResultSet rs) throws SQLException {
<warning descr="'assert' has side effects: call to 'last()' mutates 'rs'">assert</warning> rs.last();
}
void io(InputStream is) throws IOException {
<warning descr="'assert' has side effects: call to 'read()' performs input/output operation">assert</warning> is.read() != -1;
}
}

View File

@@ -17,7 +17,7 @@ class Test {
@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', 'param1', 'param2', and so on.">"blahblahblah"</warning>)
@Contract(mutates = <warning descr="Invalid token: blahblahblah; supported are 'this', 'io', 'param1', 'param2', and so on.">"blahblahblah"</warning>)
public static void test3(List<String> list) {}
@Contract(mutates = "param")

View File

@@ -0,0 +1,25 @@
import java.io.IOException;
import java.io.InputStream;
public class IoContracts {
int x;
void simple() {
x = 1;
System.out.println(x);
if (<warning descr="Condition 'x == 1' is always 'true'">x == 1</warning>) {
System.out.println("Still 1");
}
}
void inputStream(byte[] data, short[] data2, InputStream in) throws IOException {
if (data[0] == 0) return;
if (data2[0] == 0) return;
if (in.read() == -1) return;
if (<warning descr="Condition 'data[0] == 0' is always 'false'">data[0] == 0</warning>) return;
if (<warning descr="Condition 'data2[0] == 0' is always 'false'">data2[0] == 0</warning>) return;
if (in.read(data) == 0) return;
if (data[0] == 0) return;
if (<warning descr="Condition 'data2[0] == 0' is always 'false'">data2[0] == 0</warning>) return;
}
}

View File

@@ -762,4 +762,5 @@ public class DataFlowInspectionTest extends DataFlowInspectionTestCase {
public void testAssignAndReturnVolatile() { doTest(); }
public void testQualifiedValueFromConstant() { doTest();}
public void testFieldAliasing() { doTest();}
public void testIoContracts() { doTest(); }
}

View File

@@ -12,14 +12,22 @@ public class MutationSignatureTest {
public void testParse() {
MutationSignature sig = MutationSignature.parse("this");
assertTrue(sig.mutatesThis());
assertFalse(sig.performsIO());
assertFalse(sig.mutatesArg(0));
sig = MutationSignature.parse("param1 , param2");
assertFalse(sig.mutatesThis());
assertFalse(sig.performsIO());
assertTrue(sig.mutatesArg(0));
assertTrue(sig.mutatesArg(1));
assertFalse(sig.mutatesArg(2));
sig = MutationSignature.parse("");
assertFalse(sig.mutatesThis());
assertFalse(sig.performsIO());
assertFalse(sig.mutatesArg(0));
sig = MutationSignature.parse("this,io");
assertTrue(sig.mutatesThis());
assertTrue(sig.performsIO());
assertFalse(sig.mutatesArg(0));
assertFalse(sig.mutatesArg(1));
}
}

View File

@@ -51,6 +51,11 @@
<item name="java.io.BufferedReader int read(char[], int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.BufferedReader java.lang.String readLine()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.BufferedWriter BufferedWriter(java.io.Writer) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
@@ -63,8 +68,111 @@
<item name="java.io.BufferedWriter void write(java.lang.String, int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.ByteArrayInputStream byte[] readAllBytes()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayInputStream int available()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayInputStream int read()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayInputStream int read(byte[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,param1&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayInputStream int readNBytes(byte[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,param1&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayInputStream long skip(long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayInputStream void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayInputStream void mark(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayInputStream void reset()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream byte[] toByteArray()'>
<annotation name='org.jetbrains.annotations.NotNull'/>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream int size()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream java.lang.String toString()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream java.lang.String toString(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream java.lang.String toString(java.lang.String)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream java.lang.String toString(java.nio.charset.Charset)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream void reset()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream void write(byte[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream void write(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream void writeBytes(byte[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.ByteArrayOutputStream void writeTo(java.io.OutputStream)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io,param1&quot;"/>
</annotation>
</item>
<item name='java.io.DataInput int readUnsignedByte()'>
<annotation name='org.jetbrains.annotations.Range'>
@@ -167,13 +275,117 @@
<item name="java.io.File File(java.net.URI) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.File boolean canExecute()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean canRead()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean canWrite()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean createNewFile()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean delete()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean exists()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean isAbsolute()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.File boolean isDirectory()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean isFile()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean isHidden()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean mkdir()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean mkdirs()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean renameTo(java.io.File)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean setExecutable(boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean setExecutable(boolean, boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean setLastModified(long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean setReadOnly()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean setReadable(boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean setReadable(boolean, boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean setWritable(boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File boolean setWritable(boolean, boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name="java.io.File java.io.File createTempFile(java.lang.String, java.lang.String)">
<annotation name="org.jetbrains.annotations.NotNull" />
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;new&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name="java.io.File java.io.File createTempFile(java.lang.String, java.lang.String) 0">
<annotation name="org.jetbrains.annotations.NonNls" />
@@ -184,6 +396,10 @@
</item>
<item name="java.io.File java.io.File createTempFile(java.lang.String, java.lang.String, java.io.File)">
<annotation name="org.jetbrains.annotations.NotNull" />
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_-&gt;new&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name="java.io.File java.io.File createTempFile(java.lang.String, java.lang.String, java.io.File) 0">
<annotation name="org.jetbrains.annotations.NonNls" />
@@ -208,6 +424,9 @@
</item>
<item name="java.io.File java.io.File[] listFiles()">
<annotation name="org.jetbrains.annotations.Nullable" />
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File java.io.File[] listFiles(java.io.FileFilter)'>
<annotation name='org.jetbrains.annotations.Nullable'/>
@@ -221,6 +440,11 @@
<item name='java.io.File java.io.File[] listFiles(java.io.FilenameFilter) 0'>
<annotation name='org.jetbrains.annotations.Nullable'/>
</item>
<item name='java.io.File java.io.File[] listRoots()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name="java.io.File java.lang.String getAbsolutePath()">
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
@@ -249,6 +473,9 @@
</item>
<item name='java.io.File java.lang.String[] list()'>
<annotation name='org.jetbrains.annotations.Nullable'/>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File java.lang.String[] list(java.io.FilenameFilter)'>
<annotation name='org.jetbrains.annotations.Nullable'/>
@@ -265,6 +492,40 @@
</annotation>
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.File long getFreeSpace()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File long getTotalSpace()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File long getUsableSpace()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File long lastModified()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File long length()'>
<annotation name='org.jetbrains.annotations.Range'>
<val name="from" val="0"/>
<val name="to" val="java.lang.Long.MAX_VALUE"/>
</annotation>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.File void deleteOnExit()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.io.FileInputStream FileInputStream(java.io.File) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
@@ -367,17 +628,45 @@
<item name="java.io.FilterReader FilterReader(java.io.Reader) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.InputStream boolean markSupported()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.InputStream byte[] readAllBytes()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.InputStream byte[] readNBytes(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.InputStream int available()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name="java.io.InputStream int read()">
<annotation name='org.jetbrains.annotations.Range'>
<val name="from" val="-1"/>
<val name="to" val="255"/>
</annotation>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.InputStream int read(byte[])">
<annotation name='org.jetbrains.annotations.Range'>
<val name="from" val="-1"/>
<val name="to" val="java.lang.Integer.MAX_VALUE"/>
</annotation>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io,param1&quot;"/>
</annotation>
</item>
<item name="java.io.InputStream int read(byte[]) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
@@ -387,15 +676,51 @@
<val name="from" val="-1"/>
<val name="to" val="java.lang.Integer.MAX_VALUE"/>
</annotation>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io,param1&quot;"/>
</annotation>
</item>
<item name="java.io.InputStream int read(byte[], int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.InputStream int readNBytes(byte[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io,param1&quot;"/>
</annotation>
</item>
<item name="java.io.InputStream long skip(long)">
<annotation name='org.jetbrains.annotations.Range'>
<val name="from" val="0"/>
<val name="to" val="java.lang.Long.MAX_VALUE"/>
</annotation>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.InputStream long transferTo(java.io.OutputStream)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,param,io&quot;"/>
</annotation>
</item>
<item name='java.io.InputStream void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.InputStream void mark(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.InputStream void reset()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.InputStream void skipNBytes(long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.InputStreamReader InputStreamReader(java.io.InputStream) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
@@ -433,12 +758,37 @@
<item name='java.io.InputStreamReader int read(char[], int, int) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.OutputStream void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.OutputStream void flush()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.OutputStream void write(byte[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.OutputStream void write(byte[]) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.OutputStream void write(byte[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.OutputStream void write(byte[], int, int) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.OutputStream void write(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.OutputStreamWriter OutputStreamWriter(java.io.OutputStream) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
@@ -496,39 +846,202 @@
<item name='java.io.PrintStream PrintStream(java.lang.String, java.lang.String) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.PrintStream java.io.PrintStream append(char)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_-&gt;this&quot;"/>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream java.io.PrintStream append(java.lang.CharSequence)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_-&gt;this&quot;"/>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream java.io.PrintStream append(java.lang.CharSequence, int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_ -&gt; this&quot;"/>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream java.io.PrintStream format(java.lang.String, java.lang.Object...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream java.io.PrintStream format(java.lang.String, java.lang.Object...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.PrintStream java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.PrintStream java.io.PrintStream printf(java.lang.String, java.lang.Object...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream java.io.PrintStream printf(java.lang.String, java.lang.Object...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.PrintStream java.io.PrintStream printf(java.util.Locale, java.lang.String, java.lang.Object...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream java.io.PrintStream printf(java.util.Locale, java.lang.String, java.lang.Object...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.PrintStream void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void flush()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(char)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(char[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(char[]) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.PrintStream void print(double)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(float)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(java.lang.Object)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(java.lang.Object) 0'>
<annotation name='org.jetbrains.annotations.Nullable'/>
</item>
<item name='java.io.PrintStream void print(java.lang.String)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void print(java.lang.String) 0'>
<annotation name='org.jetbrains.annotations.Nullable'/>
</item>
<item name='java.io.PrintStream void print(long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(char)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(char[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(char[]) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.PrintStream void println(double)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(float)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(java.lang.Object)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(java.lang.Object) 0'>
<annotation name='org.jetbrains.annotations.Nullable'/>
</item>
<item name='java.io.PrintStream void println(java.lang.String) 0'>
<item name='java.io.PrintStream void println(java.lang.String)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void println(java.lang.String) 0'>
<annotation name='org.jetbrains.annotations.Nullable'/>
</item>
<item name='java.io.PrintStream void println(long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void write(byte[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void write(byte[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void write(byte[], int, int) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.io.PrintStream void write(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintStream void writeBytes(byte[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.PrintWriter PrintWriter(java.io.File) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
@@ -595,17 +1108,33 @@
<item name="java.io.Reader Reader(java.lang.Object) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.Reader boolean markSupported()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.Reader boolean ready()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.Reader int read()">
<annotation name='org.jetbrains.annotations.Range'>
<val name="from" val="-1"/>
<val name="to" val="0xFFFF"/>
</annotation>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.Reader int read(char[])">
<annotation name='org.jetbrains.annotations.Range'>
<val name="from" val="-1"/>
<val name="to" val="java.lang.Integer.MAX_VALUE"/>
</annotation>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io,param1&quot;"/>
</annotation>
</item>
<item name="java.io.Reader int read(char[]) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
@@ -615,40 +1144,211 @@
<val name="from" val="-1"/>
<val name="to" val="java.lang.Integer.MAX_VALUE"/>
</annotation>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io,param1&quot;"/>
</annotation>
</item>
<item name="java.io.Reader int read(char[], int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.Reader int read(java.nio.CharBuffer)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io,param1&quot;"/>
</annotation>
</item>
<item name="java.io.Reader int read(java.nio.CharBuffer) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.Reader long skip(long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Reader long transferTo(java.io.Writer)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io,param1&quot;"/>
</annotation>
</item>
<item name='java.io.Reader void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Reader void mark(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Reader void reset()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.StringReader StringReader(java.lang.String) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.StringReader boolean ready()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringReader int read()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringReader int read(char[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,param1&quot;"/>
</annotation>
</item>
<item name="java.io.StringReader int read(char[], int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.StringReader long skip(long)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringReader void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringReader void mark(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringReader void reset()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringWriter java.io.StringWriter append(char)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_-&gt;this&quot;"/>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringWriter java.io.StringWriter append(java.lang.CharSequence)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_-&gt;this&quot;"/>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringWriter java.io.StringWriter append(java.lang.CharSequence, int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_-&gt;this&quot;"/>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringWriter java.lang.String toString()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.StringWriter java.lang.StringBuffer getBuffer()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.StringWriter void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.StringWriter void flush()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="pure" val="true"/>
</annotation>
</item>
<item name='java.io.StringWriter void write(char[], int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name="java.io.StringWriter void write(char[], int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.StringWriter void write(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name='java.io.StringWriter void write(java.lang.String)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name="java.io.StringWriter void write(java.lang.String) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.StringWriter void write(java.lang.String, int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this&quot;"/>
</annotation>
</item>
<item name="java.io.StringWriter void write(java.lang.String, int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name="java.io.Writer Writer(java.lang.Object) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.Writer java.io.Writer append(char)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Writer java.io.Writer append(java.lang.CharSequence)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Writer java.io.Writer append(java.lang.CharSequence, int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Writer void close()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Writer void flush()'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Writer void write(char[])'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.Writer void write(char[]) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name="java.io.Writer void write(char[], int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.Writer void write(int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name='java.io.Writer void write(java.lang.String)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.Writer void write(java.lang.String) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>
<item name='java.io.Writer void write(java.lang.String, int, int)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;this,io&quot;"/>
</annotation>
</item>
<item name="java.io.Writer void write(java.lang.String, int, int) 0">
<annotation name="org.jetbrains.annotations.NotNull" />
</item>

View File

@@ -10,6 +10,11 @@
<annotation name='org.jetbrains.annotations.NotNull'/>
<annotation name='org.jetbrains.annotations.NonNls'/>
</item>
<item name='java.nio.file.Files A readAttributes(java.nio.file.Path, java.lang.Class&lt;A&gt;, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files A readAttributes(java.nio.file.Path, java.lang.Class&lt;A&gt;, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
@@ -19,45 +24,105 @@
<item name='java.nio.file.Files A readAttributes(java.nio.file.Path, java.lang.Class&lt;A&gt;, java.nio.file.LinkOption...) 2'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files V getFileAttributeView(java.nio.file.Path, java.lang.Class&lt;V&gt;, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files V getFileAttributeView(java.nio.file.Path, java.lang.Class&lt;V&gt;, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files V getFileAttributeView(java.nio.file.Path, java.lang.Class&lt;V&gt;, java.nio.file.LinkOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean deleteIfExists(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean deleteIfExists(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean exists(java.nio.file.Path, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean exists(java.nio.file.Path, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isDirectory(java.nio.file.Path, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean isDirectory(java.nio.file.Path, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isExecutable(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean isExecutable(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isHidden(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean isHidden(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isReadable(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean isReadable(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isSameFile(java.nio.file.Path, java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean isSameFile(java.nio.file.Path, java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isSameFile(java.nio.file.Path, java.nio.file.Path) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isSymbolicLink(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean isSymbolicLink(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean isWritable(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean isWritable(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files boolean notExists(java.nio.file.Path, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files boolean notExists(java.nio.file.Path, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
@@ -66,127 +131,314 @@
</item>
<item name='java.nio.file.Files byte[] readAllBytes(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.NotNull'/>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files byte[] readAllBytes(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.io.BufferedReader newBufferedReader(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_-&gt;new&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;new&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_-&gt;new&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;new&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.NotNull'/>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.lang.Object getAttribute(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.lang.Object getAttribute(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.lang.Object getAttribute(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.lang.String probeContentType(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.lang.String probeContentType(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.lang.String readString(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.lang.String readString(java.nio.file.Path, java.nio.charset.Charset)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.NotNull'/>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.nio.file.OpenOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set&lt;? extends java.nio.file.OpenOption&gt;, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set&lt;? extends java.nio.file.OpenOption&gt;, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set&lt;? extends java.nio.file.OpenOption&gt;, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.DirectoryStream&lt;java.nio.file.Path&gt; newDirectoryStream(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.DirectoryStream&lt;java.nio.file.Path&gt; newDirectoryStream(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.DirectoryStream&lt;java.nio.file.Path&gt; newDirectoryStream(java.nio.file.Path, java.lang.String)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.DirectoryStream&lt;java.nio.file.Path&gt; newDirectoryStream(java.nio.file.Path, java.lang.String) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.DirectoryStream&lt;java.nio.file.Path&gt; newDirectoryStream(java.nio.file.Path, java.lang.String) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.DirectoryStream&lt;java.nio.file.Path&gt; newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter&lt;? super java.nio.file.Path&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.DirectoryStream&lt;java.nio.file.Path&gt; newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter&lt;? super java.nio.file.Path&gt;) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.DirectoryStream&lt;java.nio.file.Path&gt; newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter&lt;? super java.nio.file.Path&gt;) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.FileStore getFileStore(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.FileStore getFileStore(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_-&gt;param2&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path createDirectories(java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path createDirectories(java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path createFile(java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path createFile(java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path createTempDirectory(java.lang.String, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item
name='java.nio.file.Files java.nio.file.Path createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path createTempFile(java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item
name='java.nio.file.Files java.nio.file.Path createTempFile(java.nio.file.Path, java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute&lt;?&gt;...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path createTempFile(java.nio.file.Path, java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute&lt;?&gt;...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_-&gt;param2&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path readSymbolicLink(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path readSymbolicLink(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path setPosixFilePermissions(java.nio.file.Path, java.util.Set&lt;java.nio.file.attribute.PosixFilePermission&gt;)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path setPosixFilePermissions(java.nio.file.Path, java.util.Set&lt;java.nio.file.attribute.PosixFilePermission&gt;) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
@@ -208,57 +460,181 @@
<item name='java.nio.file.Files java.nio.file.Path walkFileTree(java.nio.file.Path, java.util.Set&lt;java.nio.file.FileVisitOption&gt;, int, java.nio.file.FileVisitor&lt;? super java.nio.file.Path&gt;) 3'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path write(java.nio.file.Path, java.lang.Iterable&lt;? extends java.lang.CharSequence&gt;, java.nio.charset.Charset, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path write(java.nio.file.Path, java.lang.Iterable&lt;? extends java.lang.CharSequence&gt;, java.nio.charset.Charset, java.nio.file.OpenOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.Path write(java.nio.file.Path, java.lang.Iterable&lt;? extends java.lang.CharSequence&gt;, java.nio.charset.Charset, java.nio.file.OpenOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.nio.file.Path write(java.nio.file.Path, java.lang.Iterable&lt;? extends java.lang.CharSequence&gt;, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_-&gt;!null&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item
name='java.nio.file.Files java.nio.file.Path writeString(java.nio.file.Path, java.lang.CharSequence, java.nio.charset.Charset, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_,_,_-&gt;param1&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.Path writeString(java.nio.file.Path, java.lang.CharSequence, java.nio.file.OpenOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.NotNull'/>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.util.List&lt;java.lang.String&gt; readAllLines(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_-&gt;new&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.util.List&lt;java.lang.String&gt; readAllLines(java.nio.file.Path, java.nio.charset.Charset)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="value" val="&quot;_,_-&gt;new&quot;"/>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.util.List&lt;java.lang.String&gt; readAllLines(java.nio.file.Path, java.nio.charset.Charset) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.util.List&lt;java.lang.String&gt; readAllLines(java.nio.file.Path, java.nio.charset.Charset) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.util.Map&lt;java.lang.String,java.lang.Object&gt; readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.util.Map&lt;java.lang.String,java.lang.Object&gt; readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.util.Map&lt;java.lang.String,java.lang.Object&gt; readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item
name='java.nio.file.Files java.util.Set&lt;java.nio.file.attribute.PosixFilePermission&gt; getPosixFilePermissions(java.nio.file.Path, java.nio.file.LinkOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.util.Set&lt;java.nio.file.attribute.PosixFilePermission&gt; getPosixFilePermissions(java.nio.file.Path, java.nio.file.LinkOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files java.util.stream.Stream&lt;java.lang.String&gt; lines(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.util.stream.Stream&lt;java.lang.String&gt; lines(java.nio.file.Path, java.nio.charset.Charset)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files java.util.stream.Stream&lt;java.nio.file.Path&gt; list(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item
name='java.nio.file.Files java.util.stream.Stream&lt;java.nio.file.Path&gt; walk(java.nio.file.Path, int, java.nio.file.FileVisitOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item
name='java.nio.file.Files java.util.stream.Stream&lt;java.nio.file.Path&gt; walk(java.nio.file.Path, java.nio.file.FileVisitOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
<annotation name='org.jetbrains.annotations.Range'>
<val name="from" val="0"/>
<val name="to" val="java.lang.Long.MAX_VALUE"/>
</annotation>
</item>
<item name='java.nio.file.Files long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files long copy(java.nio.file.Path, java.io.OutputStream)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
<annotation name='org.jetbrains.annotations.Range'>
<val name="from" val="0"/>
<val name="to" val="java.lang.Long.MAX_VALUE"/>
</annotation>
</item>
<item name='java.nio.file.Files long copy(java.nio.file.Path, java.io.OutputStream) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files long copy(java.nio.file.Path, java.io.OutputStream) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files long mismatch(java.nio.file.Path, java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files long size(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files long size(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='java.nio.file.Files void delete(java.nio.file.Path)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val name="mutates" val="&quot;io&quot;"/>
</annotation>
</item>
<item name='java.nio.file.Files void delete(java.nio.file.Path) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>