diff options
author | Andrew Pellegrini <apell@google.com> | 2016-02-11 19:32:54 +0000 |
---|---|---|
committer | David Chen <dzc@google.com> | 2016-02-11 22:23:35 +0000 |
commit | 3e836b33c3a2ee31a4bf05dad159d01e14289cb1 (patch) | |
tree | 2bc1659062e6d500154f4e28e70ddb719311c54b | |
parent | ece75724364be3caad5a7a21c09885b35357c0ca (diff) |
Add integration test for AndroidResourceProcessingAction.
- Changed AndroidResourceProcessingAction to call shutdown() on the thread pool used by AOSP code instead of System.exit() to allow calling the action's main() from inside a test, while maintaining the dangling thread cleanup.
--
MOS_MIGRATED_REVID=114459473
2 files changed, 10 insertions, 3 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java index 2d556f4109..c02ab41ae0 100644 --- a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java +++ b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java @@ -380,8 +380,7 @@ public class AndroidResourceProcessingAction { System.exit(3); } LOGGER.fine(String.format("Resources processed in %sms", timer.elapsed(TimeUnit.MILLISECONDS))); - // AOSP code can leave dangling threads. - System.exit(0); + resourceProcessor.shutdown(); } private static boolean useAaptCruncher() { diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java index 40cc4e740b..e676cef67b 100644 --- a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java +++ b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java @@ -28,6 +28,7 @@ import com.android.builder.internal.SymbolLoader; import com.android.builder.internal.SymbolWriter; import com.android.builder.model.AaptOptions; import com.android.ide.common.internal.CommandLineRunner; +import com.android.ide.common.internal.ExecutorSingleton; import com.android.ide.common.internal.LoggedErrorException; import com.android.ide.common.internal.PngCruncher; import com.android.ide.common.res2.AssetMerger; @@ -392,6 +393,14 @@ public class AndroidResourceProcessor { return new MergedAndroidData(resourcesOut, assetsOut, primary.getManifest()); } + /** + * Shutdown AOSP utilized thread-pool. + */ + public void shutdown() { + // AOSP code never shuts down its singleton executor and leaves the process hanging. + ExecutorSingleton.getExecutor().shutdownNow(); + } + private void androidDataToRelaxedMergeSet(UnvalidatedAndroidData primary, List<DependencyAndroidData> secondary, ImmutableList<DirectoryModifier> modifiers, List<ResourceSet> resourceSets, List<AssetSet> assetSets) { @@ -505,4 +514,3 @@ public class AndroidResourceProcessor { } } } - |