summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2017-02-10 14:59:04 -0800
committerColin Cross <ccross@android.com>2017-02-17 14:37:50 -0800
commitdfda3f78b5cb4823b187fa8f5bda9411570c11d2 (patch)
treed18157cd1d62b52894982534f45574366604476b
parentc9d1f7894075840e7ad1450951b8336ac2ce8317 (diff)
downloaddesugar-dfda3f78b5cb4823b187fa8f5bda9411570c11d2.tar.gz
Make desugar compile in Android
Add an Android.mk and manifest.txt, and remove unused code in Converters.java that pulls in unnecessary dependencies. Test: builds Change-Id: I3d5117524818015f5ad209dd4d5e4ec05c4f9890
-rw-r--r--Android.mk14
-rw-r--r--java/com/google/devtools/build/android/Converters.java351
-rw-r--r--manifest.txt1
3 files changed, 15 insertions, 351 deletions
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..0492748
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := desugar
+LOCAL_SRC_FILES := $(call all-java-files-under, java)
+LOCAL_JAR_MANIFEST := manifest.txt
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ asm-5.2 \
+ asm-tree-5.2 \
+ guava-20.0 \
+ jsr305-3.0.1 \
+ dagger2-auto-value-host \
+
+include $(BUILD_HOST_JAVA_LIBRARY)
diff --git a/java/com/google/devtools/build/android/Converters.java b/java/com/google/devtools/build/android/Converters.java
index 63f5980..6b40027 100644
--- a/java/com/google/devtools/build/android/Converters.java
+++ b/java/com/google/devtools/build/android/Converters.java
@@ -13,26 +13,13 @@
// limitations under the License.
package com.google.devtools.build.android;
-import com.android.builder.core.VariantType;
-import com.android.manifmerger.ManifestMerger2;
-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.devtools.common.options.Converter;
-import com.google.devtools.common.options.EnumConverter;
import com.google.devtools.common.options.OptionsParsingException;
import java.io.File;
-import java.lang.reflect.ParameterizedType;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
/**
* Some convenient converters used by android actions. Note: These are specific to android actions.
@@ -48,186 +35,6 @@ public final class Converters {
}
};
- /**
- * Converter for {@link UnvalidatedAndroidData}. Relies on
- * {@code UnvalidatedAndroidData#valueOf(String)} to perform conversion and validation.
- */
- public static class UnvalidatedAndroidDataConverter implements Converter<UnvalidatedAndroidData> {
-
- @Override
- public UnvalidatedAndroidData convert(String input) throws OptionsParsingException {
- try {
- return UnvalidatedAndroidData.valueOf(input);
- } catch (IllegalArgumentException e) {
- throw new OptionsParsingException(
- String.format("invalid UnvalidatedAndroidData: %s", e.getMessage()), e);
- }
- }
-
- @Override
- public String getTypeDescription() {
- return "unvalidated android data in the format " + UnvalidatedAndroidData.EXPECTED_FORMAT;
- }
- }
-
- /**
- * Converter for {@link UnvalidatedAndroidDirectories}.
- */
- public static class UnvalidatedAndroidDirectoriesConverter
- implements Converter<UnvalidatedAndroidDirectories> {
-
- @Override
- public UnvalidatedAndroidDirectories convert(String input) throws OptionsParsingException {
- try {
- return UnvalidatedAndroidDirectories.valueOf(input);
- } catch (IllegalArgumentException e) {
- throw new OptionsParsingException(
- String.format("invalid UnvalidatedAndroidDirectories: %s", e.getMessage()), e);
- }
- }
-
- @Override
- public String getTypeDescription() {
- return "unvalidated android directories in the format "
- + UnvalidatedAndroidDirectories.EXPECTED_FORMAT;
- }
- }
-
- /**
- * Converter for a list of {@link DependencyAndroidData}. Relies on
- * {@code DependencyAndroidData#valueOf(String)} to perform conversion and validation.
- */
- public static class DependencyAndroidDataListConverter
- implements Converter<List<DependencyAndroidData>> {
-
- @Override
- public List<DependencyAndroidData> convert(String input) throws OptionsParsingException {
- if (input.isEmpty()) {
- return ImmutableList.of();
- }
- try {
- ImmutableList.Builder<DependencyAndroidData> builder = ImmutableList.builder();
- for (String item : input.split(",")) {
- builder.add(DependencyAndroidData.valueOf(item));
- }
- return builder.build();
- } catch (IllegalArgumentException e) {
- throw new OptionsParsingException(
- String.format("invalid DependencyAndroidData: %s", e.getMessage()), e);
- }
- }
-
- @Override
- public String getTypeDescription() {
- return "a list of dependency android data in the format "
- + DependencyAndroidData.EXPECTED_FORMAT + "[,...]";
- }
- }
-
- /**
- * Converter for a {@link SerializedAndroidData}.
- */
- public static class SerializedAndroidDataConverter implements Converter<SerializedAndroidData> {
-
- @Override
- public SerializedAndroidData convert(String input) throws OptionsParsingException {
- try {
- return SerializedAndroidData.valueOf(input);
- } catch (IllegalArgumentException e) {
- throw new OptionsParsingException(
- String.format("invalid SerializedAndroidData: %s", e.getMessage()), e);
- }
- }
-
- @Override
- public String getTypeDescription() {
- return "preparsed android data in the format " + SerializedAndroidData.EXPECTED_FORMAT;
- }
- }
-
- /**
- * Converter for a list of {@link SerializedAndroidData}.
- */
- public static class SerializedAndroidDataListConverter
- implements Converter<List<SerializedAndroidData>> {
-
- @Override
- public List<SerializedAndroidData> convert(String input) throws OptionsParsingException {
- if (input.isEmpty()) {
- return ImmutableList.of();
- }
- try {
- ImmutableList.Builder<SerializedAndroidData> builder = ImmutableList.builder();
- for (String entry : input.split("&")) {
- builder.add(SerializedAndroidData.valueOf(entry));
- }
- return builder.build();
- } catch (IllegalArgumentException e) {
- throw new OptionsParsingException(
- String.format("invalid SerializedAndroidData: %s", e.getMessage()), e);
- }
- }
-
- @Override
- public String getTypeDescription() {
- return "a list of preparsed android data in the format "
- + SerializedAndroidData.EXPECTED_FORMAT + "[&...]";
- }
- }
-
- /**
- * Converter for a list of {@link DependencySymbolFileProvider}. Relies on
- * {@code DependencySymbolFileProvider#valueOf(String)} to perform conversion and validation.
- */
- public static class DependencySymbolFileProviderListConverter
- implements Converter<List<DependencySymbolFileProvider>> {
-
- @Override
- public List<DependencySymbolFileProvider> convert(String input) throws OptionsParsingException {
- if (input.isEmpty()) {
- return ImmutableList.<DependencySymbolFileProvider>of();
- }
- try {
- ImmutableList.Builder<DependencySymbolFileProvider> builder = ImmutableList.builder();
- for (String item : input.split(",")) {
- builder.add(DependencySymbolFileProvider.valueOf(item));
- }
- return builder.build();
- } catch (IllegalArgumentException e) {
- throw new OptionsParsingException(
- String.format("invalid DependencyAndroidData: %s", e.getMessage()), e);
- }
- }
-
- @Override
- public String getTypeDescription() {
- return String.format("a list of dependency android data in the format: %s[%s]",
- DependencySymbolFileProvider.commandlineFormat("1"),
- DependencySymbolFileProvider.commandlineFormat("2"));
- }
- }
-
- /**
- * Converter for {@link Revision}. Relies on {@code Revision#parseRevision(String)} to
- * perform conversion and validation.
- */
- public static class RevisionConverter implements Converter<Revision> {
-
- @Override
- public Revision convert(String input) throws OptionsParsingException {
- try {
- return Revision.parseRevision(input);
- } catch (NumberFormatException e) {
- throw new OptionsParsingException(e.getMessage());
- }
- }
-
- @Override
- public String getTypeDescription() {
- return "a revision number";
- }
- }
-
/** Validating converter for Paths. A Path is considered valid if it resolves to a file. */
public static class PathConverter implements Converter<Path> {
@@ -270,162 +77,4 @@ public final class Converters {
super(true);
}
}
-
- /** Converter for {@link VariantType}. */
- public static class VariantTypeConverter extends EnumConverter<VariantType> {
- public VariantTypeConverter() {
- super(VariantType.class, "variant type");
- }
- }
-
- /** Converter for {@link ManifestMerger2}.{@link MergeType}. */
- public static class MergeTypeConverter
- extends EnumConverter<MergeType> {
- public MergeTypeConverter() {
- super(MergeType.class, "merge type");
- }
- }
-
- /**
- * Validating converter for a list of Paths.
- * A Path is considered valid if it resolves to a file.
- */
- public static class PathListConverter implements Converter<List<Path>> {
-
- private final PathConverter baseConverter;
-
- public PathListConverter() {
- this(false);
- }
-
- protected PathListConverter(boolean mustExist) {
- baseConverter = new PathConverter(mustExist);
- }
-
- @Override
- public List<Path> convert(String input) throws OptionsParsingException {
- List<Path> list = new ArrayList<>();
- for (String piece : input.split(File.pathSeparator)) {
- if (!piece.isEmpty()) {
- list.add(baseConverter.convert(piece));
- }
- }
- return Collections.unmodifiableList(list);
- }
-
- @Override
- public String getTypeDescription() {
- return "a colon-separated list of paths";
- }
- }
-
- /**
- * Validating converter for a list of Paths. The list is considered valid if all Paths resolve to
- * a file that exists.
- */
- public static class ExistingPathListConverter extends PathListConverter {
- public ExistingPathListConverter() {
- super(true);
- }
- }
-
- // Commas that are not escaped by a backslash.
- private static final String UNESCAPED_COMMA_REGEX = "(?<!\\\\)\\,";
- // Colons that are not escaped by a backslash.
- private static final String UNESCAPED_COLON_REGEX = "(?<!\\\\)\\:";
-
- private static String unescapeInput(String input) {
- return input.replace("\\:", ":").replace("\\,", ",");
- }
-
- /**
- * A converter for dictionary arguments of the format key:value[,key:value]*. The keys and values
- * may contain colons and commas as long as they are escaped with a backslash.
- */
- private abstract static class DictionaryConverter<K, V> implements Converter<Map<K, V>> {
- private final Converter<K> keyConverter;
- private final Converter<V> valueConverter;
-
- public DictionaryConverter(Converter<K> keyConverter, Converter<V> valueConverter) {
- this.keyConverter = keyConverter;
- this.valueConverter = valueConverter;
- }
-
- @Override
- public Map<K, V> convert(String input) throws OptionsParsingException {
- if (input.isEmpty()) {
- return ImmutableMap.of();
- }
- Map<K, V> map = new LinkedHashMap<>();
- // Only split on comma and colon that are not escaped with a backslash
- for (String entry : input.split(UNESCAPED_COMMA_REGEX)) {
- String[] entryFields = entry.split(UNESCAPED_COLON_REGEX, -1);
- if (entryFields.length < 2) {
- throw new OptionsParsingException(String.format(
- "Dictionary entry [%s] does not contain both a key and a value.",
- entry));
- } else if (entryFields.length > 2) {
- throw new OptionsParsingException(String.format(
- "Dictionary entry [%s] contains too many fields.",
- entry));
- }
- // Unescape any comma or colon that is not a key or value separator.
- String keyString = unescapeInput(entryFields[0]);
- K key = keyConverter.convert(keyString);
- if (map.containsKey(key)) {
- throw new OptionsParsingException(String.format(
- "Dictionary already contains the key [%s].",
- keyString));
- }
- // Unescape any comma or colon that is not a key or value separator.
- String valueString = unescapeInput(entryFields[1]);
- V value = valueConverter.convert(valueString);
- map.put(key, value);
- }
- return ImmutableMap.copyOf(map);
- }
-
- @Override
- public String getTypeDescription() {
- // Retrieve types of dictionary through reflection to avoid overriding this method in each
- // subclass or passing types to this superclass.
- return String.format(
- "a comma-separated list of colon-separated key value pairs of the types %s and %s",
- ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0],
- ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]);
- }
- }
-
- /**
- * A converter for dictionary arguments of the format key:value[,key:value]*. The keys and values
- * may contain colons and commas as long as they are escaped with a backslash. The key and value
- * types are both String.
- */
- public static class StringDictionaryConverter extends DictionaryConverter<String, String> {
- public StringDictionaryConverter() {
- super(IDENTITY_CONVERTER, IDENTITY_CONVERTER);
- }
- // The way {@link OptionsData} checks for generic types requires convert to have literal type
- // parameters and not argument type parameters.
- @Override public Map<String, String> convert(String input) throws OptionsParsingException {
- return super.convert(input);
- }
- }
-
- /**
- * A converter for dictionary arguments of the format key:value[,key:value]*. The keys and values
- * may contain colons and commas as long as they are escaped with a backslash. The key type is
- * Path and the value type is String.
- */
- public static class ExistingPathStringDictionaryConverter
- extends DictionaryConverter<Path, String> {
- public ExistingPathStringDictionaryConverter() {
- super(new ExistingPathConverter(), IDENTITY_CONVERTER);
- }
- // The way {@link OptionsData} checks for generic types requires convert to have literal type
- // parameters and not argument type parameters.
- @Override public Map<Path, String> convert(String input) throws OptionsParsingException {
- return super.convert(input);
- }
- }
}
diff --git a/manifest.txt b/manifest.txt
new file mode 100644
index 0000000..ab00503
--- /dev/null
+++ b/manifest.txt
@@ -0,0 +1 @@
+Main-Class: com.google.devtools.build.android.desugar.Desugar