mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
java-impl
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package com.intellij.openapi.roots.libraries;
|
||||
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.vfs.JarFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.util.text.StringTokenizer;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
/**
|
||||
* author: lesya
|
||||
*/
|
||||
public class LibrariesHelperImpl extends LibrariesHelper {
|
||||
|
||||
@Override
|
||||
public VirtualFile findJarByClass(Library library, @NonNls String fqn) {
|
||||
return library == null ? null : findJarByClass(library.getFiles(OrderRootType.CLASSES), fqn);
|
||||
}
|
||||
|
||||
private VirtualFile findJarByClass(VirtualFile[] files, String fqn) {
|
||||
for (VirtualFile file : files) {
|
||||
if (findInFile(file, new StringTokenizer(fqn, "."))) return file;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isClassAvailableInLibrary(Library library, String fqn) {
|
||||
final String[] urls = library.getUrls(OrderRootType.CLASSES);
|
||||
return isClassAvailable(urls, fqn);
|
||||
}
|
||||
|
||||
public boolean isClassAvailable(final String[] urls, String fqn) {
|
||||
for (String url : urls) {
|
||||
VirtualFile file = VirtualFileManager.getInstance().findFileByUrl(url);
|
||||
if (file == null) continue;
|
||||
if (!(file.getFileSystem() instanceof JarFileSystem) && !file.isDirectory()) {
|
||||
file = JarFileSystem.getInstance().findFileByPath(file.getPath() + JarFileSystem.JAR_SEPARATOR);
|
||||
}
|
||||
if (file == null) continue;
|
||||
if (findInFile(file, new StringTokenizer(fqn, "."))) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean findInFile(VirtualFile root, final StringTokenizer filePath) {
|
||||
if (!filePath.hasMoreTokens()) return true;
|
||||
@NonNls String name = filePath.nextToken();
|
||||
if (!filePath.hasMoreTokens()) {
|
||||
name += ".class";
|
||||
}
|
||||
final VirtualFile child = root.findChild(name);
|
||||
return child != null && findInFile(child, filePath);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user