From 77adac3117ab42fd6b404c9424ff8200a0592756 Mon Sep 17 00:00:00 2001
From: Tor Norbye <tnorbye@google.com>
Date: Wed, 20 Feb 2019 10:00:26 -0800
Subject: [PATCH] 124811433: ConcurrentModificationException in './gradlew
 updateApi'

Fixes: 124811433
Test: in androidx-master-dev, ./gradlew :media2-widget:generateApi
Change-Id: I9e97d8c52b489b5b8a8f5b1ec49b9425c91125d6
---
 src/main/java/com/android/tools/metalava/ApiAnalyzer.kt | 7 ++++++-
 src/main/resources/version.properties                   | 2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt b/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
index 0d67214..ed32741 100644
--- a/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
+++ b/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
@@ -301,7 +301,12 @@ class ApiAnalyzer(
     }
 
     fun generateInheritedStubs(filterEmit: Predicate<Item>, filterReference: Predicate<Item>) {
-        packages.allClasses().forEach {
+        // When analyzing libraries we may discover some new classes during traversal; these aren't
+        // part of the API but may be super classes or interfaces; these will then be added into the
+        // package class lists, which could trigger a concurrent modification, so create a snapshot
+        // of the class list and iterate over it:
+        val allClasses = packages.allClasses().toList()
+        allClasses.forEach {
             if (filterEmit.test(it)) {
                 generateInheritedStubs(it, filterEmit, filterReference)
             }
diff --git a/src/main/resources/version.properties b/src/main/resources/version.properties
index 2139cec..579154c 100644
--- a/src/main/resources/version.properties
+++ b/src/main/resources/version.properties
@@ -2,4 +2,4 @@
 # Version definition
 # This file is read by gradle build scripts, but also packaged with metalava
 # as a resource for the Version classes to read.
-metalavaVersion=1.2.8
+metalavaVersion=1.2.9
-- 
GitLab