diff options
10 files changed, 227 insertions, 59 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java index e4baef192a..9dc43aa64a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java @@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; -import com.google.common.base.Function; import com.google.common.base.Strings; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; @@ -29,11 +28,6 @@ import com.google.devtools.build.lib.collect.nestedset.Order; /** Builder for the action that generates the R class for libraries. */ public class LibraryRGeneratorActionBuilder { - static final Function<ResourceContainer, Artifact> TO_SYMBOL_ARTIFACT = - ResourceContainer::getSymbols; - static final Function<ResourceContainer, String> TO_SYMBOL_PATH = - (ResourceContainer container) -> container.getSymbols().getExecPathString(); - private String javaPackage; private Iterable<ResourceContainer> deps = ImmutableList.<ResourceContainer>of(); private ResourceContainer resourceContainer; @@ -77,13 +71,12 @@ public class LibraryRGeneratorActionBuilder { FluentIterable<ResourceContainer> symbolProviders = FluentIterable.from(deps).append(resourceContainer); - builder.addJoinStrings( - "--symbols", - ruleContext.getConfiguration().getHostPathSeparator(), - symbolProviders.transform(TO_SYMBOL_PATH)); - inputs.addTransitive( - NestedSetBuilder.wrap( - Order.NAIVE_LINK_ORDER, symbolProviders.transform(TO_SYMBOL_ARTIFACT))); + if (!symbolProviders.isEmpty()) { + builder.addExecPaths("--symbols", symbolProviders.transform(c -> c.getSymbols())); + inputs.addTransitive( + NestedSetBuilder.wrap( + Order.NAIVE_LINK_ORDER, symbolProviders.transform(ResourceContainer::getSymbols))); + } builder.addExecPath("--classJarOutput", rJavaClassJar); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java index 60d414ddc4..9a997bffb9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java @@ -201,11 +201,10 @@ public class ResourceShrinkerActionBuilder { inputs.add(primaryResources.getManifest()); List<Artifact> dependencyManifests = getManifests(dependencyResources); - commandLine.addJoinExecPaths( - "--dependencyManifests", - ruleContext.getConfiguration().getHostPathSeparator(), - dependencyManifests); - inputs.addAll(dependencyManifests); + if (!dependencyManifests.isEmpty()) { + commandLine.addExecPaths("--dependencyManifest", dependencyManifests); + inputs.addAll(dependencyManifests); + } List<String> resourcePackages = getResourcePackages(primaryResources, dependencyResources); commandLine.addJoinStrings("--resourcePackages", ",", resourcePackages); diff --git a/src/test/java/com/google/devtools/build/android/ConvertersTest.java b/src/test/java/com/google/devtools/build/android/ConvertersTest.java index 92c9cf2f22..0e7385171c 100644 --- a/src/test/java/com/google/devtools/build/android/ConvertersTest.java +++ b/src/test/java/com/google/devtools/build/android/ConvertersTest.java @@ -58,9 +58,9 @@ public final class ConvertersTest { @Test public void testPathConverter_invalid() throws Exception { String arg = "\u0000"; + PathConverter converter = new PathConverter(); expected.expect(OptionsParsingException.class); expected.expectMessage(String.format("%s is not a valid path:", arg)); - PathConverter converter = new PathConverter(); converter.convert(arg); } @@ -74,9 +74,9 @@ public final class ConvertersTest { @Test public void testExistingPathConverter_nonExisting() throws Exception { String arg = "test_file"; + ExistingPathConverter converter = new ExistingPathConverter(); expected.expect(OptionsParsingException.class); expected.expectMessage(String.format("%s is not a valid path: it does not exist.", arg)); - ExistingPathConverter converter = new ExistingPathConverter(); converter.convert(arg); } @@ -101,38 +101,38 @@ public final class ConvertersTest { @Test public void testExisingPathListConverter() throws Exception { String arg = "non-existing"; + ExistingPathListConverter converter = new ExistingPathListConverter(); Path existingFile = tmp.newFile("existing").toPath(); expected.expect(OptionsParsingException.class); expected.expectMessage(String.format("%s is not a valid path: it does not exist.", arg)); - ExistingPathListConverter converter = new ExistingPathListConverter(); converter.convert(Joiner.on(SEPARATOR).join(existingFile.toString(), arg)); } @Test public void testStringDictionaryConverter_emptyEntry() throws Exception { + StringDictionaryConverter converter = new StringDictionaryConverter(); expected.expect(OptionsParsingException.class); expected.expectMessage("Dictionary entry [] does not contain both a key and a value."); - StringDictionaryConverter converter = new StringDictionaryConverter(); converter.convert("foo:bar,,baz:bar"); } @Test public void testStringDictionaryConverter_missingKeyOrValue() throws Exception { String badEntry = "foo"; + StringDictionaryConverter converter = new StringDictionaryConverter(); expected.expect(OptionsParsingException.class); expected.expectMessage(String.format( "Dictionary entry [%s] does not contain both a key and a value.", badEntry)); - StringDictionaryConverter converter = new StringDictionaryConverter(); converter.convert(badEntry); } @Test public void testStringDictionaryConverter_extraFields() throws Exception { String badEntry = "foo:bar:baz"; + StringDictionaryConverter converter = new StringDictionaryConverter(); expected.expect(OptionsParsingException.class); expected.expectMessage(String.format( "Dictionary entry [%s] contains too many fields.", badEntry)); - StringDictionaryConverter converter = new StringDictionaryConverter(); converter.convert(badEntry); } @@ -140,10 +140,10 @@ public final class ConvertersTest { public void testStringDictionaryConverter_duplicateKey() throws Exception { String key = "foo"; String arg = String.format("%s:%s,%s:%s", key, "bar", key, "baz"); + StringDictionaryConverter converter = new StringDictionaryConverter(); expected.expect(OptionsParsingException.class); expected.expectMessage(String.format( "Dictionary already contains the key [%s].", key)); - StringDictionaryConverter converter = new StringDictionaryConverter(); converter.convert(arg); } diff --git a/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java b/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java index a17048d9e0..2bb779f088 100644 --- a/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java +++ b/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java @@ -17,7 +17,6 @@ package com.google.devtools.build.android.ideinfo; import static com.google.common.truth.Truth.assertThat; import static java.nio.charset.StandardCharsets.UTF_8; -import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.io.Files; @@ -106,7 +105,7 @@ public class JarFilterTest { String[] args = new String[] { - "--jars", + "--jar", filterJar.getPath(), "--output", outputJar.getPath(), @@ -198,13 +197,17 @@ public class JarFilterTest { String[] args = new String[] { - "--keep_java_files", - fooJava.getPath() + File.pathSeparator + barJava.getPath(), - "--keep_source_jars", - Joiner.on(File.pathSeparator).join(srcJar.getPath(), src3Jar.getPath()), - "--filter_jars", + "--keep_java_file", + fooJava.getPath(), + "--keep_java_file", + barJava.getPath(), + "--keep_source_jar", + srcJar.getPath(), + "--keep_source_jar", + src3Jar.getPath(), + "--filter_jar", filterJar.getPath(), - "--filter_source_jars", + "--filter_source_jar", filterSrcJar.getPath(), "--filtered_jar", filteredJar.getPath(), diff --git a/src/tools/android/java/com/google/devtools/build/android/Converters.java b/src/tools/android/java/com/google/devtools/build/android/Converters.java index 63f59801aa..01342ac7df 100644 --- a/src/tools/android/java/com/google/devtools/build/android/Converters.java +++ b/src/tools/android/java/com/google/devtools/build/android/Converters.java @@ -19,6 +19,7 @@ import com.android.manifmerger.ManifestMerger2.MergeType; import com.android.repository.Revision; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Iterables; import com.google.devtools.common.options.Converter; import com.google.devtools.common.options.EnumConverter; import com.google.devtools.common.options.OptionsParsingException; @@ -33,6 +34,7 @@ import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import javax.annotation.Nullable; /** * Some convenient converters used by android actions. Note: These are specific to android actions. @@ -290,8 +292,16 @@ public final class Converters { * Validating converter for a list of Paths. * A Path is considered valid if it resolves to a file. */ + @Deprecated public static class PathListConverter implements Converter<List<Path>> { + public static List<Path> concatLists(@Nullable List<Path> a, @Nullable List<Path> b) { + if (a == null || a.isEmpty()) { + return (b == null || b.isEmpty()) ? ImmutableList.of() : b; + } + return (b == null || b.isEmpty()) ? a : ImmutableList.copyOf(Iterables.concat(a, b)); + } + private final PathConverter baseConverter; public PathListConverter() { diff --git a/src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java b/src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java index ec41103b08..9709583dda 100644 --- a/src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java +++ b/src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java @@ -22,6 +22,7 @@ import com.google.devtools.build.android.Converters.PathListConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; +import com.google.devtools.common.options.OptionMetadataTag; import com.google.devtools.common.options.OptionsBase; import com.google.devtools.common.options.OptionsParser; import java.io.IOException; @@ -68,15 +69,32 @@ public class LibraryRClassGeneratorAction { public String packageForR; @Option( - name = "symbols", + name = "symbol", + allowMultiple = true, defaultValue = "", - converter = PathListConverter.class, + converter = PathConverter.class, documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, category = "config", help = "Parsed symbol binaries to write as R classes." ) public List<Path> symbols; + + // TODO(laszlocsomor): remove this flag after 2018-01-31 (about 6 months from now). Everyone + // should have updated to newer Bazel versions by then. + @Deprecated + @Option( + name = "symbols", + defaultValue = "", + converter = PathListConverter.class, + deprecationWarning = "Deprecated in favour of \"--symbol\"", + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + category = "config", + help = "Parsed symbol binaries to write as R classes.", + metadataTags = {OptionMetadataTag.DEPRECATED} + ) + public List<Path> deprecatedSymbols; } public static void main(String[] args) throws Exception { @@ -87,6 +105,7 @@ public class LibraryRClassGeneratorAction { optionsParser.parseAndExitUponError(args); AaptConfigOptions aaptConfigOptions = optionsParser.getOptions(AaptConfigOptions.class); Options options = optionsParser.getOptions(Options.class); + options.symbols = PathListConverter.concatLists(options.symbols, options.deprecatedSymbols); logger.fine( String.format("Option parsing finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); try (ScopedTemporaryDirectory scopedTmp = diff --git a/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java b/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java index b6ae74ede9..dbf10163ac 100644 --- a/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java +++ b/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java @@ -32,6 +32,7 @@ import com.google.devtools.common.options.Converters.CommaSeparatedOptionListCon import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; +import com.google.devtools.common.options.OptionMetadataTag; import com.google.devtools.common.options.OptionsBase; import com.google.devtools.common.options.OptionsParser; import java.io.FileInputStream; @@ -63,7 +64,7 @@ import org.xml.sax.SAXException; * --resources path to processed resources zip * --rTxt path to processed resources R.txt * --primaryManifest path to processed resources AndroidManifest.xml - * --dependencyManifests paths to dependency library manifests + * --dependencyManifest path to dependency library manifest (repeated flag) * --shrunkResourceApk path to write shrunk ap_ * --shrunkResources path to write shrunk resources zip * </pre> @@ -130,15 +131,32 @@ public class ResourceShrinkerAction { public Path primaryManifest; @Option( + name = "dependencyManifest", + allowMultiple = true, + defaultValue = "", + category = "input", + converter = PathConverter.class, + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + help = "Paths to the manifests of the dependencies. Specify one path per flag." + ) + public List<Path> dependencyManifests; + + // TODO(laszlocsomor): remove this flag after 2018-01-31 (about 6 months from now). Everyone + // should have updated to newer Bazel versions by then. + @Deprecated + @Option( name = "dependencyManifests", defaultValue = "", category = "input", converter = PathListConverter.class, + deprecationWarning = "Deprecated in favour of \"--dependencyManifest\"", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, - help = "A list of paths to the manifests of the dependencies." + help = "A list of paths to the manifests of the dependencies.", + metadataTags = {OptionMetadataTag.DEPRECATED} ) - public List<Path> dependencyManifests; + public List<Path> deprecatedDependencyManifests; @Option( name = "resourcePackages", @@ -236,6 +254,8 @@ public class ResourceShrinkerAction { optionsParser.parseAndExitUponError(args); aaptConfigOptions = optionsParser.getOptions(AaptConfigOptions.class); options = optionsParser.getOptions(Options.class); + options.dependencyManifests = PathListConverter.concatLists( + options.dependencyManifests, options.deprecatedDependencyManifests); AndroidResourceProcessor resourceProcessor = new AndroidResourceProcessor(stdLogger); // Setup temporary working directories. diff --git a/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java b/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java index 604193eb77..a1678a6d00 100644 --- a/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java +++ b/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java @@ -34,6 +34,7 @@ import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterC import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; +import com.google.devtools.common.options.OptionMetadataTag; import com.google.devtools.common.options.OptionsBase; import com.google.devtools.common.options.OptionsParser; import java.io.BufferedReader; @@ -65,48 +66,124 @@ public final class JarFilter { /** The options for a {@JarFilter} action. */ public static final class JarFilterOptions extends OptionsBase { @Option( + name = "filter_jar", + allowMultiple = true, + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + defaultValue = "null", + converter = PathConverter.class, + category = "input", + help = + "Paths to target output jars to filter for generated sources. You may use this flag " + + "multiple times, specify each path with a separate instance of the flag." + ) + public List<Path> filterJars; + + // TODO(laszlocsomor): remove this flag after 2018-01-31 (about 6 months from now). Everyone + // should have updated to newer Bazel versions by then. + @Deprecated + @Option( name = "filter_jars", + deprecationWarning = "Deprecated in favour of \"--filter_jar\"", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, defaultValue = "null", converter = PathListConverter.class, category = "input", - help = "A list of the paths to target output jars to filter for generated sources." + help = "A list of the paths to target output jars to filter for generated sources.", + metadataTags = {OptionMetadataTag.DEPRECATED} ) - public List<Path> filterJars; + public List<Path> deprecatedFilterJars; @Option( + name = "filter_source_jar", + allowMultiple = true, + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + defaultValue = "null", + converter = PathConverter.class, + category = "input", + help = + "Paths to target output source jars to filter for generated sources. You may use this " + + "flag multiple times, specify each path with a separate instance of the flag." + ) + public List<Path> filterSourceJars; + + // TODO(laszlocsomor): remove this flag after 2018-01-31 (about 6 months from now). Everyone + // should have updated to newer Bazel versions by then. + @Deprecated + @Option( name = "filter_source_jars", + deprecationWarning = "Deprecated in favour of \"--filter_source_jar\"", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, defaultValue = "null", converter = PathListConverter.class, category = "input", - help = "A list of the paths to target output source jars to filter for generated sources." + help = "A list of the paths to target output source jars to filter for generated sources.", + metadataTags = {OptionMetadataTag.DEPRECATED} ) - public List<Path> filterSourceJars; + public List<Path> deprecatedFilterSourceJars; + + @Option( + name = "keep_java_file", + allowMultiple = true, + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + defaultValue = "null", + converter = PathConverter.class, + category = "input", + help = + "Path of target input java files to keep. You may use this flag multiple times, " + + "specify each path with a separate instance of the flag." + ) + public List<Path> keepJavaFiles; + // TODO(laszlocsomor): remove this flag after 2018-01-31 (about 6 months from now). Everyone + // should have updated to newer Bazel versions by then. + @Deprecated @Option( name = "keep_java_files", + deprecationWarning = "Deprecated in favour of \"--keep_java_file\"", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, defaultValue = "null", converter = PathListConverter.class, category = "input", - help = "A list of target input java files to keep." + help = "A list of target input java files to keep.", + metadataTags = {OptionMetadataTag.DEPRECATED} ) - public List<Path> keepJavaFiles; + public List<Path> deprecatedKeepJavaFiles; @Option( + name = "keep_source_jar", + allowMultiple = true, + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + defaultValue = "null", + converter = PathConverter.class, + category = "input", + help = + "Path of target input .srcjar files to keep. You may use this flag multiple times, " + + "specify each path with a separate instance of the flag." + ) + public List<Path> keepSourceJars; + + // TODO(laszlocsomor): remove this flag after 2018-01-31 (about 6 months from now). Everyone + // should have updated to newer Bazel versions by then. + @Deprecated + @Option( name = "keep_source_jars", + deprecationWarning = "Deprecated in favour of \"--keep_source_jar\"", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, defaultValue = "null", converter = PathListConverter.class, category = "input", - help = "A list of target input .srcjar files to keep." + help = "A list of target input .srcjar files to keep.", + metadataTags = {OptionMetadataTag.DEPRECATED} ) - public List<Path> keepSourceJars; + public List<Path> deprecatedKeepSourceJars; @Option( name = "filtered_jar", @@ -135,6 +212,21 @@ public final class JarFilter { @Deprecated @Option( + name = "jar", + allowMultiple = true, + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + defaultValue = "null", + converter = PathConverter.class, + category = "input", + help = "A list of the paths to jars to filter for generated sources." + ) + public List<Path> jars; + + // TODO(laszlocsomor): remove this flag after 2018-01-31 (about 6 months from now). Everyone + // should have updated to newer Bazel versions by then. + @Deprecated + @Option( name = "jars", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, @@ -143,7 +235,7 @@ public final class JarFilter { category = "input", help = "A list of the paths to jars to filter for generated sources." ) - public List<Path> jars; + public List<Path> deprecatedJars; @Deprecated @Option( @@ -235,10 +327,20 @@ public final class JarFilter { args = parseParamFileIfUsed(args); OptionsParser optionsParser = OptionsParser.newOptionsParser(JarFilterOptions.class); optionsParser.parseAndExitUponError(args); + JarFilterOptions options = optionsParser.getOptions(JarFilterOptions.class); + options.filterJars = PathListConverter.concatLists( + options.filterJars, options.deprecatedFilterJars); + options.filterSourceJars = PathListConverter.concatLists( + options.filterSourceJars, options.deprecatedFilterSourceJars); + options.keepJavaFiles = PathListConverter.concatLists( + options.keepJavaFiles, options.deprecatedKeepJavaFiles); + options.keepSourceJars = PathListConverter.concatLists( + options.keepSourceJars, options.deprecatedKeepSourceJars); + options.jars = PathListConverter.concatLists( + options.jars, options.deprecatedJars); // Migrate options from v1 jar filter - JarFilterOptions options = optionsParser.getOptions(JarFilterOptions.class); - if (options.filterJars == null && options.jars != null) { + if (options.filterJars.isEmpty() && !options.jars.isEmpty()) { options.filterJars = options.jars; } if (options.filteredJar == null && options.output != null) { diff --git a/src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java b/src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java index e857133808..9c3db72c6c 100644 --- a/src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java +++ b/src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java @@ -29,6 +29,7 @@ import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterC import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; +import com.google.devtools.common.options.OptionMetadataTag; import com.google.devtools.common.options.OptionsBase; import com.google.devtools.common.options.OptionsParser; import java.io.BufferedReader; @@ -81,17 +82,36 @@ public class PackageParser { public Path outputManifest; @Option( + name = "sources_execution_path", + allowMultiple = true, + defaultValue = "null", + converter = PathConverter.class, + category = "input", + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + help = + "The execution paths of the java source files. You may use this flag multiple times, " + + "each instance should specify one path." + ) + public List<Path> sourcesExecutionPaths; + + // TODO(laszlocsomor): remove this flag after 2018-01-31 (about 6 months from now). Everyone + // should have updated to newer Bazel versions by then. + @Deprecated + @Option( name = "sources_execution_paths", defaultValue = "null", + deprecationWarning = "Deprecated in favour of \"--sources_execution_path\"", converter = PathListConverter.class, category = "input", documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, help = "The execution paths of the java source files. The expected format is a " - + "colon-separated list." + + "colon-separated list.", + metadataTags = {OptionMetadataTag.DEPRECATED} ) - public List<Path> sourcesExecutionPaths; + public List<Path> deprecatedSourcesExecutionPaths; } private static final Logger logger = Logger.getLogger(PackageParser.class.getName()); @@ -102,6 +122,8 @@ public class PackageParser { public static void main(String[] args) throws Exception { PackageParserOptions options = parseArgs(args); Preconditions.checkNotNull(options.outputManifest); + options.sourcesExecutionPaths = PathListConverter.concatLists( + options.sourcesExecutionPaths, options.deprecatedSourcesExecutionPaths); try { PackageParser parser = new PackageParser(PackageParserIoProvider.INSTANCE); diff --git a/tools/ide/intellij_info_impl.bzl b/tools/ide/intellij_info_impl.bzl index 0ceec5ca7a..6ec17f727a 100644 --- a/tools/ide/intellij_info_impl.bzl +++ b/tools/ide/intellij_info_impl.bzl @@ -451,18 +451,18 @@ def build_filtered_gen_jar(ctx, target, java, gen_java_sources, srcjars): filtered_jar = ctx.new_file(target.label.name + "-filtered-gen.jar") filtered_source_jar = ctx.new_file(target.label.name + "-filtered-gen-src.jar") args = [] - args += ["--filter_jars"] - args += [":".join([jar.path for jar in jar_artifacts])] - args += ["--filter_source_jars"] - args += [":".join([jar.path for jar in source_jar_artifacts])] + for jar in jar_artifacts: + args += ["--filter_jar", jar.path] + for jar in source_jar_artifacts: + args += ["--filter_source_jar", jar.path] args += ["--filtered_jar", filtered_jar.path] args += ["--filtered_source_jar", filtered_source_jar.path] if gen_java_sources: - args += ["--keep_java_files"] - args += [":".join([java_file.path for java_file in gen_java_sources])] + for java_file in gen_java_sources: + args += ["--keep_java_file", java_file.path] if srcjars: - args += ["--keep_source_jars"] - args += [":".join([source_jar.path for source_jar in srcjars])] + for source_jar in srcjars: + args += ["--keep_source_jar", source_jar.path] ctx.action( inputs = jar_artifacts + source_jar_artifacts + gen_java_sources + srcjars, outputs = [filtered_jar, filtered_source_jar], |