package org.jetbrains.ruby.codeInsight.types.signature.contractTransition;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ReferenceContractTransition implements ContractTransition {
private final int myMask;
public ReferenceContractTransition(int mask) {
myMask = mask;
}
@NotNull
@Override
public Set<String> getValue(@NotNull List<Set<String>> readTypes) {
int tmpMask = myMask;
int cnt = 0;
Set<String> ans = null;
while (tmpMask > 0) {
if (tmpMask % 2 == 1) {
if (ans == null) {
ans = new HashSet<>(readTypes.get(cnt));
} else {
ans.retainAll(readTypes.get(cnt));
}
}
tmpMask /= 2;
cnt++;
}
return ans;
}
public int getMask() {
return myMask;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ReferenceContractTransition that = (ReferenceContractTransition) o;
return myMask == that.myMask;
}
@Override
public int hashCode() {
return myMask;
}
}