Do not fail on circular dependencies + better message
This commit is contained in:
@@ -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<JpsModule,String> MODULE_NAME = new Function<JpsModule, String>() {
|
||||
@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();
|
||||
|
||||
@@ -82,6 +82,10 @@ public class KotlinJpsBuildTestCase extends AbstractKotlinJpsBuildTestCase {
|
||||
doTestWithRuntime();
|
||||
}
|
||||
|
||||
public void testCircularDependenciesNoKotlinFiles() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testTestDependencyLibrary() throws Throwable {
|
||||
initProject();
|
||||
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