@Override public boolean handleLoadField(GraphBuilderContext b, ValueNode receiver, ResolvedJavaField field) { StampPair wordStamp = interceptType(b, field.getType(), false); if (wordStamp != null) { LoadFieldNode loadFieldNode = LoadFieldNode.createOverrideStamp(wordStamp, receiver, field); b.addPush(field.getJavaKind(), loadFieldNode); return true; } return false; }
@Override protected LoadFieldNode genLoadFieldNode(Assumptions assumptions, ValueNode originalAlias, ResolvedJavaField field) { if (field.getJavaKind() == JavaKind.Object && field.getType() instanceof SharedType) { /* * We have the static analysis to check interface types, e.g.., if a parameter of field * has a declared interface type and is assigned something that does not implement the * interface, the static analysis reports an error. */ TypeReference trusted = TypeReference.createTrustedWithoutAssumptions((SharedType) field.getType()); StampPair pair = StampPair.createSingle(StampFactory.object(trusted, false)); return LoadFieldNode.createOverrideStamp(pair, originalAlias, field); } else { return super.genLoadFieldNode(assumptions, originalAlias, field); } }
protected ValueNode genLoadField(ValueNode receiver, ResolvedJavaField field) { StampPair stamp = graphBuilderConfig.getPlugins().getOverridingStamp(this, field.getType(), false); if (stamp == null) { return LoadFieldNode.create(getConstantFieldProvider(), getConstantReflection(), getMetaAccess(), getOptions(), getAssumptions(), receiver, field, false, false); } else { return LoadFieldNode.createOverrideStamp(getConstantFieldProvider(), getConstantReflection(), getMetaAccess(), getOptions(), stamp, receiver, field, false, false); } }