From 549bae9e9ae262f64003b8618ded5d11eab101fe Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 27 Jan 2012 18:07:40 +0100 Subject: [PATCH] cleanup javac cache hack to work only in "emdebbed javac" mode --- .../jps/incremental/IncProjectBuilder.java | 15 +++++++++++---- .../jps/incremental/java/JavaBuilder.java | 5 ++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index ccfa9e42dc4b..de2a9db7a408 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -1,11 +1,13 @@ package org.jetbrains.jps.incremental; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.io.PersistentEnumerator; import org.jetbrains.jps.*; import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.api.RequestFuture; import org.jetbrains.jps.incremental.java.ExternalJavacDescriptor; +import org.jetbrains.jps.incremental.java.JavaBuilder; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.messages.CompilerMessage; import org.jetbrains.jps.incremental.messages.ProgressMessage; @@ -26,6 +28,7 @@ import java.util.concurrent.ExecutionException; * Date: 9/17/11 */ public class IncProjectBuilder { + private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.IncProjectBuilder"); public static final String JPS_SERVER_NAME = "JPS BUILD"; private static final String CANCELED_MESSAGE = "The build has been canceled"; @@ -121,14 +124,18 @@ public class IncProjectBuilder { cleanupJavacNameTable(); } + private static boolean ourClenupFailed = false; private static void cleanupJavacNameTable() { try { - final Field freelistField = Class.forName("com.sun.tools.javac.util.Name$Table").getDeclaredField("freelist"); - freelistField.setAccessible(true); - freelistField.set(null, com.sun.tools.javac.util.List.nil()); + if (JavaBuilder.USE_EMBEDDED_JAVAC && !ourClenupFailed) { + final Field freelistField = Class.forName("com.sun.tools.javac.util.Name$Table").getDeclaredField("freelist"); + freelistField.setAccessible(true); + freelistField.set(null, com.sun.tools.javac.util.List.nil()); + } } catch (Throwable e) { - e.printStackTrace(); + ourClenupFailed = true; + LOG.info(e); } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index 2269278c3908..13544a88a868 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -34,8 +34,7 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; import org.objectweb.asm.commons.EmptyVisitor; -import javax.tools.Diagnostic; -import javax.tools.JavaFileObject; +import javax.tools.*; import java.io.*; import java.net.MalformedURLException; import java.net.ServerSocket; @@ -53,7 +52,7 @@ public class JavaBuilder extends ModuleLevelBuilder { public static final String BUILDER_NAME = "java"; private static final String JAVA_EXTENSION = ".java"; private static final String FORM_EXTENSION = ".form"; - private static final boolean USE_EMBEDDED_JAVAC = System.getProperty(GlobalOptions.USE_EXTERNAL_JAVAC_OPTION) == null; + public static final boolean USE_EMBEDDED_JAVAC = System.getProperty(GlobalOptions.USE_EXTERNAL_JAVAC_OPTION) == null; private static final FileFilter JAVA_SOURCES_FILTER = new FileFilter() { public boolean accept(File file) {