aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java9
-rw-r--r--src/test/java/com/google/devtools/build/android/ConvertersTest.java14
-rw-r--r--src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java19
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/Converters.java10
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java23
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java26
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java124
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java26
-rw-r--r--tools/ide/intellij_info_impl.bzl16
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],