diff options
Diffstat (limited to 'jps')
5 files changed, 69 insertions, 12 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; diff --git a/jps/model-api/src/org/jetbrains/jps/model/java/JpsNativeLibraryRootType.java b/jps/model-api/src/org/jetbrains/jps/model/java/JpsNativeLibraryRootType.java new file mode 100644 index 000000000000..ae2e87b966f1 --- /dev/null +++ b/jps/model-api/src/org/jetbrains/jps/model/java/JpsNativeLibraryRootType.java @@ -0,0 +1,28 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.jps.model.java; + +import org.jetbrains.jps.model.library.JpsOrderRootType; + +/** + * @author nik + */ +public class JpsNativeLibraryRootType extends JpsOrderRootType { + public static final JpsNativeLibraryRootType INSTANCE = new JpsNativeLibraryRootType(); + + private JpsNativeLibraryRootType() { + } +} diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java index 0dfead17644f..22188be46e2d 100644 --- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java @@ -126,7 +126,8 @@ public class JpsJavaModelSerializerExtension extends JpsModelSerializerExtension @Override public List<JpsLibraryRootTypeSerializer> getLibraryRootTypeSerializers() { return Arrays.asList(new JpsLibraryRootTypeSerializer("JAVADOC", JpsOrderRootType.DOCUMENTATION, true), - new JpsLibraryRootTypeSerializer("ANNOTATIONS", JpsAnnotationRootType.INSTANCE, false)); + new JpsLibraryRootTypeSerializer("ANNOTATIONS", JpsAnnotationRootType.INSTANCE, false), + new JpsLibraryRootTypeSerializer("NATIVE", JpsNativeLibraryRootType.INSTANCE, false)); } @NotNull |