Rename ModuleScriptData -> ModuleChunk and refactor related code
Use the term "build file" instead of the old "module"/"module script"
This commit is contained in:
+3
-3
@@ -22,12 +22,12 @@ import org.jetbrains.kotlin.modules.Module;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ModuleScriptData {
|
public class ModuleChunk {
|
||||||
public static final ModuleScriptData EMPTY = new ModuleScriptData(Collections.emptyList());
|
public static final ModuleChunk EMPTY = new ModuleChunk(Collections.emptyList());
|
||||||
|
|
||||||
private final List<Module> modules;
|
private final List<Module> modules;
|
||||||
|
|
||||||
public ModuleScriptData(@NotNull List<Module> modules) {
|
public ModuleChunk(@NotNull List<Module> modules) {
|
||||||
this.modules = modules;
|
this.modules = modules;
|
||||||
}
|
}
|
||||||
|
|
||||||
+5
-6
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil;
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil;
|
||||||
import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil;
|
|
||||||
import org.jetbrains.kotlin.modules.JavaRootPath;
|
import org.jetbrains.kotlin.modules.JavaRootPath;
|
||||||
import org.jetbrains.kotlin.modules.Module;
|
import org.jetbrains.kotlin.modules.Module;
|
||||||
import org.xml.sax.Attributes;
|
import org.xml.sax.Attributes;
|
||||||
@@ -55,7 +54,7 @@ public class ModuleXmlParser {
|
|||||||
public static final String MODULAR_JDK_ROOT = "modularJdkRoot";
|
public static final String MODULAR_JDK_ROOT = "modularJdkRoot";
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static ModuleScriptData parseModuleScript(
|
public static ModuleChunk parseModuleScript(
|
||||||
@NotNull String xmlFile,
|
@NotNull String xmlFile,
|
||||||
@NotNull MessageCollector messageCollector
|
@NotNull MessageCollector messageCollector
|
||||||
) {
|
) {
|
||||||
@@ -67,7 +66,7 @@ public class ModuleXmlParser {
|
|||||||
}
|
}
|
||||||
catch (FileNotFoundException e) {
|
catch (FileNotFoundException e) {
|
||||||
MessageCollectorUtil.reportException(messageCollector, e);
|
MessageCollectorUtil.reportException(messageCollector, e);
|
||||||
return ModuleScriptData.EMPTY;
|
return ModuleChunk.EMPTY;
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
StreamUtil.closeStream(stream);
|
StreamUtil.closeStream(stream);
|
||||||
@@ -86,7 +85,7 @@ public class ModuleXmlParser {
|
|||||||
this.currentState = currentState;
|
this.currentState = currentState;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ModuleScriptData parse(@NotNull InputStream xml) {
|
private ModuleChunk parse(@NotNull InputStream xml) {
|
||||||
try {
|
try {
|
||||||
setCurrentState(initial);
|
setCurrentState(initial);
|
||||||
SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
|
SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
|
||||||
@@ -97,7 +96,7 @@ public class ModuleXmlParser {
|
|||||||
return currentState;
|
return currentState;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return new ModuleScriptData(modules);
|
return new ModuleChunk(modules);
|
||||||
}
|
}
|
||||||
catch (ParserConfigurationException | IOException e) {
|
catch (ParserConfigurationException | IOException e) {
|
||||||
MessageCollectorUtil.reportException(messageCollector, e);
|
MessageCollectorUtil.reportException(messageCollector, e);
|
||||||
@@ -105,7 +104,7 @@ public class ModuleXmlParser {
|
|||||||
catch (SAXException e) {
|
catch (SAXException e) {
|
||||||
messageCollector.report(ERROR, "Build file does not have a valid XML: " + e, null);
|
messageCollector.report(ERROR, "Build file does not have a valid XML: " + e, null);
|
||||||
}
|
}
|
||||||
return ModuleScriptData.EMPTY;
|
return ModuleChunk.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final DefaultHandler initial = new DefaultHandler() {
|
private final DefaultHandler initial = new DefaultHandler() {
|
||||||
|
|||||||
@@ -136,9 +136,6 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
|||||||
val destination = arguments.destination
|
val destination = arguments.destination
|
||||||
|
|
||||||
if (arguments.buildFile != null) {
|
if (arguments.buildFile != null) {
|
||||||
val sanitizedCollector = FilteringMessageCollector(messageCollector, VERBOSE::contains)
|
|
||||||
val moduleScript = CompileEnvironmentUtil.loadModuleDescriptions(arguments.buildFile, sanitizedCollector)
|
|
||||||
|
|
||||||
if (destination != null) {
|
if (destination != null) {
|
||||||
messageCollector.report(
|
messageCollector.report(
|
||||||
STRONG_WARNING,
|
STRONG_WARNING,
|
||||||
@@ -146,11 +143,13 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val moduleFile = File(arguments.buildFile)
|
val sanitizedCollector = FilteringMessageCollector(messageCollector, VERBOSE::contains)
|
||||||
val directory = moduleFile.absoluteFile.parentFile
|
val buildFile = File(arguments.buildFile)
|
||||||
|
val moduleChunk = CompileEnvironmentUtil.loadModuleChunk(buildFile, sanitizedCollector)
|
||||||
|
|
||||||
KotlinToJVMBytecodeCompiler.configureSourceRoots(configuration, moduleScript.modules, directory)
|
configuration.put(JVMConfigurationKeys.MODULE_XML_FILE, buildFile)
|
||||||
configuration.put(JVMConfigurationKeys.MODULE_XML_FILE, moduleFile)
|
|
||||||
|
KotlinToJVMBytecodeCompiler.configureSourceRoots(configuration, moduleChunk.modules, buildFile)
|
||||||
|
|
||||||
val environment = createEnvironmentWithScriptingSupport(rootDisposable, configuration, arguments, messageCollector)
|
val environment = createEnvironmentWithScriptingSupport(rootDisposable, configuration, arguments, messageCollector)
|
||||||
?: return COMPILATION_ERROR
|
?: return COMPILATION_ERROR
|
||||||
@@ -159,7 +158,7 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
|||||||
if (!it) return COMPILATION_ERROR
|
if (!it) return COMPILATION_ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinToJVMBytecodeCompiler.compileModules(environment, directory)
|
KotlinToJVMBytecodeCompiler.compileModules(environment, buildFile, moduleChunk.modules)
|
||||||
}
|
}
|
||||||
else if (arguments.script) {
|
else if (arguments.script) {
|
||||||
val sourcePath = arguments.freeArgs.first()
|
val sourcePath = arguments.freeArgs.first()
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
||||||
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
|
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
||||||
import org.jetbrains.kotlin.cli.common.modules.ModuleScriptData;
|
import org.jetbrains.kotlin.cli.common.modules.ModuleChunk;
|
||||||
import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser;
|
import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
|
||||||
@@ -60,18 +60,16 @@ public class CompileEnvironmentUtil {
|
|||||||
private static final Logger LOG = Logger.getInstance(CompileEnvironmentUtil.class);
|
private static final Logger LOG = Logger.getInstance(CompileEnvironmentUtil.class);
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static ModuleScriptData loadModuleDescriptions(String moduleDefinitionFile, MessageCollector messageCollector) {
|
public static ModuleChunk loadModuleChunk(File buildFile, MessageCollector messageCollector) {
|
||||||
File file = new File(moduleDefinitionFile);
|
if (!buildFile.exists()) {
|
||||||
if (!file.exists()) {
|
messageCollector.report(ERROR, "Module definition file does not exist: " + buildFile, null);
|
||||||
messageCollector.report(ERROR, "Module definition file does not exist: " + moduleDefinitionFile, null);
|
return ModuleChunk.EMPTY;
|
||||||
return ModuleScriptData.EMPTY;
|
|
||||||
}
|
}
|
||||||
String extension = FileUtilRt.getExtension(moduleDefinitionFile);
|
if ("xml".equalsIgnoreCase(FilesKt.getExtension(buildFile))) {
|
||||||
if ("xml".equalsIgnoreCase(extension)) {
|
return ModuleXmlParser.parseModuleScript(buildFile.getPath(), messageCollector);
|
||||||
return ModuleXmlParser.parseModuleScript(moduleDefinitionFile, messageCollector);
|
|
||||||
}
|
}
|
||||||
messageCollector.report(ERROR, "Unknown module definition type: " + moduleDefinitionFile, null);
|
messageCollector.report(ERROR, "Unknown module definition type: " + buildFile, null);
|
||||||
return ModuleScriptData.EMPTY;
|
return ModuleChunk.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: includeRuntime should be not a flag but a path to runtime
|
// TODO: includeRuntime should be not a flag but a path to runtime
|
||||||
|
|||||||
+10
-9
@@ -66,13 +66,15 @@ import java.util.concurrent.TimeUnit
|
|||||||
|
|
||||||
object KotlinToJVMBytecodeCompiler {
|
object KotlinToJVMBytecodeCompiler {
|
||||||
|
|
||||||
private fun getAbsolutePaths(directory: File, module: Module): List<String> {
|
private fun getAbsolutePaths(buildFile: File, module: Module): List<String> {
|
||||||
return module.getSourceFiles().map { sourceFile ->
|
return module.getSourceFiles().map { sourceFile ->
|
||||||
var source = File(sourceFile)
|
val source = File(sourceFile)
|
||||||
if (!source.isAbsolute) {
|
if (!source.isAbsolute) {
|
||||||
source = File(directory, sourceFile)
|
File(buildFile.absoluteFile.parentFile, sourceFile).absolutePath
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
source.absolutePath
|
||||||
}
|
}
|
||||||
source.absolutePath
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,13 +113,12 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun compileModules(environment: KotlinCoreEnvironment, directory: File): Boolean {
|
internal fun compileModules(environment: KotlinCoreEnvironment, buildFile: File, chunk: List<Module>): Boolean {
|
||||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||||
|
|
||||||
val moduleVisibilityManager = ModuleVisibilityManager.SERVICE.getInstance(environment.project)
|
val moduleVisibilityManager = ModuleVisibilityManager.SERVICE.getInstance(environment.project)
|
||||||
|
|
||||||
val projectConfiguration = environment.configuration
|
val projectConfiguration = environment.configuration
|
||||||
val chunk = projectConfiguration.getNotNull(JVMConfigurationKeys.MODULES)
|
|
||||||
for (module in chunk) {
|
for (module in chunk) {
|
||||||
moduleVisibilityManager.addModule(module)
|
moduleVisibilityManager.addModule(module)
|
||||||
}
|
}
|
||||||
@@ -141,7 +142,7 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
for (module in chunk) {
|
for (module in chunk) {
|
||||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||||
val ktFiles = CompileEnvironmentUtil.getKtFiles(
|
val ktFiles = CompileEnvironmentUtil.getKtFiles(
|
||||||
environment.project, getAbsolutePaths(directory, module), projectConfiguration
|
environment.project, getAbsolutePaths(buildFile, module), projectConfiguration
|
||||||
) { path -> throw IllegalStateException("Should have been checked before: $path") }
|
) { path -> throw IllegalStateException("Should have been checked before: $path") }
|
||||||
if (!checkKotlinPackageUsage(environment, ktFiles)) return false
|
if (!checkKotlinPackageUsage(environment, ktFiles)) return false
|
||||||
|
|
||||||
@@ -180,9 +181,9 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun configureSourceRoots(configuration: CompilerConfiguration, chunk: List<Module>, directory: File) {
|
internal fun configureSourceRoots(configuration: CompilerConfiguration, chunk: List<Module>, buildFile: File) {
|
||||||
for (module in chunk) {
|
for (module in chunk) {
|
||||||
configuration.addKotlinSourceRoots(getAbsolutePaths(directory, module))
|
configuration.addKotlinSourceRoots(getAbsolutePaths(buildFile, module))
|
||||||
}
|
}
|
||||||
|
|
||||||
for (module in chunk) {
|
for (module in chunk) {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation;
|
|||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity;
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity;
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer;
|
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer;
|
||||||
import org.jetbrains.kotlin.cli.common.modules.ModuleScriptData;
|
import org.jetbrains.kotlin.cli.common.modules.ModuleChunk;
|
||||||
import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser;
|
import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser;
|
||||||
import org.jetbrains.kotlin.modules.Module;
|
import org.jetbrains.kotlin.modules.Module;
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
@@ -37,7 +37,7 @@ public abstract class AbstractModuleXmlParserTest extends TestCase {
|
|||||||
protected static void doTest(String xmlPath) throws IOException {
|
protected static void doTest(String xmlPath) throws IOException {
|
||||||
File txtFile = new File(FileUtil.getNameWithoutExtension(xmlPath) + ".txt");
|
File txtFile = new File(FileUtil.getNameWithoutExtension(xmlPath) + ".txt");
|
||||||
|
|
||||||
ModuleScriptData result = ModuleXmlParser.parseModuleScript(xmlPath, new MessageCollector() {
|
ModuleChunk result = ModuleXmlParser.parseModuleScript(xmlPath, new MessageCollector() {
|
||||||
@Override
|
@Override
|
||||||
public void report(
|
public void report(
|
||||||
@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location
|
@NotNull CompilerMessageSeverity severity, @NotNull String message, @Nullable CompilerMessageLocation location
|
||||||
|
|||||||
Reference in New Issue
Block a user