package com.navercorp.pinpoint.common.server.bo; import com.navercorp.pinpoint.common.server.util.IntegerUtils; import com.navercorp.pinpoint.common.server.util.ShortUtils; import java.util.Comparator; /** * @author Woonduk Kang(emeroad) */ public class SpanEventComparator implements Comparator<SpanEventBo> { public static final SpanEventComparator INSTANCE = new SpanEventComparator(); @Override public int compare(SpanEventBo o1, SpanEventBo o2) { final int sequenceCompare = ShortUtils.compare(o1.getSequence(), o2.getSequence()); if (sequenceCompare != 0) { return sequenceCompare; } final int asyncId1 = o1.getAsyncId(); final int asyncId2 = o2.getAsyncId(); final int asyncIdCompare = IntegerUtils.compare(asyncId1, asyncId2); if (asyncIdCompare != 0) { // bug Comparison method violates its general contract! // TODO temporary fix // if (asyncId1 == -1) { // return -1; // } // if (asyncId2 == -1) { // return -1; // } return asyncIdCompare; } return IntegerUtils.compare(o1.getAsyncSequence(), o2.getAsyncSequence()); } }