aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Rumou Duan <rduan@google.com>2017-01-09 22:42:27 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-01-10 10:23:19 +0000
commit4878c69e18a09f5d798b8a56349c13624645845c (patch)
tree34630737e56ed1c06be78d36a65b33f26ce1ad0c /src/main/java/com
parent7bdc69cff348f8c1d4c1f816507a4221d4349538 (diff)
Description redacted.
-- PiperOrigin-RevId: 144010091 MOS_MIGRATED_REVID=144010091
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java115
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java11
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)) {