Automated rollback of commit 01ddfb7bf418b371859de62f4eab2f41ea9a4a4a.
This is a partial rollback.
I restored the old flags (with PathListConverter),
added the new ones, added deprecation warnings and
annotations, and added code to concat the values
of new and old.
Existing released versions of Bazel should keep
working with the new code until 2018-01-31, i.e.
for the next ~6 months. After that I'll remove the
old flags and the PathListConverter.
*** Reason for rollback ***
Fixed broken integration with release Blaze.
*** Original change description ***
Automated rollback of commit 5752463ece84ebb4fb074888cba57412ab8d86b3.
*** Reason for rollback ***
Broke too many targets.
***
RELNOTES: none
PiperOrigin-RevId: 162587548
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 e4baef1..9dc43aa 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 @@
/** 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 @@
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 60d414d..9a997bf 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 @@
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 92c9cf2..0e73851 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 @@
@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 @@
@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 @@
@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 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 a17048d..2bb779f 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 @@
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 @@
String[] args =
new String[] {
- "--jars",
+ "--jar",
filterJar.getPath(),
"--output",
outputJar.getPath(),
@@ -198,13 +197,17 @@
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 63f5980..01342ac 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.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.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 @@
* 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 ec41103..9709583 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.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 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 @@
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 b6ae74e..dbf1016 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.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 @@
* --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 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 @@
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 604193e..a1678a6 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.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,49 +66,125 @@
/** The options for a {@JarFilter} action. */
public static final class JarFilterOptions extends OptionsBase {
@Option(
- name = "filter_jars",
+ name = "filter_jar",
+ allowMultiple = true,
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
defaultValue = "null",
- converter = PathListConverter.class,
+ converter = PathConverter.class,
category = "input",
- help = "A list of the paths to target output jars to filter for generated sources."
+ 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_source_jars",
+ 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 source 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> 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 = "keep_java_files",
+ 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 target input java files to keep."
+ help = "A list of the paths to target output source jars to filter for generated sources.",
+ metadataTags = {OptionMetadataTag.DEPRECATED}
+ )
+ 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_source_jars",
+ 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 .srcjar files to keep."
+ help = "A list of target input java files to keep.",
+ metadataTags = {OptionMetadataTag.DEPRECATED}
+ )
+ 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.",
+ metadataTags = {OptionMetadataTag.DEPRECATED}
+ )
+ public List<Path> deprecatedKeepSourceJars;
+
@Option(
name = "filtered_jar",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
@@ -135,6 +212,21 @@
@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 @@
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 @@
args = parseParamFileIfUsed(args);
OptionsParser optionsParser = OptionsParser.newOptionsParser(JarFilterOptions.class);
optionsParser.parseAndExitUponError(args);
-
- // Migrate options from v1 jar filter
JarFilterOptions options = optionsParser.getOptions(JarFilterOptions.class);
- if (options.filterJars == null && options.jars != null) {
+
+ 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
+ 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 e857133..9c3db72 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.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 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 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 0ceec5c..6ec17f7 100644
--- a/tools/ide/intellij_info_impl.bzl
+++ b/tools/ide/intellij_info_impl.bzl
@@ -451,18 +451,18 @@
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],