Skip to content

Commit

Permalink
Register shadow classes in a stable order, so locally overridden shad…
Browse files Browse the repository at this point in the history
…ows work predictably.

PiperOrigin-RevId: 233711964
  • Loading branch information
brettchabot authored and copybara-robolectric committed Feb 13, 2019
1 parent aa3620c commit 5725427
Showing 1 changed file with 11 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package org.robolectric.internal.bytecode;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.robolectric.annotation.Implements;
import org.robolectric.internal.ShadowProvider;
import org.robolectric.shadow.api.ShadowPicker;
Expand All @@ -28,10 +31,17 @@ public class ShadowMap {
private final ImmutableMap<String, ShadowInfo> overriddenShadows;
private final ImmutableMap<String, String> shadowPickers;

@SuppressWarnings("AndroidJdkLibsChecker")
public static ShadowMap createFromShadowProviders(Iterable<ShadowProvider> shadowProviders) {
final Map<String, String> shadowMap = new HashMap<>();
final Map<String, String> shadowPickerMap = new HashMap<>();
for (ShadowProvider provider : shadowProviders) {

// register the shadows in a stable order based on package name...
TreeSet<ShadowProvider> sortedProviders = new TreeSet<>(
Comparator.comparing(shadowProvider -> shadowProvider.getClass().getPackage().getName()));
Iterables.addAll(sortedProviders, shadowProviders);

for (ShadowProvider provider : sortedProviders) {
shadowMap.putAll(provider.getShadowMap());
shadowPickerMap.putAll(provider.getShadowPickerMap());
}
Expand Down

0 comments on commit 5725427

Please sign in to comment.