diff options
author | Rumou Duan <rduan@google.com> | 2017-01-09 22:42:27 +0000 |
---|---|---|
committer | Marcel Hlopko <hlopko@google.com> | 2017-01-10 10:23:19 +0000 |
commit | 4878c69e18a09f5d798b8a56349c13624645845c (patch) | |
tree | 34630737e56ed1c06be78d36a65b33f26ce1ad0c /src/main/java/com | |
parent | 7bdc69cff348f8c1d4c1f816507a4221d4349538 (diff) |
Description redacted.
--
PiperOrigin-RevId: 144010091
MOS_MIGRATED_REVID=144010091
Diffstat (limited to 'src/main/java/com')
3 files changed, 77 insertions, 57 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java index 15c3ac7889..bb521951b5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import static com.google.devtools.build.lib.actions.Artifact.IS_TREE_ARTIFACT; import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST; import static com.google.devtools.build.lib.packages.Attribute.attr; import static com.google.devtools.build.lib.packages.BuildType.LABEL; @@ -23,7 +22,6 @@ import static java.nio.charset.StandardCharsets.ISO_8859_1; import com.google.common.base.Joiner; import com.google.common.base.Optional; -import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -292,24 +290,32 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF base.getProvider(JavaCompilationArgsProvider.class); JavaSourceInfoProvider sourceInfoProvider = base.getProvider(JavaSourceInfoProvider.class); JavaGenJarsProvider genJarProvider = base.getProvider(JavaGenJarsProvider.class); - ImmutableSet<Artifact> javaInputFiles; - if (sourceInfoProvider == null) { - javaInputFiles = ImmutableSet.<Artifact>of(); - } else { - javaInputFiles = ImmutableSet.<Artifact>builder() - .addAll(sourceInfoProvider.getSourceFiles()) - .addAll(sourceInfoProvider.getSourceJars()) - .addAll(sourceInfoProvider.getSourceJarsForJarFiles()) - .build(); + ImmutableSet.Builder<Artifact> javaSourceFilesBuilder = ImmutableSet.builder(); + ImmutableSet.Builder<Artifact> javaSourceJarsBuilder = ImmutableSet.builder(); + if (sourceInfoProvider != null) { + javaSourceFilesBuilder.addAll(sourceInfoProvider.getSourceFiles()); + + if (ruleContext.getFragment(J2ObjcConfiguration.class).experimentalSrcJarProcessing()) { + javaSourceJarsBuilder + .addAll(sourceInfoProvider.getSourceJars()) + .addAll(sourceInfoProvider.getSourceJarsForJarFiles()); + } else { + // The old source jar support treates source jars as source files, in the sense that + // we generate a single concatenated ObjC header and source files for all sources inside + // a given Java source jar. + javaSourceFilesBuilder + .addAll(sourceInfoProvider.getSourceJars()) + .addAll(sourceInfoProvider.getSourceJarsForJarFiles()); + } } - Optional<Artifact> genSrcJar; - if (genJarProvider != null) { - genSrcJar = Optional.fromNullable(genJarProvider.getGenSourceJar()); - } else { - genSrcJar = Optional.<Artifact>absent(); + + if (genJarProvider != null && genJarProvider.getGenSourceJar() != null) { + javaSourceJarsBuilder.add(genJarProvider.getGenSourceJar()); } - J2ObjcSource j2ObjcSource = javaJ2ObjcSource(ruleContext, javaInputFiles, genSrcJar); + ImmutableSet<Artifact> javaSourceFiles = javaSourceFilesBuilder.build(); + ImmutableSet<Artifact> javaSourceJars = javaSourceJarsBuilder.build(); + J2ObjcSource j2ObjcSource = javaJ2ObjcSource(ruleContext, javaSourceFiles, javaSourceJars); J2ObjcMappingFileProvider depJ2ObjcMappingFileProvider = depJ2ObjcMappingFileProvider(ruleContext); @@ -320,11 +326,11 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF directJ2ObjcMappingFileProvider = createJ2ObjcTranspilationAction( ruleContext, - javaInputFiles, + javaSourceFiles, + javaSourceJars, depJ2ObjcMappingFileProvider, compilationArgsProvider, - j2ObjcSource, - genSrcJar); + j2ObjcSource); } return buildAspect( base, @@ -430,27 +436,27 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF depsArchiveSourceMappingsBuilder.build()); } - private List<Artifact> genJarOutputs(RuleContext ruleContext) { + private static List<Artifact> sourceJarOutputs(RuleContext ruleContext) { return ImmutableList.of( - j2ObjcGenJarTranslatedSourceFiles(ruleContext), - j2objcGenJarTranslatedHeaderFiles(ruleContext)); + j2ObjcSourceJarTranslatedSourceFiles(ruleContext), + j2objcSourceJarTranslatedHeaderFiles(ruleContext)); } - private List<String> genJarFlags(RuleContext ruleContext) { + private static List<String> sourceJarFlags(RuleContext ruleContext) { return ImmutableList.of( "--output_gen_source_dir", - j2ObjcGenJarTranslatedSourceFiles(ruleContext).getExecPathString(), + j2ObjcSourceJarTranslatedSourceFiles(ruleContext).getExecPathString(), "--output_gen_header_dir", - j2objcGenJarTranslatedHeaderFiles(ruleContext).getExecPathString()); + j2objcSourceJarTranslatedHeaderFiles(ruleContext).getExecPathString()); } - private J2ObjcMappingFileProvider createJ2ObjcTranspilationAction( + private static J2ObjcMappingFileProvider createJ2ObjcTranspilationAction( RuleContext ruleContext, Iterable<Artifact> sources, + Iterable<Artifact> sourceJars, J2ObjcMappingFileProvider depJ2ObjcMappingFileProvider, JavaCompilationArgsProvider compArgsProvider, - J2ObjcSource j2ObjcSource, - Optional<Artifact> genSrcJar) { + J2ObjcSource j2ObjcSource) { CustomCommandLine.Builder argBuilder = CustomCommandLine.builder(); PathFragment javaExecutable = ruleContext.getFragment(Jvm.class, HOST).getJavaExecutable(); argBuilder.add("--java").add(javaExecutable.getPathString()); @@ -459,20 +465,16 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF argBuilder.addExecPath("--j2objc", j2ObjcDeployJar); argBuilder.add("--main_class").add("com.google.devtools.j2objc.J2ObjC"); - argBuilder.addJoinExecPaths( - "--translated_source_files", - ",", - Iterables.filter(j2ObjcSource.getObjcSrcs(), Predicates.not(IS_TREE_ARTIFACT))); argBuilder.add("--objc_file_path").addPath(j2ObjcSource.getObjcFilePath()); Artifact outputDependencyMappingFile = j2ObjcOutputDependencyMappingFile(ruleContext); argBuilder.addExecPath("--output_dependency_mapping_file", outputDependencyMappingFile); - ImmutableList.Builder<Artifact> genSrcOutputFiles = ImmutableList.builder(); - if (genSrcJar.isPresent()) { - genSrcOutputFiles.addAll(genJarOutputs(ruleContext)); - argBuilder.addExecPath("--gen_src_jar", genSrcJar.get()); - argBuilder.add(genJarFlags(ruleContext)); + ImmutableList.Builder<Artifact> sourceJarOutputFiles = ImmutableList.builder(); + if (!Iterables.isEmpty(sourceJars)) { + sourceJarOutputFiles.addAll(sourceJarOutputs(ruleContext)); + argBuilder.addJoinExecPaths("--src_jars", ",", sourceJars); + argBuilder.add(sourceJarFlags(ruleContext)); } Iterable<String> translationFlags = ruleContext @@ -530,7 +532,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF .addInput(j2ObjcDeployJar) .addInput(bootclasspathJar) .addInputs(sources) - .addInputs(genSrcJar.asSet()) + .addInputs(sourceJars) .addTransitiveInputs(compileTimeJars) .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext)) .addTransitiveInputs(depsHeaderMappingFiles) @@ -539,9 +541,8 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF .setCommandLine(CustomCommandLine.builder() .addPaths("@%s", paramFile.getExecPath()) .build()) - .addOutputs(Iterables.filter(j2ObjcSource.getObjcSrcs(), Predicates.not(IS_TREE_ARTIFACT))) - .addOutputs(Iterables.filter(j2ObjcSource.getObjcHdrs(), Predicates.not(IS_TREE_ARTIFACT))) - .addOutputs(genSrcOutputFiles.build()) + .addOutputs(j2ObjcSource.getObjcSrcs()) + .addOutputs(j2ObjcSource.getObjcHdrs()) .addOutput(outputHeaderMappingFile) .addOutput(outputDependencyMappingFile) .addOutput(archiveSourceMappingFile); @@ -637,16 +638,16 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF ruleContext, ".archive_source_mapping.j2objc"); } - private static Artifact j2ObjcGenJarTranslatedSourceFiles(RuleContext ruleContext) { + private static Artifact j2ObjcSourceJarTranslatedSourceFiles(RuleContext ruleContext) { PathFragment rootRelativePath = ruleContext - .getUniqueDirectory("_j2objc/gen_jar_files") + .getUniqueDirectory("_j2objc/src_jar_files") .getRelative("source_files"); return ruleContext.getTreeArtifact(rootRelativePath, ruleContext.getBinOrGenfilesDirectory()); } - private static Artifact j2objcGenJarTranslatedHeaderFiles(RuleContext ruleContext) { + private static Artifact j2objcSourceJarTranslatedHeaderFiles(RuleContext ruleContext) { PathFragment rootRelativePath = ruleContext - .getUniqueDirectory("_j2objc/gen_jar_files") + .getUniqueDirectory("_j2objc/src_jar_files") .getRelative("header_files"); return ruleContext.getTreeArtifact(rootRelativePath, ruleContext.getBinOrGenfilesDirectory()); } @@ -654,7 +655,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF private static J2ObjcSource javaJ2ObjcSource( RuleContext ruleContext, Iterable<Artifact> javaInputSourceFiles, - Optional<Artifact> genSrcJar) { + Iterable<Artifact> javaSourceJarFiles) { PathFragment objcFileRootRelativePath = ruleContext.getUniqueDirectory("_j2objc"); PathFragment objcFileRootExecPath = ruleContext .getConfiguration() @@ -667,23 +668,23 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF Iterable<PathFragment> headerSearchPaths = J2ObjcLibrary.j2objcSourceHeaderSearchPaths( ruleContext, objcFileRootExecPath, javaInputSourceFiles); - Optional<Artifact> genJarTranslatedSrcs = Optional.absent(); - Optional<Artifact> genJarTranslatedHdrs = Optional.absent(); - Optional<PathFragment> genJarFileHeaderSearchPaths = Optional.absent(); + Optional<Artifact> sourceJarTranslatedSrcs = Optional.absent(); + Optional<Artifact> sourceJarTranslatedHdrs = Optional.absent(); + Optional<PathFragment> sourceJarFileHeaderSearchPaths = Optional.absent(); - if (genSrcJar.isPresent()) { - genJarTranslatedSrcs = Optional.of(j2ObjcGenJarTranslatedSourceFiles(ruleContext)); - genJarTranslatedHdrs = Optional.of(j2objcGenJarTranslatedHeaderFiles(ruleContext)); - genJarFileHeaderSearchPaths = Optional.of(genJarTranslatedHdrs.get().getExecPath()); + if (!Iterables.isEmpty(javaSourceJarFiles)) { + sourceJarTranslatedSrcs = Optional.of(j2ObjcSourceJarTranslatedSourceFiles(ruleContext)); + sourceJarTranslatedHdrs = Optional.of(j2objcSourceJarTranslatedHeaderFiles(ruleContext)); + sourceJarFileHeaderSearchPaths = Optional.of(sourceJarTranslatedHdrs.get().getExecPath()); } return new J2ObjcSource( ruleContext.getRule().getLabel(), - Iterables.concat(objcSrcs, genJarTranslatedSrcs.asSet()), - Iterables.concat(objcHdrs, genJarTranslatedHdrs.asSet()), + Iterables.concat(objcSrcs, sourceJarTranslatedSrcs.asSet()), + Iterables.concat(objcHdrs, sourceJarTranslatedHdrs.asSet()), objcFileRootExecPath, SourceType.JAVA, - Iterables.concat(headerSearchPaths, genJarFileHeaderSearchPaths.asSet())); + Iterables.concat(headerSearchPaths, sourceJarFileHeaderSearchPaths.asSet())); } private static J2ObjcSource protoJ2ObjcSource( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java index 666ad03868..b64f0f2442 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java @@ -51,6 +51,14 @@ public class J2ObjcCommandLineOptions extends FragmentOptions { ) public boolean explicitJreDeps; + @Option(name = "experimental_j2objc_srcjar_processing", + defaultValue = "false", + category = "flags", + help = "Whether to generate individual ObjC header files for each Java source file inside " + + "Java source jars." + ) + public boolean experimentalSrcJarProcessing; + @Override public void addAllLabels(Multimap<String, Label> labelMap) {} } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java index 2e96d52599..407f5fb352 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java @@ -86,6 +86,7 @@ public class J2ObjcConfiguration extends Fragment { private final List<String> translationFlags; private final boolean removeDeadCode; private final boolean explicitJreDeps; + private final boolean experimentalSrcJarProcessing; J2ObjcConfiguration(J2ObjcCommandLineOptions j2ObjcOptions) { this.removeDeadCode = j2ObjcOptions.removeDeadCode; @@ -95,6 +96,7 @@ public class J2ObjcConfiguration extends Fragment { .addAll(j2ObjcOptions.translationFlags) .addAll(J2OBJC_ALWAYS_ON_TRANSLATION_FLAGS) .build(); + this.experimentalSrcJarProcessing = j2ObjcOptions.experimentalSrcJarProcessing; } /** @@ -126,6 +128,15 @@ public class J2ObjcConfiguration extends Fragment { return explicitJreDeps; } + /** + * Returns whether to use experimental source jar processing support. The new support produces + * one header for each Java source file inside a given source jar, instead of one big concatenated + * header for all source files from the source jar. + */ + public boolean experimentalSrcJarProcessing() { + return experimentalSrcJarProcessing; + } + @Override public void reportInvalidOptions(EventHandler reporter, BuildOptions buildOptions) { if (!Collections.disjoint(translationFlags, J2OBJC_BLACKLISTED_TRANSLATION_FLAGS)) { |