/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit.internal; import javax.annotation.*; /** * Identifies a class by its loader and name rather than by the {@code Class} object, which isn't available during * initial class transformation. */ public final class ClassIdentification { @Nullable public final ClassLoader loader; @Nonnull public final String name; public ClassIdentification(@Nullable ClassLoader loader, @Nonnull String name) { this.loader = loader; this.name = name; } @Nonnull public Class<?> getLoadedClass() { try { return Class.forName(name, false, loader); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ClassIdentification other = (ClassIdentification) o; if (loader != other.loader) return false; return name.equals(other.name); } @Override public int hashCode() { return loader == null ? name.hashCode() : 31 * loader.hashCode() + name.hashCode(); } }