@Override public String toString() { return "[" + getInstanceKey() + "; " + getFieldIdentifier() + ']'; }
@Override public Iterator<PointerKey> getPointerKeysForReflectedFieldWrite(InstanceKey I, InstanceKey F) { List<PointerKey> result = new LinkedList<>(); if (F instanceof ConstantKey) { PointerKey ifk = getInstanceFieldPointerKeyForConstant(I, (ConstantKey<?>) F); if (ifk != null) { result.add(ifk); } } result.add(ReflectedFieldPointerKey.mapped(new ConcreteTypeKey(getFieldNameType(F)), I)); return result.iterator(); }
@Override public Iterator<PointerKey> getPointerKeysForReflectedFieldWrite(InstanceKey I, InstanceKey F) { List<PointerKey> result = new LinkedList<>(); if (F instanceof ConstantKey) { PointerKey ifk = getInstanceFieldPointerKeyForConstant(I, (ConstantKey<?>) F); if (ifk != null) { result.add(ifk); } } result.add(ReflectedFieldPointerKey.mapped(new ConcreteTypeKey(getFieldNameType(F)), I)); return result.iterator(); }
@Override public Iterator<PointerKey> getPointerKeysForReflectedFieldRead(InstanceKey I, InstanceKey F) { if (F instanceof ConstantKey) { PointerKey ifk = getInstanceFieldPointerKeyForConstant(I, (ConstantKey<?>) F); if (ifk != null) { return new NonNullSingletonIterator<>(ifk); } } PointerKey x = ReflectedFieldPointerKey.mapped(new ConcreteTypeKey(getFieldNameType(F)), I); return new NonNullSingletonIterator<>(x); } }
@Override public String toString() { return "[" + getInstanceKey() + "; " + getFieldIdentifier() + ']'; }
@Override public Iterator<PointerKey> getPointerKeysForReflectedFieldRead(InstanceKey I, InstanceKey F) { if (F instanceof ConstantKey) { PointerKey ifk = getInstanceFieldPointerKeyForConstant(I, (ConstantKey<?>) F); if (ifk != null) { return new NonNullSingletonIterator<>(ifk); } } PointerKey x = ReflectedFieldPointerKey.mapped(new ConcreteTypeKey(getFieldNameType(F)), I); return new NonNullSingletonIterator<>(x); } }
@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof ReflectedFieldPointerKey) { ReflectedFieldPointerKey other = (ReflectedFieldPointerKey) obj; return getFieldIdentifier().equals(other.getFieldIdentifier()) && getInstanceKey().equals(other.getInstanceKey()); } else { return false; } }
@Override protected PointerKey getInstanceFieldPointerKeyForConstant(InstanceKey I, ConstantKey<?> F) { Object v = F.getValue(); String strVal = JSCallGraphUtil.simulateToStringForPropertyNames(v); // if we know the string representation of the constant, use it... if (strVal != null) { IField f = I.getConcreteType().getField(Atom.findOrCreateUnicodeAtom(strVal)); return getPointerKeyForInstanceField(I, f); // ...otherwise it is some unknown string } else { return ReflectedFieldPointerKey.mapped(new ConcreteTypeKey(getFieldNameType(F)), I); } }
@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof ReflectedFieldPointerKey) { ReflectedFieldPointerKey other = (ReflectedFieldPointerKey) obj; return getFieldIdentifier().equals(other.getFieldIdentifier()) && getInstanceKey().equals(other.getInstanceKey()); } else { return false; } }
@Override protected PointerKey getInstanceFieldPointerKeyForConstant(InstanceKey I, ConstantKey<?> F) { Object v = F.getValue(); String strVal = JSCallGraphUtil.simulateToStringForPropertyNames(v); // if we know the string representation of the constant, use it... if (strVal != null) { IField f = I.getConcreteType().getField(Atom.findOrCreateUnicodeAtom(strVal)); return getPointerKeyForInstanceField(I, f); // ...otherwise it is some unknown string } else { return ReflectedFieldPointerKey.mapped(new ConcreteTypeKey(getFieldNameType(F)), I); } }
@Override public int hashCode() { return getFieldIdentifier().hashCode() ^ getInstanceKey().hashCode(); }
@Override public int hashCode() { return getFieldIdentifier().hashCode() ^ getInstanceKey().hashCode(); }