All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robolectric.internal.bytecode.ShadowInvalidator Maven / Gradle / Ivy

package org.robolectric.internal.bytecode;

import java.lang.invoke.SwitchPoint;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class ShadowInvalidator {
  private static final SwitchPoint DUMMY = new SwitchPoint();

  static {
    SwitchPoint.invalidateAll(new SwitchPoint[] { DUMMY });
  }

  private Map switchPoints;

  public ShadowInvalidator() {
    this.switchPoints = new HashMap<>();
  }

  public SwitchPoint getSwitchPoint(Class caller) {
    return getSwitchPoint(caller.getName());
  }

  public synchronized SwitchPoint getSwitchPoint(String className) {
    SwitchPoint switchPoint = switchPoints.get(className);
    if (switchPoint == null) switchPoints.put(className, switchPoint = new SwitchPoint());
    return switchPoint;
  }

  public synchronized void invalidateClasses(Collection classNames) {
    if (classNames.isEmpty()) return;
    SwitchPoint[] points = new SwitchPoint[classNames.size()];
    int i = 0;
    for (String className : classNames) {
      SwitchPoint switchPoint = switchPoints.put(className, null);
      if (switchPoint == null) switchPoint = DUMMY;
      points[i++] = switchPoint;
    }

    SwitchPoint.invalidateAll(points);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy