hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.graphio/src/org/graalvm/graphio/ProtocolImpl.java
changeset 46762 f7defa99f173
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.graphio/src/org/graalvm/graphio/ProtocolImpl.java	Fri Aug 04 19:59:33 2017 -0700
@@ -0,0 +1,273 @@
+/*
+ * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package org.graalvm.graphio;
+
+import java.io.IOException;
+import java.nio.channels.WritableByteChannel;
+import java.util.Collection;
+import java.util.Map;
+
+final class ProtocolImpl<Graph, Node, NodeClass, Port, Block, ResolvedJavaMethod, ResolvedJavaField, Signature, NodeSourcePosition>
+                extends GraphProtocol<Graph, Node, NodeClass, Port, Block, ResolvedJavaMethod, ResolvedJavaField, Signature, NodeSourcePosition> {
+    private final GraphStructure<Graph, Node, NodeClass, Port> structure;
+    private final GraphTypes types;
+    private final GraphBlocks<Graph, Block, Node> blocks;
+    private final GraphElements<ResolvedJavaMethod, ResolvedJavaField, Signature, NodeSourcePosition> elements;
+
+    ProtocolImpl(GraphStructure<Graph, Node, NodeClass, Port> structure, GraphTypes enums, GraphBlocks<Graph, Block, Node> blocks,
+                    GraphElements<ResolvedJavaMethod, ResolvedJavaField, Signature, NodeSourcePosition> elements, WritableByteChannel channel) throws IOException {
+        super(channel);
+        this.structure = structure;
+        this.types = enums;
+        this.blocks = blocks;
+        this.elements = elements;
+    }
+
+    @Override
+    protected Graph findGraph(Graph current, Object obj) {
+        return structure.graph(current, obj);
+    }
+
+    @Override
+    protected NodeClass findNodeClass(Object obj) {
+        return structure.nodeClass(obj);
+    }
+
+    @Override
+    protected String findNameTemplate(NodeClass clazz) {
+        return structure.nameTemplate(clazz);
+    }
+
+    @Override
+    protected int findNodeId(Node n) {
+        return structure.nodeId(n);
+    }
+
+    @Override
+    protected boolean hasPredecessor(Node node) {
+        return structure.nodeHasPredecessor(node);
+    }
+
+    @Override
+    protected int findNodesCount(Graph info) {
+        return structure.nodesCount(info);
+    }
+
+    @Override
+    protected Iterable<? extends Node> findNodes(Graph info) {
+        return structure.nodes(info);
+    }
+
+    @Override
+    protected void findNodeProperties(Node node, Map<String, Object> props, Graph info) {
+        structure.nodeProperties(info, node, props);
+    }
+
+    @Override
+    protected Port findClassEdges(NodeClass nodeClass, boolean dumpInputs) {
+        if (dumpInputs) {
+            return structure.portInputs(nodeClass);
+        } else {
+            return structure.portOutputs(nodeClass);
+        }
+    }
+
+    @Override
+    protected int findSize(Port edges) {
+        return structure.portSize(edges);
+    }
+
+    @Override
+    protected boolean isDirect(Port edges, int i) {
+        return structure.edgeDirect(edges, i);
+    }
+
+    @Override
+    protected String findName(Port edges, int i) {
+        return structure.edgeName(edges, i);
+    }
+
+    @Override
+    protected Object findType(Port edges, int i) {
+        return structure.edgeType(edges, i);
+    }
+
+    @Override
+    protected Collection<? extends Node> findNodes(Graph graph, Node node, Port port, int i) {
+        return structure.edgeNodes(graph, node, port, i);
+    }
+
+    @Override
+    protected Object findJavaClass(NodeClass clazz) {
+        return structure.nodeClassType(clazz);
+    }
+
+    @Override
+    protected Object findEnumClass(Object enumValue) {
+        return types.enumClass(enumValue);
+    }
+
+    @Override
+    protected int findEnumOrdinal(Object obj) {
+        return types.enumOrdinal(obj);
+    }
+
+    @Override
+    protected String[] findEnumTypeValues(Object clazz) {
+        return types.enumTypeValues(clazz);
+    }
+
+    @Override
+    protected String findJavaTypeName(Object obj) {
+        return types.typeName(obj);
+    }
+
+    @Override
+    protected Collection<? extends Node> findBlockNodes(Graph info, Block block) {
+        return blocks.blockNodes(info, block);
+    }
+
+    @Override
+    protected int findBlockId(Block block) {
+        return blocks.blockId(block);
+    }
+
+    @Override
+    protected Collection<? extends Block> findBlocks(Graph graph) {
+        return blocks.blocks(graph);
+    }
+
+    @Override
+    protected Collection<? extends Block> findBlockSuccessors(Block block) {
+        return blocks.blockSuccessors(block);
+    }
+
+    @Override
+    protected ResolvedJavaMethod findMethod(Object obj) {
+        return elements == null ? null : elements.method(obj);
+    }
+
+    @Override
+    protected byte[] findMethodCode(ResolvedJavaMethod method) {
+        return elements.methodCode(method);
+    }
+
+    @Override
+    protected int findMethodModifiers(ResolvedJavaMethod method) {
+        return elements.methodModifiers(method);
+    }
+
+    @Override
+    protected Signature findMethodSignature(ResolvedJavaMethod method) {
+        return elements.methodSignature(method);
+    }
+
+    @Override
+    protected String findMethodName(ResolvedJavaMethod method) {
+        return elements.methodName(method);
+    }
+
+    @Override
+    protected Object findMethodDeclaringClass(ResolvedJavaMethod method) {
+        return elements.methodDeclaringClass(method);
+    }
+
+    @Override
+    protected int findFieldModifiers(ResolvedJavaField field) {
+        return elements.fieldModifiers(field);
+    }
+
+    @Override
+    protected String findFieldTypeName(ResolvedJavaField field) {
+        return elements.fieldTypeName(field);
+    }
+
+    @Override
+    protected String findFieldName(ResolvedJavaField field) {
+        return elements.fieldName(field);
+    }
+
+    @Override
+    protected Object findFieldDeclaringClass(ResolvedJavaField field) {
+        return elements.fieldDeclaringClass(field);
+    }
+
+    @Override
+    protected ResolvedJavaField findJavaField(Object object) {
+        return elements == null ? null : elements.field(object);
+    }
+
+    @Override
+    protected Signature findSignature(Object object) {
+        return elements == null ? null : elements.signature(object);
+    }
+
+    @Override
+    protected int findSignatureParameterCount(Signature signature) {
+        return elements.signatureParameterCount(signature);
+    }
+
+    @Override
+    protected String findSignatureParameterTypeName(Signature signature, int index) {
+        return elements.signatureParameterTypeName(signature, index);
+    }
+
+    @Override
+    protected String findSignatureReturnTypeName(Signature signature) {
+        return elements.signatureReturnTypeName(signature);
+    }
+
+    @Override
+    protected NodeSourcePosition findNodeSourcePosition(Object object) {
+        return elements == null ? null : elements.nodeSourcePosition(object);
+    }
+
+    @Override
+    protected ResolvedJavaMethod findNodeSourcePositionMethod(NodeSourcePosition pos) {
+        return elements.nodeSourcePositionMethod(pos);
+    }
+
+    @Override
+    protected NodeSourcePosition findNodeSourcePositionCaller(NodeSourcePosition pos) {
+        return elements.nodeSourcePositionCaller(pos);
+    }
+
+    @Override
+    protected int findNodeSourcePositionBCI(NodeSourcePosition pos) {
+        return elements.nodeSourcePositionBCI(pos);
+    }
+
+    @Override
+    protected StackTraceElement findMethodStackTraceElement(ResolvedJavaMethod method, int bci, NodeSourcePosition pos) {
+        return elements.methodStackTraceElement(method, bci, pos);
+    }
+
+    @Override
+    protected void findExtraNodes(Node node, Collection<? super Node> extraNodes) {
+    }
+
+    @Override
+    protected String formatTitle(Graph graph, int id, String format, Object... args) {
+        return String.format(format, args) + " [" + id + "]";
+    }
+}