BulkFileAttributesReadInspection: added inspection

Inspection reports multiple java.io.File attribute calls in a row. Attribute calls:
- lastModified
- isFile
- isDirectory
- length
It suggests replacing them with a single attributes extraction using java.nio.file.Files.readAttributes method

GitOrigin-RevId: cd2f93645aab9a4cba2e1f87e05b431f0d21ee50
This commit is contained in:
Artemiy Sartakov
2022-01-31 12:05:45 +07:00
committed by intellij-monorepo-bot
parent 00abfbc508
commit 51b6c30a78
19 changed files with 557 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
class Foo {
private File file;
boolean printDirectory() {
try {
BasicFileAttributes basicFileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
return basicFileAttributes.isDirectory() && basicFileAttributes.isRegularFile();
throw new IOException("");
} catch (IOException e) {
}
}
}

View File

@@ -0,0 +1,15 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
class Foo {
boolean printDirectory(File file) {
try {
BasicFileAttributes basicFileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
return basicFileAttributes.isDirectory() && basicFileAttributes.isRegularFile();
throw new IOException("");
} catch (IOException e) {
}
}
}

View File

@@ -0,0 +1,17 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
class Foo {
void printDirectory(File file) {
try {
Callable<Boolean> r = () -> {
BasicFileAttributes basicFileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
return basicFileAttributes.isDirectory() && basicFileAttributes.isRegularFile();
};
throw new IOException("");
} catch (IOException e) {
}
}
}

View File

@@ -0,0 +1,14 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
class Foo {
long isNewFile(File file) throws IOException {
BasicFileAttributes basicFileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
while (basicFileAttributes.isDirectory()) {
System.out.println(basicFileAttributes.isRegularFile());
}
return basicFileAttributes.lastModifiedTime().toMillis();
}
}

View File

@@ -0,0 +1,17 @@
// "Fix all 'Bulk 'Files.readAttributes' call can be used instead of multiple file attribute calls' problems in file" "true"
import java.io.*;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
class Foo {
void printDirectory(File file1, File file2) throws IOException {
BasicFileAttributes readAttributes1 = Files.readAttributes(file1.toPath(), BasicFileAttributes.class);
if (readAttributes1.isDirectory()) {
System.out.println(readAttributes1.size());
}
BasicFileAttributes readAttributes = Files.readAttributes(file2.toPath(), BasicFileAttributes.class);
if (readAttributes.isRegularFile()) {
System.out.println(readAttributes.size());
}
}
}

View File

@@ -0,0 +1,19 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
class Foo {
long isNewFile(File file, long lastModified) {
BasicFileAttributes basicFileAttributes;
try {
basicFileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
while (basicFileAttributes.isDirectory()) {
System.out.println(basicFileAttributes.isRegularFile());
}
return basicFileAttributes.lastModifiedTime().toMillis();
}
}

View File

@@ -0,0 +1,15 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
class Foo {
private File file;
boolean printDirectory() {
try {
return file.isDirec<caret>tory() && file.isFile();
throw new IOException("");
} catch (IOException e) {
}
}
}

View File

@@ -0,0 +1,12 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
class Foo {
boolean printDirectory(File file) {
try {
return file.isDirec<caret>tory() && file.isFile();
throw new IOException("");
} catch (IOException e) {
}
}
}

View File

@@ -0,0 +1,12 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
class Foo {
void printDirectory(File file) {
try {
Callable<Boolean> r = () -> file.isDirec<caret>tory() && file.isFile();
throw new IOException("");
} catch (IOException e) {
}
}
}

View File

@@ -0,0 +1,11 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
class Foo {
long isNewFile(File file) throws IOException {
while (file.isDire<caret>ctory()) {
System.out.println(file.isFile());
}
return file.lastModified();
}
}

View File

@@ -0,0 +1,13 @@
// "Fix all 'Bulk 'Files.readAttributes' call can be used instead of multiple file attribute calls' problems in file" "true"
import java.io.*;
class Foo {
void printDirectory(File file1, File file2) throws IOException {
if (file1.isD<caret>irectory()) {
System.out.println(file1.length());
}
if (file2.isFile()) {
System.out.println(file2.length());
}
}
}

View File

@@ -0,0 +1,10 @@
// "Replace with bulk 'Files.readAttributes' call" "false"
import java.io.*;
class Foo {
void printDirectory(File file, long lastModified) {
while (file.isDire<caret>ctory()) {
System.out.println(file.isDirectory());
}
}
}

View File

@@ -0,0 +1,12 @@
// "Replace with bulk 'Files.readAttributes' call" "false"
import java.io.*;
class Foo {
long isNewFile(File file, long lastModified) {
while (file.isDir<caret>ectory()) {
System.out.println(file.isFile());
}
file = new File("foo");
return file.lastModified();
}
}

View File

@@ -0,0 +1,11 @@
// "Replace with bulk 'Files.readAttributes' call" "true"
import java.io.*;
class Foo {
long isNewFile(File file, long lastModified) {
while (file.isDire<caret>ctory()) {
System.out.println(file.isFile());
}
return file.lastModified();
}
}