Do not fail on circular dependencies + better message
Original commit: 6465abe7eb
This commit is contained in:
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.jps.build;
|
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 com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation;
|
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.*;
|
||||||
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
||||||
import org.jetbrains.jps.incremental.messages.CompilerMessage;
|
import org.jetbrains.jps.incremental.messages.CompilerMessage;
|
||||||
|
import org.jetbrains.jps.model.module.JpsModule;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
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.EXCEPTION;
|
||||||
|
import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.WARNING;
|
||||||
|
|
||||||
public class KotlinBuilder extends ModuleLevelBuilder {
|
public class KotlinBuilder extends ModuleLevelBuilder {
|
||||||
|
|
||||||
private static final String KOTLIN_BUILDER_NAME = "Kotlin Builder";
|
private static final String KOTLIN_BUILDER_NAME = "Kotlin Builder";
|
||||||
|
|
||||||
|
private static final Function<JpsModule,String> MODULE_NAME = new Function<JpsModule, String>() {
|
||||||
|
@Override
|
||||||
|
public String fun(JpsModule module) {
|
||||||
|
return module.getName();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
protected KotlinBuilder() {
|
protected KotlinBuilder() {
|
||||||
super(BuilderCategory.SOURCE_PROCESSOR);
|
super(BuilderCategory.SOURCE_PROCESSOR);
|
||||||
}
|
}
|
||||||
@@ -63,10 +73,14 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
MessageCollector messageCollector = new MessageCollectorAdapter(context);
|
MessageCollector messageCollector = new MessageCollectorAdapter(context);
|
||||||
|
|
||||||
if (chunk.getModules().size() > 1) {
|
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(
|
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);
|
CompilerMessageLocation.NO_LOCATION);
|
||||||
return ExitCode.ABORT;
|
return ExitCode.NOTHING_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ModuleBuildTarget representativeTarget = chunk.representativeTarget();
|
ModuleBuildTarget representativeTarget = chunk.representativeTarget();
|
||||||
|
|||||||
@@ -82,6 +82,10 @@ public class KotlinJpsBuildTestCase extends AbstractKotlinJpsBuildTestCase {
|
|||||||
doTestWithRuntime();
|
doTestWithRuntime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testCircularDependenciesNoKotlinFiles() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testTestDependencyLibrary() throws Throwable {
|
public void testTestDependencyLibrary() throws Throwable {
|
||||||
initProject();
|
initProject();
|
||||||
addKotlinRuntimeDependency(JpsJavaDependencyScope.TEST);
|
addKotlinRuntimeDependency(JpsJavaDependencyScope.TEST);
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="IDEA_JDK" jdkType="JavaSDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="KotlinRuntime" level="project" />
|
||||||
|
<orderEntry type="module" module-name="module2" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<option name="DEFAULT_COMPILER" value="Javac" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/kotlinProject.iml" filepath="$PROJECT_DIR$/kotlinProject.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/module2/module2.iml" filepath="$PROJECT_DIR$/module2/module2.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA_JDK" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="IDEA_JDK" jdkType="JavaSDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="module" module-name="kotlinProject" />
|
||||||
|
<orderEntry type="library" name="KotlinRuntime" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
public class JSecond {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
new JFirst().foo();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
public class JFirst {
|
||||||
|
JSecond s = null;
|
||||||
|
|
||||||
|
public void foo() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.out.println(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user