remove abstraction which is no longer needed
Original commit: 20fbb814e4
This commit is contained in:
committed by
Evgeny Gerashchenko
parent
117ecaa011
commit
3f59b7a6db
+2
-6
@@ -39,9 +39,7 @@ import org.jetbrains.jps.model.module.JpsDependencyElement;
|
|||||||
import org.jetbrains.jps.model.module.JpsModule;
|
import org.jetbrains.jps.model.module.JpsModule;
|
||||||
import org.jetbrains.jps.model.module.JpsSdkDependency;
|
import org.jetbrains.jps.model.module.JpsSdkDependency;
|
||||||
import org.jetbrains.kotlin.config.IncrementalCompilation;
|
import org.jetbrains.kotlin.config.IncrementalCompilation;
|
||||||
import org.jetbrains.kotlin.modules.KotlinModuleDescriptionBuilder;
|
import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder;
|
||||||
import org.jetbrains.kotlin.modules.KotlinModuleDescriptionBuilderFactory;
|
|
||||||
import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilderFactory;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -51,8 +49,6 @@ import static org.jetbrains.kotlin.jps.build.JpsUtils.getAllDependencies;
|
|||||||
|
|
||||||
public class KotlinBuilderModuleScriptGenerator {
|
public class KotlinBuilderModuleScriptGenerator {
|
||||||
|
|
||||||
public static final KotlinModuleDescriptionBuilderFactory FACTORY = KotlinModuleXmlBuilderFactory.INSTANCE;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static File generateModuleDescription(
|
public static File generateModuleDescription(
|
||||||
CompileContext context,
|
CompileContext context,
|
||||||
@@ -60,7 +56,7 @@ public class KotlinBuilderModuleScriptGenerator {
|
|||||||
MultiMap<ModuleBuildTarget, File> sourceFiles, // ignored for non-incremental compilation
|
MultiMap<ModuleBuildTarget, File> sourceFiles, // ignored for non-incremental compilation
|
||||||
boolean hasRemovedFiles
|
boolean hasRemovedFiles
|
||||||
) throws IOException, ProjectBuildException {
|
) throws IOException, ProjectBuildException {
|
||||||
KotlinModuleDescriptionBuilder builder = FACTORY.create();
|
KotlinModuleXmlBuilder builder = new KotlinModuleXmlBuilder();
|
||||||
|
|
||||||
boolean noSources = true;
|
boolean noSources = true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.modules;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public interface KotlinModuleDescriptionBuilder {
|
|
||||||
KotlinModuleDescriptionBuilder addModule(
|
|
||||||
String moduleName,
|
|
||||||
String outputDir,
|
|
||||||
List<File> sourceFiles,
|
|
||||||
List<File> javaSourceRoots,
|
|
||||||
Collection<File> classpathRoots,
|
|
||||||
List<File> annotationRoots,
|
|
||||||
boolean tests,
|
|
||||||
Set<File> directoriesToFilterOut
|
|
||||||
);
|
|
||||||
|
|
||||||
CharSequence asText();
|
|
||||||
}
|
|
||||||
-22
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.modules;
|
|
||||||
|
|
||||||
public interface KotlinModuleDescriptionBuilderFactory {
|
|
||||||
KotlinModuleDescriptionBuilder create();
|
|
||||||
String getFileExtension();
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.modules;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.kotlin.config.IncrementalCompilation;
|
||||||
|
import org.jetbrains.kotlin.utils.Printer;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static com.intellij.openapi.util.io.FileUtil.toSystemIndependentName;
|
||||||
|
import static com.intellij.openapi.util.text.StringUtil.escapeXml;
|
||||||
|
import static org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser.*;
|
||||||
|
|
||||||
|
public class KotlinModuleXmlBuilder {
|
||||||
|
private final StringBuilder xml = new StringBuilder();
|
||||||
|
private final Printer p = new Printer(xml);
|
||||||
|
private boolean done = false;
|
||||||
|
|
||||||
|
public KotlinModuleXmlBuilder() {
|
||||||
|
openTag(p, MODULES);
|
||||||
|
}
|
||||||
|
|
||||||
|
public KotlinModuleXmlBuilder addModule(
|
||||||
|
String moduleName,
|
||||||
|
String outputDir,
|
||||||
|
List<File> sourceFiles,
|
||||||
|
List<File> javaSourceRoots,
|
||||||
|
Collection<File> classpathRoots,
|
||||||
|
List<File> annotationRoots,
|
||||||
|
boolean tests,
|
||||||
|
Set<File> directoriesToFilterOut
|
||||||
|
) {
|
||||||
|
assert !done : "Already done";
|
||||||
|
|
||||||
|
if (tests) {
|
||||||
|
p.println("<!-- Module script for tests -->");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
p.println("<!-- Module script for production -->");
|
||||||
|
}
|
||||||
|
|
||||||
|
p.println("<", MODULE, " ",
|
||||||
|
NAME, "=\"", escapeXml(moduleName), "\" ",
|
||||||
|
OUTPUT_DIR, "=\"", getEscapedPath(new File(outputDir)), "\">"
|
||||||
|
);
|
||||||
|
p.pushIndent();
|
||||||
|
|
||||||
|
for (File sourceFile : sourceFiles) {
|
||||||
|
p.println("<", SOURCES, " ", PATH, "=\"", getEscapedPath(sourceFile), "\"/>");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!javaSourceRoots.isEmpty()) {
|
||||||
|
processClassPathSection("Java source roots", javaSourceRoots, directoriesToFilterOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
processClassPathSection("Classpath", classpathRoots, directoriesToFilterOut);
|
||||||
|
processAnnotationRoots(annotationRoots);
|
||||||
|
|
||||||
|
closeTag(p, MODULE);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processClassPathSection(
|
||||||
|
@NotNull String sectionDescription,
|
||||||
|
@NotNull Collection<File> files,
|
||||||
|
@NotNull Set<File> directoriesToFilterOut
|
||||||
|
) {
|
||||||
|
p.println("<!-- ", sectionDescription, " -->");
|
||||||
|
for (File file : files) {
|
||||||
|
boolean isOutput = directoriesToFilterOut.contains(file) && !IncrementalCompilation.ENABLED;
|
||||||
|
if (isOutput) {
|
||||||
|
// For IDEA's make (incremental compilation) purposes, output directories of the current module and its dependencies
|
||||||
|
// appear on the class path, so we are at risk of seeing the results of the previous build, i.e. if some class was
|
||||||
|
// removed in the sources, it may still be there in binaries. Thus, we delete these entries from the classpath.
|
||||||
|
p.println("<!-- Output directory, commented out -->");
|
||||||
|
p.println("<!-- ");
|
||||||
|
p.pushIndent();
|
||||||
|
}
|
||||||
|
|
||||||
|
p.println("<", CLASSPATH, " ", PATH, "=\"", getEscapedPath(file), "\"/>");
|
||||||
|
|
||||||
|
if (isOutput) {
|
||||||
|
p.popIndent();
|
||||||
|
p.println("-->");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processAnnotationRoots(@NotNull List<File> files) {
|
||||||
|
p.println("<!-- External annotations -->");
|
||||||
|
for (File file : files) {
|
||||||
|
p.println("<", EXTERNAL_ANNOTATIONS, " ", PATH, "=\"", getEscapedPath(file), "\"/>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CharSequence asText() {
|
||||||
|
if (!done) {
|
||||||
|
closeTag(p, MODULES);
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
return xml;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void openTag(Printer p, String tag) {
|
||||||
|
p.println("<" + tag + ">");
|
||||||
|
p.pushIndent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void closeTag(Printer p, String tag) {
|
||||||
|
p.popIndent();
|
||||||
|
p.println("</" + tag + ">");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getEscapedPath(File sourceFile) {
|
||||||
|
return escapeXml(toSystemIndependentName(sourceFile.getPath()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,154 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.modules;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.kotlin.config.IncrementalCompilation;
|
|
||||||
import org.jetbrains.kotlin.utils.Printer;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static com.intellij.openapi.util.io.FileUtil.toSystemIndependentName;
|
|
||||||
import static com.intellij.openapi.util.text.StringUtil.escapeXml;
|
|
||||||
import static org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser.*;
|
|
||||||
|
|
||||||
public class KotlinModuleXmlBuilderFactory implements KotlinModuleDescriptionBuilderFactory {
|
|
||||||
|
|
||||||
public static final KotlinModuleXmlBuilderFactory INSTANCE = new KotlinModuleXmlBuilderFactory();
|
|
||||||
|
|
||||||
private KotlinModuleXmlBuilderFactory() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public KotlinModuleDescriptionBuilder create() {
|
|
||||||
return new Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getFileExtension() {
|
|
||||||
return "xml";
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class Builder implements KotlinModuleDescriptionBuilder {
|
|
||||||
private final StringBuilder xml = new StringBuilder();
|
|
||||||
private final Printer p = new Printer(xml);
|
|
||||||
private boolean done = false;
|
|
||||||
|
|
||||||
public Builder() {
|
|
||||||
openTag(p, MODULES);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public KotlinModuleDescriptionBuilder addModule(
|
|
||||||
String moduleName,
|
|
||||||
String outputDir,
|
|
||||||
List<File> sourceFiles,
|
|
||||||
List<File> javaSourceRoots,
|
|
||||||
Collection<File> classpathRoots,
|
|
||||||
List<File> annotationRoots,
|
|
||||||
boolean tests,
|
|
||||||
Set<File> directoriesToFilterOut
|
|
||||||
) {
|
|
||||||
assert !done : "Already done";
|
|
||||||
|
|
||||||
if (tests) {
|
|
||||||
p.println("<!-- Module script for tests -->");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.println("<!-- Module script for production -->");
|
|
||||||
}
|
|
||||||
|
|
||||||
p.println("<", MODULE, " ",
|
|
||||||
NAME, "=\"", escapeXml(moduleName), "\" ",
|
|
||||||
OUTPUT_DIR, "=\"", getEscapedPath(new File(outputDir)), "\">"
|
|
||||||
);
|
|
||||||
p.pushIndent();
|
|
||||||
|
|
||||||
for (File sourceFile : sourceFiles) {
|
|
||||||
p.println("<", SOURCES, " ", PATH, "=\"", getEscapedPath(sourceFile), "\"/>");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!javaSourceRoots.isEmpty()) {
|
|
||||||
processClassPathSection("Java source roots", javaSourceRoots, directoriesToFilterOut);
|
|
||||||
}
|
|
||||||
|
|
||||||
processClassPathSection("Classpath", classpathRoots, directoriesToFilterOut);
|
|
||||||
processAnnotationRoots(annotationRoots);
|
|
||||||
|
|
||||||
closeTag(p, MODULE);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processClassPathSection(
|
|
||||||
@NotNull String sectionDescription,
|
|
||||||
@NotNull Collection<File> files,
|
|
||||||
@NotNull Set<File> directoriesToFilterOut
|
|
||||||
) {
|
|
||||||
p.println("<!-- ", sectionDescription, " -->");
|
|
||||||
for (File file : files) {
|
|
||||||
boolean isOutput = directoriesToFilterOut.contains(file) && !IncrementalCompilation.ENABLED;
|
|
||||||
if (isOutput) {
|
|
||||||
// For IDEA's make (incremental compilation) purposes, output directories of the current module and its dependencies
|
|
||||||
// appear on the class path, so we are at risk of seeing the results of the previous build, i.e. if some class was
|
|
||||||
// removed in the sources, it may still be there in binaries. Thus, we delete these entries from the classpath.
|
|
||||||
p.println("<!-- Output directory, commented out -->");
|
|
||||||
p.println("<!-- ");
|
|
||||||
p.pushIndent();
|
|
||||||
}
|
|
||||||
|
|
||||||
p.println("<", CLASSPATH, " ", PATH, "=\"", getEscapedPath(file), "\"/>");
|
|
||||||
|
|
||||||
if (isOutput) {
|
|
||||||
p.popIndent();
|
|
||||||
p.println("-->");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processAnnotationRoots(@NotNull List<File> files) {
|
|
||||||
p.println("<!-- External annotations -->");
|
|
||||||
for (File file : files) {
|
|
||||||
p.println("<", EXTERNAL_ANNOTATIONS, " ", PATH, "=\"", getEscapedPath(file), "\"/>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CharSequence asText() {
|
|
||||||
if (!done) {
|
|
||||||
closeTag(p, MODULES);
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
return xml;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void openTag(Printer p, String tag) {
|
|
||||||
p.println("<" + tag + ">");
|
|
||||||
p.pushIndent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void closeTag(Printer p, String tag) {
|
|
||||||
p.popIndent();
|
|
||||||
p.println("</" + tag + ">");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String getEscapedPath(File sourceFile) {
|
|
||||||
return escapeXml(toSystemIndependentName(sourceFile.getPath()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -16,12 +16,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.jvm.compiler
|
package org.jetbrains.kotlin.jvm.compiler
|
||||||
|
|
||||||
import org.jetbrains.kotlin.test.TestCaseWithTmpdir
|
import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder
|
||||||
import org.jetbrains.kotlin.test.JetTestUtils
|
import org.jetbrains.kotlin.test.JetTestUtils
|
||||||
import org.jetbrains.kotlin.test.MockLibraryUtil
|
import org.jetbrains.kotlin.test.MockLibraryUtil
|
||||||
import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilderFactory
|
import org.jetbrains.kotlin.test.TestCaseWithTmpdir
|
||||||
import java.io.File
|
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
import org.jetbrains.kotlin.utils.PathUtil
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This test checks that Java classes from sources have higher priority in Kotlin resolution process than classes from binaries.
|
* This test checks that Java classes from sources have higher priority in Kotlin resolution process than classes from binaries.
|
||||||
@@ -38,7 +38,7 @@ public class ClasspathOrderTest : TestCaseWithTmpdir() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public fun testClasspathOrderForModuleScriptBuild() {
|
public fun testClasspathOrderForModuleScriptBuild() {
|
||||||
val xmlContent = KotlinModuleXmlBuilderFactory.INSTANCE.create().addModule(
|
val xmlContent = KotlinModuleXmlBuilder().addModule(
|
||||||
"name",
|
"name",
|
||||||
File(tmpdir, "output").getAbsolutePath(),
|
File(tmpdir, "output").getAbsolutePath(),
|
||||||
listOf(sourceDir),
|
listOf(sourceDir),
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import java.util.Collections;
|
|||||||
|
|
||||||
public class KotlinModuleXmlGeneratorTest extends TestCase {
|
public class KotlinModuleXmlGeneratorTest extends TestCase {
|
||||||
public void testBasic() throws Exception {
|
public void testBasic() throws Exception {
|
||||||
String actual = KotlinModuleXmlBuilderFactory.INSTANCE.create().addModule(
|
String actual = new KotlinModuleXmlBuilder().addModule(
|
||||||
"name",
|
"name",
|
||||||
"output",
|
"output",
|
||||||
Arrays.asList(new File("s1"), new File("s2")),
|
Arrays.asList(new File("s1"), new File("s2")),
|
||||||
@@ -39,7 +39,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testFiltered() throws Exception {
|
public void testFiltered() throws Exception {
|
||||||
String actual = KotlinModuleXmlBuilderFactory.INSTANCE.create().addModule(
|
String actual = new KotlinModuleXmlBuilder().addModule(
|
||||||
"name",
|
"name",
|
||||||
"output",
|
"output",
|
||||||
Arrays.asList(new File("s1"), new File("s2")),
|
Arrays.asList(new File("s1"), new File("s2")),
|
||||||
@@ -53,7 +53,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testMultiple() throws Exception {
|
public void testMultiple() throws Exception {
|
||||||
KotlinModuleDescriptionBuilder builder = KotlinModuleXmlBuilderFactory.INSTANCE.create();
|
KotlinModuleXmlBuilder builder = new KotlinModuleXmlBuilder();
|
||||||
builder.addModule(
|
builder.addModule(
|
||||||
"name",
|
"name",
|
||||||
"output",
|
"output",
|
||||||
|
|||||||
Reference in New Issue
Block a user