@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 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 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 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); } }