package org.incha.ui.classview; import java.util.Comparator; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IMember; import org.eclipse.jdt.core.IType; import org.incha.core.jswingripples.eig.JSwingRipplesEIGNode; public class MemberComparator implements Comparator<JSwingRipplesEIGNode> { /** * Default constructor. */ public MemberComparator() { super(); } /* (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(final JSwingRipplesEIGNode o1, final JSwingRipplesEIGNode o2) { return compare(o1.getNodeIMember(), o2.getNodeIMember()); } private int compare(final IMember m1, final IMember m2) { int result = compareAsTypeNotType(m1, m2); if (result != 0) { return result; } result = compareAsFieldNotField(m1, m2); if (result != 0) { return result; } return m1.getElementName().compareTo(m2.getElementName()); } /** * @param m1 * @param m2 * @return */ private int compareAsFieldNotField(final IMember m1, final IMember m2) { if (m1 instanceof IField && !(m2 instanceof IField)) { return -1; } if (m2 instanceof IField && !(m1 instanceof IField)) { return 1; } return 0; } /** * @param m1 * @param m2 * @return */ private int compareAsTypeNotType(final IMember m1, final IMember m2) { if (m1 instanceof IType && !(m2 instanceof IType)) { return -1; } if (m2 instanceof IType && !(m1 instanceof IType)) { return 1; } return 0; } }