diff --git a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java index d03683a331b..b8944f95dba 100644 --- a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java +++ b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java @@ -51,7 +51,7 @@ public class BytecodeCompiler { */ private CompileEnvironmentConfiguration env( String stdlib, String[] classpath ) { CompilerDependencies dependencies = CompilerDependencies.compilerDependenciesForProduction(CompilerSpecialMode.REGULAR); - JetCoreEnvironment environment = new JetCoreEnvironment(CompileEnvironmentUtil.createMockDisposable(), dependencies); + JetCoreEnvironment environment = JetCoreEnvironment.getCoreEnvironmentForJVM(CompileEnvironmentUtil.createMockDisposable(), dependencies); CompileEnvironmentConfiguration env = new CompileEnvironmentConfiguration(environment, dependencies, MessageCollector.PLAIN_TEXT_TO_SYSTEM_ERR); if (( stdlib != null ) && ( stdlib.trim().length() > 0 )) { diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java index 3ab4f24850c..604fbbb105b 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java @@ -106,7 +106,7 @@ public class K2JVMCompiler extends CLICompiler sourceFiles = new ArrayList(); + private final List sourceFiles = Lists.newArrayList(); - public JetCoreEnvironment(Disposable parentDisposable, @NotNull CompilerDependencies compilerDependencies) { + + @NotNull + public static JetCoreEnvironment getCoreEnvironmentForJVM(@NotNull Disposable disposable, + @NotNull CompilerDependencies compilerDependencies) { + JetCoreEnvironment coreEnvironment = new JetCoreEnvironment(disposable); + + CompilerSpecialMode compilerSpecialMode = compilerDependencies.getCompilerSpecialMode(); + + coreEnvironment.addToClasspath(compilerDependencies.getJdkJar()); + + if (compilerSpecialMode.includeJdkHeaders()) { + for (VirtualFile root : compilerDependencies.getJdkHeaderRoots()) { + coreEnvironment.addLibraryRoot(root); + } + } + if (compilerSpecialMode.includeKotlinRuntime()) { + for (VirtualFile root : compilerDependencies.getRuntimeRoots()) { + coreEnvironment.addLibraryRoot(root); + } + } + return coreEnvironment; + } + + @NotNull + public static JetCoreEnvironment getCoreEnvironmentForJS(@NotNull Disposable disposable) { + return new JetCoreEnvironment(disposable); + } + + private JetCoreEnvironment(Disposable parentDisposable) { super(parentDisposable); registerFileType(JetFileType.INSTANCE, "kt"); registerFileType(JetFileType.INSTANCE, "kts"); @@ -62,21 +90,6 @@ public class JetCoreEnvironment extends JavaCoreEnvironment { .getExtensionPoint(PsiElementFinder.EP_NAME) .registerExtension(new JavaElementFinder(myProject)); - CompilerSpecialMode compilerSpecialMode = compilerDependencies.getCompilerSpecialMode(); - - addToClasspath(compilerDependencies.getJdkJar()); - - if (compilerSpecialMode.includeJdkHeaders()) { - for (VirtualFile root : compilerDependencies.getJdkHeaderRoots()) { - addLibraryRoot(root); - } - } - if (compilerSpecialMode.includeKotlinRuntime()) { - for (VirtualFile root : compilerDependencies.getRuntimeRoots()) { - addLibraryRoot(root); - } - } - JetStandardLibrary.initialize(getProject()); } @@ -85,7 +98,7 @@ public class JetCoreEnvironment extends JavaCoreEnvironment { } private void addSources(File file) { - if(file.isDirectory()) { + if (file.isDirectory()) { File[] files = file.listFiles(); if (files != null) { for (File child : files) { @@ -97,7 +110,7 @@ public class JetCoreEnvironment extends JavaCoreEnvironment { VirtualFile fileByPath = getLocalFileSystem().findFileByPath(file.getAbsolutePath()); if (fileByPath != null) { PsiFile psiFile = PsiManager.getInstance(getProject()).findFile(fileByPath); - if(psiFile instanceof JetFile) { + if (psiFile instanceof JetFile) { sourceFiles.add((JetFile)psiFile); } } @@ -105,7 +118,7 @@ public class JetCoreEnvironment extends JavaCoreEnvironment { } public void addSources(VirtualFile vFile) { - if (vFile.isDirectory()) { + if (vFile.isDirectory()) { for (VirtualFile virtualFile : vFile.getChildren()) { addSources(virtualFile); } @@ -121,8 +134,9 @@ public class JetCoreEnvironment extends JavaCoreEnvironment { } public void addSources(String path) { - if(path == null) + if (path == null) { return; + } VirtualFile vFile = getLocalFileSystem().findFileByPath(path); if (vFile == null) { @@ -141,14 +155,16 @@ public class JetCoreEnvironment extends JavaCoreEnvironment { public void addToClasspathFromClassLoader(ClassLoader loader) { ClassLoader parent = loader.getParent(); - if(parent != null) + if (parent != null) { addToClasspathFromClassLoader(parent); + } - if(loader instanceof URLClassLoader) { - for (URL url : ((URLClassLoader) loader).getURLs()) { + if (loader instanceof URLClassLoader) { + for (URL url : ((URLClassLoader)loader).getURLs()) { File file = new File(url.getPath()); - if(file.exists() && (!file.isFile() || file.getPath().endsWith(".jar"))) + if (file.exists() && (!file.isFile() || file.getPath().endsWith(".jar"))) { addToClasspath(file); + } } } } diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index af98cf42dc6..436f60bc28a 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -67,18 +67,7 @@ public class KotlinToJVMBytecodeCompiler { throw new CompileEnvironmentException("No source files where defined"); } - for (String sourceFile : moduleBuilder.getSourceFiles()) { - File source = new File(sourceFile); - if (!source.isAbsolute()) { - source = new File(directory, sourceFile); - } - - if (!source.exists()) { - throw new CompileEnvironmentException("'" + source + "' does not exist"); - } - - configuration.getEnvironment().addSources(source.getPath()); - } + CompileEnvironmentUtil.addSourcesFromModuleToEnvironment(configuration.getEnvironment(), moduleBuilder, directory); for (String classpathRoot : moduleBuilder.getClasspathRoots()) { configuration.getEnvironment().addToClasspath(new File(classpathRoot)); } diff --git a/compiler/tests/org/jetbrains/jet/JetTestUtils.java b/compiler/tests/org/jetbrains/jet/JetTestUtils.java index 19d3ea3792b..2c50e749a06 100644 --- a/compiler/tests/org/jetbrains/jet/JetTestUtils.java +++ b/compiler/tests/org/jetbrains/jet/JetTestUtils.java @@ -26,9 +26,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; -import org.jetbrains.jet.lang.diagnostics.UnresolvedReferenceDiagnosticFactory; import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.diagnostics.Severity; +import org.jetbrains.jet.lang.diagnostics.UnresolvedReferenceDiagnosticFactory; import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -163,7 +163,9 @@ public class JetTestUtils { public static AnalyzeExhaust analyzeFile(@NotNull JetFile namespace, @NotNull JetControlFlowDataTraceFactory flowDataTraceFactory) { return AnalyzerFacadeForJVM.analyzeOneFileWithJavaIntegration(namespace, flowDataTraceFactory, - CompileCompilerDependenciesTest.compilerDependenciesForTests(CompilerSpecialMode.REGULAR, true)); + CompileCompilerDependenciesTest + .compilerDependenciesForTests(CompilerSpecialMode.REGULAR, + true)); } public static JetCoreEnvironment createEnvironmentWithMockJdk(Disposable disposable) { @@ -171,7 +173,8 @@ public class JetTestUtils { } public static JetCoreEnvironment createEnvironmentWithMockJdk(Disposable disposable, @NotNull CompilerSpecialMode compilerSpecialMode) { - return new JetCoreEnvironment(disposable, CompileCompilerDependenciesTest.compilerDependenciesForTests(compilerSpecialMode, true)); + return JetCoreEnvironment.getCoreEnvironmentForJVM(disposable, CompileCompilerDependenciesTest + .compilerDependenciesForTests(compilerSpecialMode, true)); } public static File findMockJdkRtJar() { diff --git a/compiler/tests/org/jetbrains/jet/codegen/CompileTextTest.java b/compiler/tests/org/jetbrains/jet/codegen/CompileTextTest.java index 1e60a9fc01f..2b254310060 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/CompileTextTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/CompileTextTest.java @@ -32,7 +32,7 @@ public class CompileTextTest extends CodegenTestCase { public void testMe() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { String text = "import org.jetbrains.jet.codegen.CompileTextTest; fun x() = CompileTextTest()"; CompilerDependencies dependencies = CompileCompilerDependenciesTest.compilerDependenciesForTests(CompilerSpecialMode.REGULAR, false); - JetCoreEnvironment environment = new JetCoreEnvironment(CompileEnvironmentUtil.createMockDisposable(), dependencies); + JetCoreEnvironment environment = JetCoreEnvironment.getCoreEnvironmentForJVM(CompileEnvironmentUtil.createMockDisposable(), dependencies); CompileEnvironmentConfiguration configuration = new CompileEnvironmentConfiguration(environment, dependencies, MessageCollector.PLAIN_TEXT_TO_SYSTEM_ERR); configuration.getEnvironment().addToClasspathFromClassLoader(getClass().getClassLoader()); ClassLoader classLoader = KotlinToJVMBytecodeCompiler.compileText(configuration, text);