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