Using XML instead of module scripts when running from IDE
This commit is contained in:
@@ -19,7 +19,10 @@ package org.jetbrains.jet.cli.jvm.compiler;
|
|||||||
import com.intellij.openapi.Disposable;
|
import com.intellij.openapi.Disposable;
|
||||||
import com.intellij.openapi.util.Disposer;
|
import com.intellij.openapi.util.Disposer;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
|
import com.intellij.openapi.util.io.FileUtilRt;
|
||||||
|
import com.intellij.util.Function;
|
||||||
import com.intellij.util.Processor;
|
import com.intellij.util.Processor;
|
||||||
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import jet.modules.AllModules;
|
import jet.modules.AllModules;
|
||||||
import jet.modules.Module;
|
import jet.modules.Module;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -27,6 +30,8 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.jet.cli.common.CLIConfigurationKeys;
|
import org.jetbrains.jet.cli.common.CLIConfigurationKeys;
|
||||||
import org.jetbrains.jet.cli.common.messages.MessageCollector;
|
import org.jetbrains.jet.cli.common.messages.MessageCollector;
|
||||||
import org.jetbrains.jet.cli.common.messages.MessageRenderer;
|
import org.jetbrains.jet.cli.common.messages.MessageRenderer;
|
||||||
|
import org.jetbrains.jet.cli.common.modules.ModuleDescription;
|
||||||
|
import org.jetbrains.jet.cli.common.modules.ModuleXmlParser;
|
||||||
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
|
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
|
||||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||||
import org.jetbrains.jet.codegen.GeneratedClassLoader;
|
import org.jetbrains.jet.codegen.GeneratedClassLoader;
|
||||||
@@ -47,9 +52,13 @@ import java.net.MalformedURLException;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.jar.*;
|
import java.util.jar.*;
|
||||||
|
|
||||||
|
import static org.jetbrains.jet.cli.common.messages.CompilerMessageLocation.NO_LOCATION;
|
||||||
|
import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.ERROR;
|
||||||
|
|
||||||
public class CompileEnvironmentUtil {
|
public class CompileEnvironmentUtil {
|
||||||
public static Disposable createMockDisposable() {
|
public static Disposable createMockDisposable() {
|
||||||
return new Disposable() {
|
return new Disposable() {
|
||||||
@@ -79,7 +88,32 @@ public class CompileEnvironmentUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static List<Module> loadModuleDescriptions(KotlinPaths paths, String moduleScriptFile, MessageCollector messageCollector) {
|
public static List<Module> loadModuleDescriptions(KotlinPaths paths, String moduleDefinitionFile, MessageCollector messageCollector) {
|
||||||
|
File file = new File(moduleDefinitionFile);
|
||||||
|
if (!file.exists()) {
|
||||||
|
messageCollector.report(ERROR, "Module definition file does not exist: " + moduleDefinitionFile, NO_LOCATION);
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
String extension = FileUtilRt.getExtension(moduleDefinitionFile);
|
||||||
|
if ("kts".equalsIgnoreCase(extension)) {
|
||||||
|
return loadModuleScript(paths, moduleDefinitionFile, messageCollector);
|
||||||
|
}
|
||||||
|
if ("xml".equalsIgnoreCase(extension)) {
|
||||||
|
return ContainerUtil.map(
|
||||||
|
ModuleXmlParser.parse(moduleDefinitionFile, messageCollector),
|
||||||
|
new Function<ModuleDescription, Module>() {
|
||||||
|
@Override
|
||||||
|
public Module fun(ModuleDescription description) {
|
||||||
|
return new DescriptionToModuleAdapter(description);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
messageCollector.report(ERROR, "Unknown module definition type: " + moduleDefinitionFile, NO_LOCATION);
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private static List<Module> loadModuleScript(KotlinPaths paths, String moduleScriptFile, MessageCollector messageCollector) {
|
||||||
Disposable disposable = new Disposable() {
|
Disposable disposable = new Disposable() {
|
||||||
@Override
|
@Override
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
@@ -261,4 +295,32 @@ public class CompileEnvironmentUtil {
|
|||||||
}
|
}
|
||||||
return moduleScriptText;
|
return moduleScriptText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class DescriptionToModuleAdapter implements Module {
|
||||||
|
private final ModuleDescription description;
|
||||||
|
|
||||||
|
public DescriptionToModuleAdapter(ModuleDescription description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getModuleName() {
|
||||||
|
return description.getModuleName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getSourceFiles() {
|
||||||
|
return description.getSourceFiles();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getClasspathRoots() {
|
||||||
|
return description.getClasspathRoots();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getAnnotationsRoots() {
|
||||||
|
return description.getAnnotationsRoots();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -32,6 +32,8 @@ public interface KotlinModuleDescriptionGenerator {
|
|||||||
Set<File> directoriesToFilterOut
|
Set<File> directoriesToFilterOut
|
||||||
);
|
);
|
||||||
|
|
||||||
|
String getFileExtension();
|
||||||
|
|
||||||
interface DependencyProvider {
|
interface DependencyProvider {
|
||||||
void processClassPath(@NotNull DependencyProcessor processor);
|
void processClassPath(@NotNull DependencyProcessor processor);
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -85,4 +85,9 @@ public class KotlinModuleScriptGenerator implements KotlinModuleDescriptionGener
|
|||||||
script.append("}\n");
|
script.append("}\n");
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileExtension() {
|
||||||
|
return "kts";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -100,6 +100,11 @@ public class KotlinModuleXmlGenerator implements KotlinModuleDescriptionGenerato
|
|||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileExtension() {
|
||||||
|
return "xml";
|
||||||
|
}
|
||||||
|
|
||||||
private static void openTag(Printer p, String tag) {
|
private static void openTag(Printer p, String tag) {
|
||||||
p.println("<" + tag + ">");
|
p.println("<" + tag + ">");
|
||||||
p.pushIndent();
|
p.pushIndent();
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
return ExitCode.NOTHING_DONE;
|
return ExitCode.NOTHING_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
File scriptFile = KotlinBuilderModuleScriptGenerator.generateModuleScript(context, representativeTarget, sourceFiles);
|
File moduleFile = KotlinBuilderModuleScriptGenerator.generateModuleDescription(context, representativeTarget, sourceFiles);
|
||||||
|
|
||||||
File outputDir = representativeTarget.getOutputDir();
|
File outputDir = representativeTarget.getOutputDir();
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
KotlinCompilerRunner.runCompiler(
|
KotlinCompilerRunner.runCompiler(
|
||||||
messageCollector,
|
messageCollector,
|
||||||
environment,
|
environment,
|
||||||
scriptFile,
|
moduleFile,
|
||||||
outputItemCollector,
|
outputItemCollector,
|
||||||
/*runOutOfProcess = */false);
|
/*runOutOfProcess = */false);
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import com.intellij.util.containers.ContainerUtil;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionGenerator;
|
import org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionGenerator;
|
||||||
import org.jetbrains.jet.compiler.runner.KotlinModuleScriptGenerator;
|
import org.jetbrains.jet.compiler.runner.KotlinModuleXmlGenerator;
|
||||||
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor;
|
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor;
|
||||||
import org.jetbrains.jps.incremental.CompileContext;
|
import org.jetbrains.jps.incremental.CompileContext;
|
||||||
import org.jetbrains.jps.incremental.ModuleBuildTarget;
|
import org.jetbrains.jps.incremental.ModuleBuildTarget;
|
||||||
@@ -33,7 +33,10 @@ import org.jetbrains.jps.model.java.JpsJavaDependenciesEnumerator;
|
|||||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
||||||
import org.jetbrains.jps.model.library.JpsLibrary;
|
import org.jetbrains.jps.model.library.JpsLibrary;
|
||||||
import org.jetbrains.jps.model.library.JpsLibraryRoot;
|
import org.jetbrains.jps.model.library.JpsLibraryRoot;
|
||||||
import org.jetbrains.jps.model.module.*;
|
import org.jetbrains.jps.model.module.JpsDependencyElement;
|
||||||
|
import org.jetbrains.jps.model.module.JpsLibraryDependency;
|
||||||
|
import org.jetbrains.jps.model.module.JpsModule;
|
||||||
|
import org.jetbrains.jps.model.module.JpsSdkDependency;
|
||||||
import org.jetbrains.jps.util.JpsPathUtil;
|
import org.jetbrains.jps.util.JpsPathUtil;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -45,10 +48,13 @@ import java.util.List;
|
|||||||
import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionGenerator.DependencyProvider;
|
import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionGenerator.DependencyProvider;
|
||||||
|
|
||||||
public class KotlinBuilderModuleScriptGenerator {
|
public class KotlinBuilderModuleScriptGenerator {
|
||||||
public static File generateModuleScript(CompileContext context, ModuleBuildTarget target, List<File> sourceFiles)
|
|
||||||
|
public static final KotlinModuleDescriptionGenerator GENERATOR = KotlinModuleXmlGenerator.INSTANCE;
|
||||||
|
|
||||||
|
public static File generateModuleDescription(CompileContext context, ModuleBuildTarget target, List<File> sourceFiles)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
CharSequence moduleScriptText = KotlinModuleScriptGenerator.INSTANCE.generateModuleScript(
|
CharSequence moduleScriptText = GENERATOR.generateModuleScript(
|
||||||
target.getId(),
|
target.getId(),
|
||||||
getKotlinModuleDependencies(context, target),
|
getKotlinModuleDependencies(context, target),
|
||||||
sourceFiles,
|
sourceFiles,
|
||||||
@@ -57,7 +63,7 @@ public class KotlinBuilderModuleScriptGenerator {
|
|||||||
Collections.singleton(target.getOutputDir())
|
Collections.singleton(target.getOutputDir())
|
||||||
);
|
);
|
||||||
|
|
||||||
File scriptFile = new File(target.getOutputDir(), "script.kts");
|
File scriptFile = new File(target.getOutputDir(), "script." + GENERATOR.getFileExtension());
|
||||||
|
|
||||||
writeScriptToFile(context, moduleScriptText, scriptFile);
|
writeScriptToFile(context, moduleScriptText, scriptFile);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user