From bf7785601076a71408813cd0bc6ec22166329eea Mon Sep 17 00:00:00 2001 From: Lukacs Berki Date: Tue, 18 Aug 2015 09:21:34 +0000 Subject: Change the paths of a few temporary directories javac uses so that they don't clash with some Android artifacts. Ideally, we'd simply put these in a temp directory, but we currently have no mechanism for cleaning up temp directories after each action and we don't have sandboxing yet, so we can't rely on that, either. -- MOS_MIGRATED_REVID=100907458 --- .../lib/rules/java/BaseJavaCompilationHelper.java | 14 ++++++++++---- .../build/lib/rules/java/JavaCompilationHelper.java | 2 ++ .../build/lib/rules/java/JavaCompileAction.java | 20 ++++++-------------- 3 files changed, 18 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java index 6c6020ccb1..dcc5ee9fcd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java @@ -217,15 +217,21 @@ public class BaseJavaCompilationHelper { return workDir(outputJar, "_temp"); } + protected PathFragment classDir(Artifact outputJar) { + return workDir(outputJar, "_classes"); + } + /** * For an output jar and a suffix, produces a derived directory under * {@code bin} directory with a given suffix. + * + *

Note that this won't work if a rule produces two jars with the same basename. */ private PathFragment workDir(Artifact outputJar, String suffix) { - PathFragment path = outputJar.getRootRelativePath(); - String basename = FileSystemUtils.removeExtension(path.getBaseName()) + suffix; - path = path.replaceName(basename); - return getConfiguration().getBinDirectory().getExecPath().getRelative(path); + String basename = FileSystemUtils.removeExtension(outputJar.getExecPath().getBaseName()); + return getConfiguration().getBinDirectory().getExecPath() + .getRelative(ruleContext.getUniqueDirectory("_javac")) + .getRelative(basename + suffix); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java index f321d357a6..d426d2bea6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java @@ -131,6 +131,7 @@ public class JavaCompilationHelper extends BaseJavaCompilationHelper { builder.setCompressJar(true); builder.setSourceGenDirectory(sourceGenDir(outputJar)); builder.setTempDirectory(tempDir(outputJar)); + builder.setClassDirectory(classDir(outputJar)); builder.addProcessorPaths(attributes.getProcessorPath()); builder.addProcessorNames(attributes.getProcessorNames()); builder.setStrictJavaDeps(attributes.getStrictJavaDeps()); @@ -316,6 +317,7 @@ public class JavaCompilationHelper extends BaseJavaCompilationHelper { builder.addTranslations(getTranslations()); builder.setCompressJar(true); builder.setTempDirectory(tempDir(resourceJar)); + builder.setClassDirectory(classDir(resourceJar)); builder.setJavaBuilderJar(getJavaBuilderJar()); builder.setJavacOpts(getDefaultJavacOptsFromRule(getRuleContext())); builder.setJavacJvmOpts( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java index 9e87fb67e6..0285031c7c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java @@ -58,7 +58,6 @@ import com.google.devtools.build.lib.syntax.Label; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.util.ShellEscaper; import com.google.devtools.build.lib.util.StringCanonicalizer; -import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; @@ -754,6 +753,7 @@ public class JavaCompileAction extends AbstractAction { private ImmutableList instrumentationJars = ImmutableList.of(); private PathFragment sourceGenDirectory; private PathFragment tempDirectory; + private PathFragment classDirectory; private final List processorPath = new ArrayList<>(); private final List processorNames = new ArrayList<>(); private String ruleKind; @@ -843,8 +843,6 @@ public class JavaCompileAction extends AbstractAction { gensrcOutputJar, manifestProtoOutput, outputDepsProto), Predicates.notNull())); - PathFragment classDirectory = - configuration.getBinFragment().getRelative(workDir(outputJar, "_files")); CustomCommandLine.Builder paramFileContentsBuilder = javaCompileCommandLine( semantics, @@ -913,17 +911,6 @@ public class JavaCompileAction extends AbstractAction { compileTimeDependencyArtifacts); } - /** - * For an output jar and a suffix, produces a derived directory under - * {@code bin} directory with a given suffix. - */ - private PathFragment workDir(Artifact outputJar, String suffix) { - PathFragment path = outputJar.getRootRelativePath(); - String basename = FileSystemUtils.removeExtension(path.getBaseName()) + suffix; - path = path.replaceName(basename); - return path; - } - public Builder setParameterFile(Artifact paramFile) { this.paramFile = paramFile; return this; @@ -1059,6 +1046,11 @@ public class JavaCompileAction extends AbstractAction { return this; } + public Builder setClassDirectory(PathFragment classDirectory) { + this.classDirectory = classDirectory; + return this; + } + public Builder addProcessorPaths(Collection processorPaths) { this.processorPath.addAll(processorPaths); return this; -- cgit v1.2.3