From 6084557af85ca8e937467fd5167ce2d6acf820ff Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Thu, 26 Jan 2012 22:03:37 +0400 Subject: [PATCH] Naive kotlin-jdk-headers.jar usage implementation --- .../resolve/java/JavaDescriptorResolver.java | 12 +++++++ idea/src/META-INF/plugin.xml | 2 ++ .../jet/plugin/caches/JdkHeadersFinder.java | 33 +++++++++++++++++++ .../jet/plugin/compiler/CompilerUtil.java | 9 +++++ 4 files changed, 56 insertions(+) create mode 100644 idea/src/org/jetbrains/jet/plugin/caches/JdkHeadersFinder.java diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 0f99a9c4302..db4a96c1944 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -132,10 +132,22 @@ public class JavaDescriptorResolver { public boolean contains(VirtualFile file) { return myBaseScope.contains(file) && file.getFileType() != JetFileType.INSTANCE; } + + @Override + public int compare(VirtualFile file1, VirtualFile file2) { + if (isInJdkHeaders(file1)) return 1; + if (isInJdkHeaders(file2)) return -1; + return super.compare(file1, file2); + } }; this.semanticServices = semanticServices; } + public static boolean isInJdkHeaders(VirtualFile file) { + // TODO: need faster check + return file.getUrl().contains("kotlin-jdk-headers.jar"); + } + @Nullable public ClassDescriptor resolveClass(@NotNull PsiClass psiClass) { String qualifiedName = psiClass.getQualifiedName(); diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 8dc6a3e3536..1ce3fcb7702 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -79,6 +79,8 @@ + + diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JdkHeadersFinder.java b/idea/src/org/jetbrains/jet/plugin/caches/JdkHeadersFinder.java new file mode 100644 index 00000000000..507365e2c55 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/caches/JdkHeadersFinder.java @@ -0,0 +1,33 @@ +/* + * @author max + */ +package org.jetbrains.jet.plugin.caches; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.JarFileSystem; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.NonClasspathClassFinder; +import org.jetbrains.jet.plugin.compiler.CompilerUtil; + +import java.io.File; +import java.util.Collections; +import java.util.List; + +public class JdkHeadersFinder extends NonClasspathClassFinder { + public JdkHeadersFinder(Project project) { + super(project); + } + + @Override + protected List calcClassRoots() { + File jdk_headers = CompilerUtil.getJdkHeadersPath(); + if (jdk_headers == null) return Collections.emptyList(); + + VirtualFile jarVfs = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(jdk_headers); + if (jarVfs == null) return Collections.emptyList(); + jarVfs.refresh(true, false); + + return Collections.singletonList(JarFileSystem.getInstance().getJarRootForLocalFile(jarVfs)); + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/compiler/CompilerUtil.java b/idea/src/org/jetbrains/jet/plugin/compiler/CompilerUtil.java index e0b665d3dd4..ce05bf266f1 100644 --- a/idea/src/org/jetbrains/jet/plugin/compiler/CompilerUtil.java +++ b/idea/src/org/jetbrains/jet/plugin/compiler/CompilerUtil.java @@ -29,4 +29,13 @@ public class CompilerUtil { return answer.exists() ? answer : null; } + + public static File getJdkHeadersPath() { + File compilerPath = getDefaultCompilerPath(); + if (compilerPath == null) return null; + + File answer = new File(compilerPath, "lib/kotlin-jdk-headers.jar"); + + return answer.exists() ? answer : null; + } }