protected NewInstanceNode createNewInstance(ResolvedJavaType type, boolean fillContents) { return new NewInstanceNode(type, fillContents); }
public NewInstanceNode createNewInstanceFromVirtual(VirtualObjectNode virtual) { return new NewInstanceNode(virtual.type(), true); }
/** Hook for subclasses to instantiate a subclass of {@link NewInstanceNode}. */ protected NewInstanceNode createNewInstanceNode(ResolvedJavaType type) { return new NewInstanceNode(type, fillContents(), stateBefore()); }
private static void throwInvocationTargetException(HostedGraphKit graphKit) { ValueNode exception = graphKit.exceptionObject(); ResolvedJavaType exceptionType = graphKit.getMetaAccess().lookupJavaType(InvocationTargetException.class); ValueNode ite = graphKit.append(new NewInstanceNode(exceptionType, true)); ResolvedJavaMethod cons = null; for (ResolvedJavaMethod c : exceptionType.getDeclaredConstructors()) { if (c.getSignature().getParameterCount(false) == 1) { cons = c; } } graphKit.createJavaCallWithExceptionAndUnwind(InvokeKind.Special, cons, ite, exception); graphKit.append(new UnwindNode(ite)); }
kit.thenPart(); ResolvedJavaType enumExceptionType = metaAccess.lookupJavaType(RuntimeException.class); NewInstanceNode enumException = kit.append(new NewInstanceNode(enumExceptionType, true)); Iterator<ResolvedJavaMethod> enumExceptionCtor = Arrays.stream(enumExceptionType.getDeclaredConstructors()).filter( c -> c.getSignature().getParameterCount(false) == 1 && c.getSignature().getParameterType(0, null).equals(metaAccess.lookupJavaType(String.class))).iterator();
@Override public StructuredGraph buildGraph(DebugContext ctx, ResolvedJavaMethod method, HostedProviders providers, Purpose purpose) { HostedGraphKit graphKit = new HostedGraphKit(ctx, providers, method); ResolvedJavaType type = providers.getMetaAccess().lookupJavaType(constructor.getDeclaringClass()); ResolvedJavaMethod cons = providers.getMetaAccess().lookupJavaMethod(constructor); Class<?>[] argTypes = constructor.getParameterTypes(); ValueNode ret = graphKit.append(new NewInstanceNode(type, true)); ValueNode[] args = new ValueNode[argTypes.length + 1]; args[0] = ret; if (argTypes.length > 0) { ValueNode argumentArray = graphKit.loadLocal(1, JavaKind.Object); fillArgsArray(graphKit, argumentArray, 1, args, argTypes); } graphKit.createJavaCallWithException(InvokeKind.Special, cons, args); graphKit.noExceptionPart(); graphKit.createReturn(ret, JavaKind.Object); graphKit.exceptionPart(); throwInvocationTargetException(graphKit); graphKit.endInvokeWithException(); graphKit.mergeUnwinds(); assert graphKit.getGraph().verify(); return graphKit.getGraph(); } }
kit.thenPart(); ResolvedJavaType enumExceptionType = metaAccess.lookupJavaType(RuntimeException.class); NewInstanceNode enumException = kit.append(new NewInstanceNode(enumExceptionType, true)); Iterator<ResolvedJavaMethod> enumExceptionCtor = Arrays.stream(enumExceptionType.getDeclaredConstructors()).filter( c -> c.getSignature().getParameterCount(false) == 1 && c.getSignature().getParameterType(0, null).equals(metaAccess.lookupJavaType(String.class))).iterator();
private static void throwIllegalArgumentException(HostedGraphKit graphKit, String message) { ResolvedJavaType exceptionType = graphKit.getMetaAccess().lookupJavaType(IllegalArgumentException.class); ValueNode ite = graphKit.append(new NewInstanceNode(exceptionType, true)); ResolvedJavaMethod cons = null; for (ResolvedJavaMethod c : exceptionType.getDeclaredConstructors()) { if (c.getSignature().getParameterCount(false) == 2) { cons = c; } } JavaConstant msg = graphKit.getConstantReflection().forString(message); ValueNode msgNode = graphKit.createConstant(msg, JavaKind.Object); ValueNode cause = graphKit.createConstant(JavaConstant.NULL_POINTER, JavaKind.Object); graphKit.createJavaCallWithExceptionAndUnwind(InvokeKind.Special, cons, ite, msgNode, cause); graphKit.append(new UnwindNode(ite)); }
@Override public StructuredGraph buildGraph(DebugContext ctx, ResolvedJavaMethod method, HostedProviders providers, Purpose purpose) { HostedGraphKit graphKit = new HostedGraphKit(ctx, providers, method); ResolvedJavaType exceptionType = graphKit.getMetaAccess().lookupJavaType(exceptionClass); ValueNode instance = graphKit.append(new NewInstanceNode(exceptionType, true)); ResolvedJavaMethod cons = null; for (ResolvedJavaMethod c : exceptionType.getDeclaredConstructors()) { if (c.getSignature().getParameterCount(false) == 1) { ResolvedJavaType stringType = providers.getMetaAccess().lookupJavaType(String.class); if (c.getSignature().getParameterType(0, null).equals(stringType)) { cons = c; } } } JavaConstant msg = graphKit.getConstantReflection().forString(message); ValueNode msgNode = graphKit.createConstant(msg, JavaKind.Object); graphKit.createJavaCallWithExceptionAndUnwind(InvokeKind.Special, cons, instance, msgNode); graphKit.append(new UnwindNode(instance)); graphKit.mergeUnwinds(); assert graphKit.getGraph().verify(); return graphKit.getGraph(); } }
kit.startIf(kit.unique(new ObjectEqualsNode(unboxed, hubNode)), BranchProbabilityNode.FAST_PATH_PROBABILITY); kit.thenPart(); ValueNode created = kit.append(new NewInstanceNode(receiverClass, true)); AbstractMergeNode merge = kit.endIf(); receiver = kit.unique(new ValuePhiNode(StampFactory.object(), merge, new ValueNode[]{created, unboxed}));
StructuredGraph newGraph = new StructuredGraph.Builder(graph().getOptions(), graph().getDebug(), AllowAssumptions.ifNonNull(assumptions)).name("<clone>").build(); ParameterNode param = newGraph.addWithoutUnique(new ParameterNode(0, StampPair.createSingle(getObject().stamp(NodeView.DEFAULT)))); NewInstanceNode newInstance = newGraph.add(new NewInstanceNode(type, true)); newGraph.addAfterFixed(newGraph.start(), newInstance); ReturnNode returnNode = newGraph.add(new ReturnNode(newInstance));