diff options
author | corysmith <corysmith@google.com> | 2017-05-23 17:19:14 +0200 |
---|---|---|
committer | Irina Iancu <elenairina@google.com> | 2017-05-23 17:41:32 +0200 |
commit | f6c4d6d66118410b1139a84fe34ba8134661bfa2 (patch) | |
tree | 67ee24a40c88bea1a38807155806fb957a852b9a /src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java | |
parent | 81316798806b274d84c4eb1131bab8c90b0c7ba1 (diff) |
Add a new action for generating reconciled R classes for Robolectric.
This includes some refactoring:
* Move the symbol deserialization our of the merger and into the ParsedAndroidData (probably move again.)
* Change the FailedFutureAggregator generics to work more callables
RELNOTES: None
PiperOrigin-RevId: 156863698
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java | 61 |
1 files changed, 2 insertions, 59 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java b/src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java index b9a372d32c..44967168b9 100644 --- a/src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java +++ b/src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java @@ -17,12 +17,9 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; import com.google.common.base.Stopwatch; import com.google.common.collect.Iterables; -import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; import com.google.devtools.build.android.AndroidResourceMerger.MergingException; -import com.google.devtools.build.android.ParsedAndroidData.Builder; -import com.google.devtools.build.android.ParsedAndroidData.ParsedAndroidDataBuildingPathWalker; import java.io.IOException; import java.io.InputStream; import java.nio.file.Path; @@ -32,7 +29,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; @@ -42,44 +38,6 @@ class AndroidDataMerger { private static final Logger logger = Logger.getLogger(AndroidDataMerger.class.getCanonicalName()); - private final class ParseDependencyDataTask implements Callable<Boolean> { - - private final SerializedAndroidData dependency; - - private final Builder targetBuilder; - - private ParseDependencyDataTask(SerializedAndroidData dependency, Builder targetBuilder) { - this.dependency = dependency; - this.targetBuilder = targetBuilder; - } - - @Override - public Boolean call() throws Exception { - final Builder parsedDataBuilder = ParsedAndroidData.Builder.newBuilder(); - try { - dependency.deserialize(deserializer, parsedDataBuilder.consumers()); - } catch (DeserializationException e) { - if (!e.isLegacy()) { - throw MergingException.wrapException(e); - } - logger.fine( - String.format( - "\u001B[31mDEPRECATION:\u001B[0m Legacy resources used for %s", - dependency.getLabel())); - // Legacy android resources -- treat them as direct dependencies. - dependency.walk(ParsedAndroidDataBuildingPathWalker.create(parsedDataBuilder)); - } - // The builder isn't threadsafe, so synchronize the copyTo call. - synchronized (targetBuilder) { - // All the resources are sorted before writing, so they can be aggregated in - // whatever order here. - parsedDataBuilder.copyTo(targetBuilder); - } - // Had to return something? - return Boolean.TRUE; - } - } - /** Interface for comparing paths. */ interface SourceChecker { boolean checkEquality(DataSource one, DataSource two) throws IOException; @@ -184,27 +142,12 @@ class AndroidDataMerger { throws MergingException { Stopwatch timer = Stopwatch.createStarted(); try { - final ParsedAndroidData.Builder directBuilder = ParsedAndroidData.Builder.newBuilder(); - final ParsedAndroidData.Builder transitiveBuilder = ParsedAndroidData.Builder.newBuilder(); - final List<ListenableFuture<Boolean>> tasks = new ArrayList<>(); - for (final SerializedAndroidData dependency : direct) { - tasks.add(executorService.submit(new ParseDependencyDataTask(dependency, directBuilder))); - } - for (final SerializedAndroidData dependency : transitive) { - tasks.add( - executorService.submit(new ParseDependencyDataTask(dependency, transitiveBuilder))); - } - // Wait for all the parsing to complete. - FailedFutureAggregator<MergingException> aggregator = - FailedFutureAggregator.createForMergingExceptionWithMessage( - "Failure(s) during dependency parsing"); - aggregator.aggregateAndMaybeThrow(tasks); logger.fine( String.format("Merged dependencies read in %sms", timer.elapsed(TimeUnit.MILLISECONDS))); timer.reset().start(); return doMerge( - transitiveBuilder.build(), - directBuilder.build(), + ParsedAndroidData.loadedFrom(transitive, executorService, deserializer), + ParsedAndroidData.loadedFrom(direct, executorService, deserializer), primary, primaryManifest, allowPrimaryOverrideAll); |