From fa2116040e9673f1807dbfa0052c37a9245d4d90 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 22 Jan 2015 16:40:01 +0300 Subject: [PATCH] Modules.xml: add Java sources right after Kotlin sources Java sources should appear before classpath dependencies because they should have higher priority if the same symbol is located in the module source and in the classpath. This is so because by default module source has the highest priority in IDEA except the JDK. Ideally this will be handled later by full support of modules in the compiler --- .../modules/KotlinModuleDescriptionBuilder.java | 1 + .../KotlinModuleScriptBuilderFactory.java | 11 +++++++++-- .../modules/KotlinModuleXmlBuilderFactory.java | 13 ++++++++++--- idea/testData/modules.xml/basic.xml | 6 ++++-- idea/testData/modules.xml/filtered.xml | 4 ++-- idea/testData/modules.xml/multiple.xml | 8 ++++---- .../modules/KotlinModuleXmlGeneratorTest.java | 16 ++++++++++++---- .../KotlinBuilderModuleScriptGenerator.java | 10 +++++----- 8 files changed, 47 insertions(+), 22 deletions(-) diff --git a/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleDescriptionBuilder.java b/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleDescriptionBuilder.java index 29ee2814c88..f203d81809d 100644 --- a/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleDescriptionBuilder.java +++ b/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleDescriptionBuilder.java @@ -27,6 +27,7 @@ public interface KotlinModuleDescriptionBuilder { String outputDir, DependencyProvider dependencyProvider, List sourceFiles, + List javaSourceRoots, boolean tests, Set directoriesToFilterOut ); diff --git a/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleScriptBuilderFactory.java b/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleScriptBuilderFactory.java index 71e229a8a8b..d7d48e07964 100644 --- a/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleScriptBuilderFactory.java +++ b/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleScriptBuilderFactory.java @@ -56,6 +56,7 @@ public class KotlinModuleScriptBuilderFactory implements KotlinModuleDescription String outputDir, DependencyProvider dependencyProvider, List sourceFiles, + List javaSourceRoots, boolean tests, final Set directoriesToFilterOut ) { @@ -74,7 +75,7 @@ public class KotlinModuleScriptBuilderFactory implements KotlinModuleDescription script.append(" sources += \"" + toSystemIndependentName(sourceFile.getPath()) + "\"\n"); } - dependencyProvider.processClassPath(new DependencyProcessor() { + DependencyProcessor processor = new DependencyProcessor() { @Override public void processClassPathSection(@NotNull String sectionDescription, @NotNull Collection files) { script.append(" // " + sectionDescription + "\n"); @@ -97,7 +98,13 @@ public class KotlinModuleScriptBuilderFactory implements KotlinModuleDescription script.append(" annotationsPath += \"").append(toSystemIndependentName(file.getPath())).append("\"\n"); } } - }); + }; + + if (!javaSourceRoots.isEmpty()) { + processor.processClassPathSection("Java source roots", javaSourceRoots); + } + + dependencyProvider.processClassPath(processor); script.append(" }\n"); return this; diff --git a/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilderFactory.java b/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilderFactory.java index 11dd346897d..d11932c85a4 100644 --- a/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilderFactory.java +++ b/ide-compiler-runner/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilderFactory.java @@ -60,6 +60,7 @@ public class KotlinModuleXmlBuilderFactory implements KotlinModuleDescriptionBui String outputDir, DependencyProvider dependencyProvider, List sourceFiles, + List javaSourceRoots, boolean tests, final Set directoriesToFilterOut ) { @@ -82,7 +83,7 @@ public class KotlinModuleXmlBuilderFactory implements KotlinModuleDescriptionBui p.println("<", SOURCES, " ", PATH, "=\"", getEscapedPath(sourceFile), "\"/>"); } - dependencyProvider.processClassPath(new DependencyProcessor() { + DependencyProcessor processor = new DependencyProcessor() { @Override public void processClassPathSection(@NotNull String sectionDescription, @NotNull Collection files) { p.println(""); @@ -110,10 +111,16 @@ public class KotlinModuleXmlBuilderFactory implements KotlinModuleDescriptionBui public void processAnnotationRoots(@NotNull List files) { p.println(""); for (File file : files) { - p.println("<", EXTERNAL_ANNOTATIONS, " ", PATH, "= \"", getEscapedPath(file), "\"/>"); + p.println("<", EXTERNAL_ANNOTATIONS, " ", PATH, "=\"", getEscapedPath(file), "\"/>"); } } - }); + }; + + if (!javaSourceRoots.isEmpty()) { + processor.processClassPathSection("Java source roots", javaSourceRoots); + } + + dependencyProvider.processClassPath(processor); closeTag(p, MODULE); return this; diff --git a/idea/testData/modules.xml/basic.xml b/idea/testData/modules.xml/basic.xml index 340cb84d589..fff49604ea7 100644 --- a/idea/testData/modules.xml/basic.xml +++ b/idea/testData/modules.xml/basic.xml @@ -3,9 +3,11 @@ + + - - + + diff --git a/idea/testData/modules.xml/filtered.xml b/idea/testData/modules.xml/filtered.xml index e7ed7eb1982..945d7da1c80 100644 --- a/idea/testData/modules.xml/filtered.xml +++ b/idea/testData/modules.xml/filtered.xml @@ -4,8 +4,8 @@ - - + + - - + + - - + +