private int compareFieldKey(InstanceFieldKey key1, Object key2) { if (key2 instanceof InstanceFieldKey) { int r1 = compareInstanceKeys(key1.getInstanceKey(), ((InstanceFieldKey)key2).getInstanceKey()); if (r1 != 0) return r1; else { return compareFields(key1.getField(), ((InstanceFieldKey)key2).getField()); } } else return -1; }
private int compareFieldKey(InstanceFieldKey key1, Object key2) { if (key2 instanceof InstanceFieldKey) { int r1 = compareInstanceKeys(key1.getInstanceKey(), ((InstanceFieldKey)key2).getInstanceKey()); if (r1 != 0) return r1; else { return compareFields(key1.getField(), ((InstanceFieldKey)key2).getField()); } } else return -1; }
private IClass inferType(PointerKey key) { if (key instanceof LocalPointerKeyWithFilter) { LocalPointerKeyWithFilter lpk = (LocalPointerKeyWithFilter) key; FilteredPointerKey.TypeFilter filter = lpk.getTypeFilter(); assert filter instanceof FilteredPointerKey.SingleClassFilter; return ((FilteredPointerKey.SingleClassFilter) filter).getConcreteType(); } else if (key instanceof StaticFieldKey) { StaticFieldKey s = (StaticFieldKey) key; return getCallGraph().getClassHierarchy().lookupClass(s.getField().getFieldTypeReference()); } else if (key instanceof InstanceFieldKey) { InstanceFieldKey i = (InstanceFieldKey) key; return getCallGraph().getClassHierarchy().lookupClass(i.getField().getFieldTypeReference()); } else if (key instanceof ArrayContentsKey) { ArrayContentsKey i = (ArrayContentsKey) key; FilteredPointerKey.TypeFilter filter = i.getTypeFilter(); assert filter instanceof FilteredPointerKey.SingleClassFilter; return ((FilteredPointerKey.SingleClassFilter) filter).getConcreteType(); } else if (key instanceof ExceptionReturnValueKey) { return getCallGraph().getClassHierarchy().lookupClass(TypeReference.JavaLangException); } else if (key instanceof ReturnValueKey) { ReturnValueKey r = (ReturnValueKey) key; return getCallGraph().getClassHierarchy().lookupClass(r.getNode().getMethod().getReturnType()); } else { Assertions.UNREACHABLE("inferType " + key.getClass()); return null; } }
private IClass inferType(PointerKey key) { if (key instanceof LocalPointerKeyWithFilter) { LocalPointerKeyWithFilter lpk = (LocalPointerKeyWithFilter) key; FilteredPointerKey.TypeFilter filter = lpk.getTypeFilter(); assert filter instanceof FilteredPointerKey.SingleClassFilter; return ((FilteredPointerKey.SingleClassFilter) filter).getConcreteType(); } else if (key instanceof StaticFieldKey) { StaticFieldKey s = (StaticFieldKey) key; return getCallGraph().getClassHierarchy().lookupClass(s.getField().getFieldTypeReference()); } else if (key instanceof InstanceFieldKey) { InstanceFieldKey i = (InstanceFieldKey) key; return getCallGraph().getClassHierarchy().lookupClass(i.getField().getFieldTypeReference()); } else if (key instanceof ArrayContentsKey) { ArrayContentsKey i = (ArrayContentsKey) key; FilteredPointerKey.TypeFilter filter = i.getTypeFilter(); assert filter instanceof FilteredPointerKey.SingleClassFilter; return ((FilteredPointerKey.SingleClassFilter) filter).getConcreteType(); } else if (key instanceof ExceptionReturnValueKey) { return getCallGraph().getClassHierarchy().lookupClass(TypeReference.JavaLangException); } else if (key instanceof ReturnValueKey) { ReturnValueKey r = (ReturnValueKey) key; return getCallGraph().getClassHierarchy().lookupClass(r.getNode().getMethod().getReturnType()); } else { Assertions.UNREACHABLE("inferType " + key.getClass()); return null; } }