summaryrefslogtreecommitdiff
path: root/jps/jps-builders/src/org/jetbrains
diff options
context:
space:
mode:
Diffstat (limited to 'jps/jps-builders/src/org/jetbrains')
-rw-r--r--jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java42
-rw-r--r--jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java2
-rw-r--r--jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java6
3 files changed, 39 insertions, 11 deletions
diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java
index c6b34ab97bed..8634769222a0 100644
--- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java
+++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java
@@ -74,7 +74,29 @@ public class BuildMain {
final File systemDir = new File(FileUtil.toCanonicalPath(args[SYSTEM_DIR_ARG]));
Utils.setSystemRoot(systemDir);
- ourEventLoopGroup = new NioEventLoopGroup(1, SharedThreadPool.getInstance());
+ // IDEA-123132, let's try again
+ for (int attempt = 0; attempt < 3; attempt++) {
+ try {
+ ourEventLoopGroup = new NioEventLoopGroup(1, SharedThreadPool.getInstance());
+ break;
+ }
+ catch (IllegalStateException e) {
+ if (attempt == 2) {
+ printErrorAndExit(host, port, e);
+ return;
+ }
+ else {
+ LOG.warn("Cannot create event loop, attempt #" + attempt, e);
+ try {
+ //noinspection BusyWait
+ Thread.sleep(10 * (attempt + 1));
+ }
+ catch (InterruptedException ignored) {
+ }
+ }
+ }
+ }
+
final Bootstrap bootstrap = new Bootstrap().group(ourEventLoopGroup).channel(NioSocketChannel.class).handler(new ChannelInitializer() {
@Override
protected void initChannel(Channel channel) throws Exception {
@@ -92,15 +114,17 @@ public class BuildMain {
future.channel().writeAndFlush(CmdlineProtoUtil.toMessage(sessionId, CmdlineProtoUtil.createParamRequest()));
}
else {
- @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
- final Throwable reason = future.cause();
- System.err.println("Error connecting to " + host + ":" + port + "; reason: " + (reason != null? reason.getMessage() : "unknown"));
- if (reason != null) {
- reason.printStackTrace(System.err);
- }
- System.err.println("Exiting.");
- System.exit(-1);
+ printErrorAndExit(host, port, future.cause());
+ }
+ }
+
+ private static void printErrorAndExit(String host, int port, Throwable reason) {
+ System.err.println("Error connecting to " + host + ":" + port + "; reason: " + (reason != null ? reason.getMessage() : "unknown"));
+ if (reason != null) {
+ reason.printStackTrace(System.err);
}
+ System.err.println("Exiting.");
+ System.exit(-1);
}
private static class MyMessageHandler extends SimpleChannelInboundHandler<CmdlineRemoteProto.Message> {
diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java
index 63e538022160..d52e1e6a0132 100644
--- a/jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java
+++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java
@@ -151,7 +151,7 @@ public class FSOperations {
}
}
- public static void processFilesToRecompile(CompileContext context, ModuleBuildTarget target, FileProcessor<JavaSourceRootDescriptor, ModuleBuildTarget> processor) throws IOException {
+ public static void processFilesToRecompile(CompileContext context, @NotNull ModuleBuildTarget target, FileProcessor<JavaSourceRootDescriptor, ModuleBuildTarget> processor) throws IOException {
context.getProjectDescriptor().fsState.processFilesToRecompile(context, target, processor);
}
diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java
index e92c0d59a3b0..bb28c422044b 100644
--- a/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java
+++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java
@@ -145,13 +145,17 @@ public class BuildFSState extends FSState {
setRoundDelta(CURRENT_ROUND_DELTA_KEY, context, new FilesDelta());
}
- public <R extends BuildRootDescriptor, T extends BuildTarget<R>> boolean processFilesToRecompile(CompileContext context, final T target, final FileProcessor<R, T> processor) throws IOException {
+ public <R extends BuildRootDescriptor, T extends BuildTarget<R>> boolean processFilesToRecompile(CompileContext context, final @NotNull T target, final FileProcessor<R, T> processor) throws IOException {
final Map<BuildRootDescriptor, Set<File>> data = getSourcesToRecompile(context, target);
final CompileScope scope = context.getScope();
synchronized (data) {
for (Map.Entry<BuildRootDescriptor, Set<File>> entry : data.entrySet()) {
//noinspection unchecked
R root = (R)entry.getKey();
+ if (!target.equals(root.getTarget())) {
+ // the data can contain roots from other targets (e.g. when compiling module cycles)
+ continue;
+ }
for (File file : entry.getValue()) {
if (!scope.isAffected(target, file)) {
continue;