mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-10 13:17:09 +07:00
IDEADEV-41386: When configuring Java SDK, resolve symbolic links and remove duplicate entries.
This commit is contained in:
committed by
Maxim Shafirov
parent
cbaf6caa8d
commit
9921854301
@@ -32,6 +32,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import javax.swing.*;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -340,18 +341,25 @@ public class JavaSdkImpl extends JavaSdk {
|
||||
jarDirs = new File[]{jreLibEndorsedFile, jreLibFile, jreLibExtFile};
|
||||
}
|
||||
|
||||
ArrayList<File> childrenList = new ArrayList<File>();
|
||||
Set<File> childrenSet = new LinkedHashSet<File>();
|
||||
for (File jarDir : jarDirs) {
|
||||
if (jarDir != null && jarDir.isDirectory()) {
|
||||
File[] files = jarDir.listFiles(jarFileFilter);
|
||||
for (File file1 : files) {
|
||||
childrenList.add(file1);
|
||||
File[] jarFiles = jarDir.listFiles(jarFileFilter);
|
||||
for (File jarFile : jarFiles) {
|
||||
try {
|
||||
// File.getCanonicalFile() allows us to filter out duplicate (symbolically linked) jar files,
|
||||
// commonly found in osx JDK distributions
|
||||
childrenSet.add(jarFile.getCanonicalFile());
|
||||
}
|
||||
catch (IOException e) {
|
||||
// Symbolic links may fail to resolve. Just skip those jars as we won't be able to find virtual file in this case anyway.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<VirtualFile> result = new ArrayList<VirtualFile>();
|
||||
for (File child : childrenList) {
|
||||
for (File child : childrenSet) {
|
||||
String url = JarFileSystem.PROTOCOL_PREFIX + child.getAbsolutePath().replace(File.separatorChar, '/') + JarFileSystem.JAR_SEPARATOR;
|
||||
VirtualFile vFile = VirtualFileManager.getInstance().findFileByUrl(url);
|
||||
if (vFile != null) {
|
||||
|
||||
Reference in New Issue
Block a user