diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index a6df71e786b..f477b19e27c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -18,13 +18,8 @@ package org.jetbrains.jet.lang.types.lang; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.StandardFileSystems; -import com.intellij.util.PathUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.lang.DefaultModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; @@ -42,12 +37,8 @@ import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl; import org.jetbrains.jet.lang.types.*; -import org.jetbrains.jet.utils.ExceptionUtils; -import java.io.File; import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; import java.util.*; import static org.jetbrains.jet.lang.types.lang.PrimitiveType.*; @@ -55,7 +46,6 @@ import static org.jetbrains.jet.lang.types.lang.PrimitiveType.*; public class KotlinBuiltIns { public static final JetScope STUB = JetScope.EMPTY; - public static final String BUILT_INS_DIR = "jet"; public static final String BUILT_INS_PACKAGE_NAME_STRING = "jet"; /* package */ static final Name BUILT_INS_PACKAGE_NAME = Name.identifier(BUILT_INS_PACKAGE_NAME_STRING); public static final FqName BUILT_INS_PACKAGE_FQ_NAME = FqName.topLevel(BUILT_INS_PACKAGE_NAME); @@ -215,40 +205,7 @@ public class KotlinBuiltIns { jetArrayTypeToPrimitiveJetType.put(arrayType, type); } - @TestOnly - private static File getInTestBuiltInPath(String path) { - return new File("idea/builtinsSrc", path); - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - @NotNull - public static URL getBuiltInsDirUrl() { - String builtInFilePath = "/" + BUILT_INS_DIR + "/Library.jet"; - - URL url = KotlinBuiltIns.class.getResource(builtInFilePath); - - if (url == null) { - if (ApplicationManager.getApplication().isUnitTestMode()) { - // HACK: Temp code. Get built-in files from the sources when running from test. - try { - @SuppressWarnings("TestOnlyProblems") File builtInDir = getInTestBuiltInPath(BUILT_INS_DIR); - return new URL(StandardFileSystems.FILE_PROTOCOL, "", FileUtil.toSystemIndependentName(builtInDir.getAbsolutePath())); - } - catch (MalformedURLException e) { - throw ExceptionUtils.rethrow(e); - } - } - - throw new IllegalStateException("Built-ins file wasn't found at url: " + builtInFilePath); - } - - try { - return new URL(url.getProtocol(), url.getHost(), PathUtil.getParentPath(url.getFile())); - } - catch (MalformedURLException e) { - throw new AssertionError(e); - } - } @NotNull public ModuleDescriptorImpl getBuiltInsModule() { diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java index 45f6c33386b..18c4d825b3d 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java @@ -48,7 +48,6 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.Collection; import java.util.Collections; @@ -235,7 +234,7 @@ public class KotlinJavaFileStubProvider implements CachedValueProvider" : virtualFile.getPath(); LOG.error( "Could not generate LightClass for " + fqName + " declared in " + path + "\n" + - "built-ins dir URL is " + KotlinBuiltIns.getBuiltInsDirUrl() + "\n" + + "built-ins dir URL is " + LightClassUtil.getBuiltInsDirUrl() + "\n" + "System: " + SystemInfo.OS_NAME + " " + SystemInfo.OS_VERSION + " Java Runtime: " + SystemInfo.JAVA_RUNTIME_VERSION, cause); } diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassUtil.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassUtil.java index c49cdd4c103..438ce3dfae8 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassUtil.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassUtil.java @@ -16,10 +16,13 @@ package org.jetbrains.jet.asJava; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.StandardFileSystems; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; @@ -29,6 +32,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.stubs.PsiFileStub; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.PathUtil; import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -39,14 +43,19 @@ import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; +import org.jetbrains.jet.utils.ExceptionUtils; import org.jetbrains.jet.utils.KotlinVfsUtil; +import java.io.File; import java.net.MalformedURLException; +import java.net.URL; import java.util.*; public class LightClassUtil { private static final Logger LOG = Logger.getInstance(LightClassUtil.class); + public static final File BUILT_INS_SRC_DIR = new File("idea/builtinsSrc", KotlinBuiltIns.BUILT_INS_PACKAGE_NAME_STRING); + /** * Checks whether the given file is loaded from the location where Kotlin's built-in classes are defined. * As of today, this is idea/builtinsSrc/jet directory and files such as Any.jet, Nothing.jet etc. @@ -59,7 +68,7 @@ public class LightClassUtil { VirtualFile parent = virtualFile.getParent(); if (parent != null) { try { - String jetVfsPathUrl = KotlinVfsUtil.convertFromUrl(KotlinBuiltIns.getBuiltInsDirUrl()); + String jetVfsPathUrl = KotlinVfsUtil.convertFromUrl(getBuiltInsDirUrl()); String fileDirVfsUrl = parent.getUrl(); if (jetVfsPathUrl.equals(fileDirVfsUrl)) { return true; @@ -76,6 +85,35 @@ public class LightClassUtil { return false; } + @NotNull + public static URL getBuiltInsDirUrl() { + String builtInFilePath = "/" + KotlinBuiltIns.BUILT_INS_PACKAGE_NAME_STRING + "/Library.jet"; + + URL url = KotlinBuiltIns.class.getResource(builtInFilePath); + + if (url == null) { + if (ApplicationManager.getApplication().isUnitTestMode()) { + // HACK: Temp code. Get built-in files from the sources when running from test. + try { + return new URL(StandardFileSystems.FILE_PROTOCOL, "", + FileUtil.toSystemIndependentName(BUILT_INS_SRC_DIR.getAbsolutePath())); + } + catch (MalformedURLException e) { + throw ExceptionUtils.rethrow(e); + } + } + + throw new IllegalStateException("Built-ins file wasn't found at url: " + builtInFilePath); + } + + try { + return new URL(url.getProtocol(), url.getHost(), PathUtil.getParentPath(url.getFile())); + } + catch (MalformedURLException e) { + throw new AssertionError(e); + } + } + @Nullable /*package*/ static PsiClass findClass(@NotNull FqName fqn, @NotNull StubElement stub) { if (stub instanceof PsiClassStub && Comparing.equal(fqn.asString(), ((PsiClassStub) stub).getQualifiedName())) { diff --git a/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java b/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java index 47bfc32a96c..a905b297aa2 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java +++ b/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java @@ -32,6 +32,7 @@ import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.asJava.LightClassUtil; import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.*; @@ -92,7 +93,7 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent { } private List getJetBuiltinsFiles() { - URL url = KotlinBuiltIns.getBuiltInsDirUrl(); + URL url = LightClassUtil.getBuiltInsDirUrl(); VirtualFile vf = VfsUtil.findFileByURL(url); assert vf != null : "Virtual file not found by URL: " + url;