From 048725c3f0e55eb7ed5b475af153fc61e647ab00 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Sun, 8 Nov 2015 19:54:46 +0300 Subject: [PATCH] Add prefix information for Java source root (KT-9167 in progress) #KT-9167 In Progress Original commit: c0739ef53c6fecccede925de7fbc57ca88693257 --- .../kotlin/jps/build/JvmSourceRoot.kt | 21 +++++++++++++++++++ .../KotlinBuilderModuleScriptGenerator.java | 7 ++++--- .../modules/KotlinModuleXmlBuilder.java | 17 +++++++++++---- .../kotlin/jvm/compiler/ClasspathOrderTest.kt | 3 ++- .../modules/KotlinModuleXmlGeneratorTest.java | 9 ++++---- 5 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/JvmSourceRoot.kt diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/JvmSourceRoot.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/JvmSourceRoot.kt new file mode 100644 index 00000000000..6dba446f049 --- /dev/null +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/JvmSourceRoot.kt @@ -0,0 +1,21 @@ +/* + * 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.jps.build + +import java.io.File + +data class JvmSourceRoot(val file: File, val packagePrefix: String? = null) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java index 3425490f7c7..6d146f3274f 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java @@ -127,13 +127,14 @@ public class KotlinBuilderModuleScriptGenerator { } @NotNull - private static List findSourceRoots(@NotNull CompileContext context, @NotNull ModuleBuildTarget target) { + private static List findSourceRoots(@NotNull CompileContext context, @NotNull ModuleBuildTarget target) { List roots = context.getProjectDescriptor().getBuildRootIndex().getTargetRoots(target, context); - List result = ContainerUtil.newArrayList(); + List result = ContainerUtil.newArrayList(); for (JavaSourceRootDescriptor root : roots) { File file = root.getRootFile(); + String prefix = root.getPackagePrefix(); if (file.exists()) { - result.add(file); + result.add(new JvmSourceRoot(file, prefix.isEmpty() ? null : prefix)); } } return result; diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java b/jps/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java index a74c1a2f29b..73cdd88fd4b 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.modules; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; import org.jetbrains.kotlin.config.IncrementalCompilation; +import org.jetbrains.kotlin.jps.build.JvmSourceRoot; import org.jetbrains.kotlin.utils.Printer; import java.io.File; @@ -43,7 +44,7 @@ public class KotlinModuleXmlBuilder { String moduleName, String outputDir, List sourceFiles, - List javaSourceRoots, + List javaSourceRoots, Collection classpathRoots, JavaModuleBuildTargetType targetType, Set directoriesToFilterOut @@ -100,10 +101,18 @@ public class KotlinModuleXmlBuilder { } } - private void processJavaSourceRoots(@NotNull List files) { + private void processJavaSourceRoots(@NotNull List roots) { p.println(""); - for (File file : files) { - p.println("<", JAVA_SOURCE_ROOTS, " ", PATH, "=\"", getEscapedPath(file), "\"/>"); + for (JvmSourceRoot root : roots) { + p.print("<"); + p.printWithNoIndent(JAVA_SOURCE_ROOTS, " ", PATH, "=\"", getEscapedPath(root.getFile()), "\""); + + if (root.getPackagePrefix() != null) { + p.printWithNoIndent(" ", JAVA_SOURCE_PACKAGE_PREFIX, "=\"", root.getPackagePrefix(), "\""); + } + + p.printWithNoIndent("/>"); + p.println(); } } diff --git a/jps/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt b/jps/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt index 7a9f6cfc73b..67d05520359 100644 --- a/jps/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt +++ b/jps/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.jvm.compiler import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType +import org.jetbrains.kotlin.jps.build.JvmSourceRoot import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.MockLibraryUtil @@ -43,7 +44,7 @@ public class ClasspathOrderTest : TestCaseWithTmpdir() { "name", File(tmpdir, "output").getAbsolutePath(), listOf(sourceDir), - listOf(sourceDir), + listOf(JvmSourceRoot(sourceDir)), listOf(PathUtil.getKotlinPathsForDistDirectory().getRuntimePath()), JavaModuleBuildTargetType.PRODUCTION, setOf() diff --git a/jps/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java b/jps/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java index b6198737e3e..a16f2d3ce01 100644 --- a/jps/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java +++ b/jps/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.modules; import junit.framework.TestCase; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; +import org.jetbrains.kotlin.jps.build.JvmSourceRoot; import org.jetbrains.kotlin.test.KotlinTestUtils; import java.io.File; @@ -30,7 +31,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase { "name", "output", Arrays.asList(new File("s1"), new File("s2")), - Collections.singletonList(new File("java")), + Collections.singletonList(new JvmSourceRoot(new File("java"), null)), Arrays.asList(new File("cp1"), new File("cp2")), JavaModuleBuildTargetType.PRODUCTION, Collections.emptySet() @@ -43,7 +44,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase { "name", "output", Arrays.asList(new File("s1"), new File("s2")), - Collections.emptyList(), + Collections.emptyList(), Arrays.asList(new File("cp1"), new File("cp2")), JavaModuleBuildTargetType.PRODUCTION, Collections.singleton(new File("cp1")) @@ -57,7 +58,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase { "name", "output", Arrays.asList(new File("s1"), new File("s2")), - Collections.emptyList(), + Collections.emptyList(), Arrays.asList(new File("cp1"), new File("cp2")), JavaModuleBuildTargetType.PRODUCTION, Collections.singleton(new File("cp1")) @@ -66,7 +67,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase { "name2", "output2", Arrays.asList(new File("s12"), new File("s22")), - Collections.emptyList(), + Collections.emptyList(), Arrays.asList(new File("cp12"), new File("cp22")), JavaModuleBuildTargetType.TEST, Collections.singleton(new File("cp12"))