Add Java Source Roots to classpath
#KT-3062 Fixed
Original commit: ff45322d1a
This commit is contained in:
+19
-7
@@ -21,6 +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.KotlinModuleScriptGenerator;
|
import org.jetbrains.jet.compiler.runner.KotlinModuleScriptGenerator;
|
||||||
|
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;
|
||||||
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
||||||
@@ -31,10 +32,7 @@ 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.JpsDependencyElement;
|
import org.jetbrains.jps.model.module.*;
|
||||||
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;
|
||||||
@@ -51,7 +49,7 @@ public class KotlinBuilderModuleScriptGenerator {
|
|||||||
{
|
{
|
||||||
CharSequence moduleScriptText = KotlinModuleScriptGenerator.generateModuleScript(
|
CharSequence moduleScriptText = KotlinModuleScriptGenerator.generateModuleScript(
|
||||||
target.getId(),
|
target.getId(),
|
||||||
getKotlinModuleDependencies(target),
|
getKotlinModuleDependencies(context, target),
|
||||||
sourceFiles,
|
sourceFiles,
|
||||||
target.isTests(),
|
target.isTests(),
|
||||||
// this excludes the output directory from the class path, to be removed for true incremental compilation
|
// this excludes the output directory from the class path, to be removed for true incremental compilation
|
||||||
@@ -65,11 +63,12 @@ public class KotlinBuilderModuleScriptGenerator {
|
|||||||
return scriptFile;
|
return scriptFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DependencyProvider getKotlinModuleDependencies(final ModuleBuildTarget target) {
|
private static DependencyProvider getKotlinModuleDependencies(final CompileContext context, final ModuleBuildTarget target) {
|
||||||
return new DependencyProvider() {
|
return new DependencyProvider() {
|
||||||
@Override
|
@Override
|
||||||
public void processClassPath(@NotNull KotlinModuleScriptGenerator.DependencyProcessor processor) {
|
public void processClassPath(@NotNull KotlinModuleScriptGenerator.DependencyProcessor processor) {
|
||||||
processor.processClassPathSection("All", findClassPathRoots(target));
|
processor.processClassPathSection("Classpath", findClassPathRoots(target));
|
||||||
|
processor.processClassPathSection("Java Source Roots", findSourceRoots(context, target));
|
||||||
processor.processAnnotationRoots(findAnnotationRoots(target));
|
processor.processAnnotationRoots(findAnnotationRoots(target));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -93,6 +92,19 @@ public class KotlinBuilderModuleScriptGenerator {
|
|||||||
return dependencies.classes().getRoots();
|
return dependencies.classes().getRoots();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private static Collection<File> findSourceRoots(@NotNull CompileContext context, @NotNull ModuleBuildTarget target) {
|
||||||
|
List<JavaSourceRootDescriptor> roots = context.getProjectDescriptor().getBuildRootIndex().getTargetRoots(target, context);
|
||||||
|
Collection<File> result = ContainerUtil.newArrayList();
|
||||||
|
for (JavaSourceRootDescriptor root : roots) {
|
||||||
|
File file = root.getRootFile();
|
||||||
|
if (file.exists()) {
|
||||||
|
result.add(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static List<File> findAnnotationRoots(@NotNull ModuleBuildTarget target) {
|
private static List<File> findAnnotationRoots(@NotNull ModuleBuildTarget target) {
|
||||||
JpsModule module = target.getModule();
|
JpsModule module = target.getModule();
|
||||||
|
|||||||
Reference in New Issue
Block a user