package cuchaz.enigma.convert; import java.util.Collection; import java.util.Set; import com.google.common.collect.Sets; import cuchaz.enigma.Util; import cuchaz.enigma.mapping.ClassEntry; public class ClassMatch { public Set sourceClasses; public Set destClasses; public ClassMatch(Collection sourceClasses, Collection destClasses) { this.sourceClasses = Sets.newHashSet(sourceClasses); this.destClasses = Sets.newHashSet(destClasses); } public ClassMatch(ClassEntry sourceClass, ClassEntry destClass) { sourceClasses = Sets.newHashSet(); if (sourceClass != null) { sourceClasses.add(sourceClass); } destClasses = Sets.newHashSet(); if (destClass != null) { destClasses.add(destClass); } } public boolean isMatched() { return sourceClasses.size() > 0 && destClasses.size() > 0; } public boolean isAmbiguous() { return sourceClasses.size() > 1 || destClasses.size() > 1; } public ClassEntry getUniqueSource() { if (sourceClasses.size() != 1) { throw new IllegalStateException("Match has ambiguous source!"); } return sourceClasses.iterator().next(); } public ClassEntry getUniqueDest() { if (destClasses.size() != 1) { throw new IllegalStateException("Match has ambiguous source!"); } return destClasses.iterator().next(); } public Set intersectSourceClasses(Set classes) { Set intersection = Sets.newHashSet(sourceClasses); intersection.retainAll(classes); return intersection; } @Override public int hashCode() { return Util.combineHashesOrdered(sourceClasses, destClasses); } @Override public boolean equals(Object other) { if (other instanceof ClassMatch) { return equals((ClassMatch)other); } return false; } public boolean equals(ClassMatch other) { return this.sourceClasses.equals(other.sourceClasses) && this.destClasses.equals(other.destClasses); } }