From 77a22016f455f6a9ed9f5afcc7acbaf702bf071f Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 29 May 2013 21:07:54 +0400 Subject: [PATCH 1/2] Do not fail on circular dependencies + better message Original commit: 6465abe7eb02304bc9a4698031bb9c45a3095391 --- .../jet/jps/build/KotlinBuilder.java | 20 ++++++++++++++++--- .../jet/jps/build/KotlinJpsBuildTestCase.java | 4 ++++ .../kotlinProject.iml | 14 +++++++++++++ .../kotlinProject.ipr | 15 ++++++++++++++ .../module2/module2.iml | 14 +++++++++++++ .../module2/src/JSecond.java | 5 +++++ .../src/JFirst.java | 11 ++++++++++ 7 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/kotlinProject.iml create mode 100644 jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/kotlinProject.ipr create mode 100644 jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/module2/module2.iml create mode 100644 jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/module2/src/JSecond.java create mode 100644 jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/src/JFirst.java diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java index 2f0eb7bb58f..0d88d6e635b 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java @@ -16,6 +16,8 @@ package org.jetbrains.jet.jps.build; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation; @@ -29,19 +31,27 @@ import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; import org.jetbrains.jps.incremental.*; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.messages.CompilerMessage; +import org.jetbrains.jps.model.module.JpsModule; import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.List; -import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.ERROR; import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.EXCEPTION; +import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.WARNING; public class KotlinBuilder extends ModuleLevelBuilder { private static final String KOTLIN_BUILDER_NAME = "Kotlin Builder"; + private static final Function MODULE_NAME = new Function() { + @Override + public String fun(JpsModule module) { + return module.getName(); + } + }; + protected KotlinBuilder() { super(BuilderCategory.SOURCE_PROCESSOR); } @@ -63,10 +73,14 @@ public class KotlinBuilder extends ModuleLevelBuilder { MessageCollector messageCollector = new MessageCollectorAdapter(context); if (chunk.getModules().size() > 1) { + // We do not support circular dependencies, but if they are present, we should not break the build, + // so we simply yield a warning and report NOTHING_DONE messageCollector.report( - ERROR, "Circular dependencies are not supported: " + chunk.getModules(), + WARNING, "Circular dependencies are not supported. " + + "The following modules depend on each other: " + StringUtil.join(chunk.getModules(), MODULE_NAME, ", ") + ". " + + "Kotlin is not compiled for these modules", CompilerMessageLocation.NO_LOCATION); - return ExitCode.ABORT; + return ExitCode.NOTHING_DONE; } ModuleBuildTarget representativeTarget = chunk.representativeTarget(); diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTestCase.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTestCase.java index 7461afc3328..72c20c11c83 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTestCase.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTestCase.java @@ -82,6 +82,10 @@ public class KotlinJpsBuildTestCase extends AbstractKotlinJpsBuildTestCase { doTestWithRuntime(); } + public void testCircularDependenciesNoKotlinFiles() { + doTest(); + } + public void testTestDependencyLibrary() throws Throwable { initProject(); addKotlinRuntimeDependency(JpsJavaDependencyScope.TEST); diff --git a/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/kotlinProject.iml b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/kotlinProject.iml new file mode 100644 index 00000000000..5559c7ad919 --- /dev/null +++ b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/kotlinProject.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/kotlinProject.ipr b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/kotlinProject.ipr new file mode 100644 index 00000000000..809737b0b76 --- /dev/null +++ b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/kotlinProject.ipr @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/module2/module2.iml b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/module2/module2.iml new file mode 100644 index 00000000000..eace69878a2 --- /dev/null +++ b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/module2/module2.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/module2/src/JSecond.java b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/module2/src/JSecond.java new file mode 100644 index 00000000000..e034bf38792 --- /dev/null +++ b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/module2/src/JSecond.java @@ -0,0 +1,5 @@ +public class JSecond { + public static void main(String[] args) { + new JFirst().foo(); + } +} diff --git a/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/src/JFirst.java b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/src/JFirst.java new file mode 100644 index 00000000000..12140d2a7e4 --- /dev/null +++ b/jps/jps-plugin/testData/CircularDependenciesNoKotlinFiles/src/JFirst.java @@ -0,0 +1,11 @@ +public class JFirst { + JSecond s = null; + + public void foo() { + + } + + public static void main(String[] args) { + System.out.println(1); + } +} \ No newline at end of file From 005124ed27f80e41543b1fea5106fe61f5651ad0 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 31 May 2013 20:26:18 +0400 Subject: [PATCH 2/2] Support custom JDK annotations path for TeamCity Original commit: 6d6e627641a9cc292c2023653ce58f29bf016c3d --- .../jps/build/KotlinBuilderModuleScriptGenerator.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java index ce53354d6ad..593cf2407c6 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java @@ -130,6 +130,16 @@ public class KotlinBuilderModuleScriptGenerator { } } + // JDK is stored locally on user's machine, so its configuration, including external annotation paths + // is not available on TeamCity. When running on TeamCity, one has to provide extra path to JDK annotations + String extraAnnotationsPaths = System.getProperty("jps.kotlin.extra.annotation.paths"); + if (extraAnnotationsPaths != null) { + String[] paths = extraAnnotationsPaths.split(File.pathSeparator); + for (String path : paths) { + annotationRootFiles.add(new File(path)); + } + } + return annotationRootFiles; }