jdk/test/java/lang/instrument/ilib/ClassReaderWriter.java
changeset 26233 d391c2eadc8c
parent 26232 ca9aa0749e5d
parent 26229 b1d885c12096
child 26255 af28748e6b2d
--- a/jdk/test/java/lang/instrument/ilib/ClassReaderWriter.java	Fri Aug 29 11:59:34 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,263 +0,0 @@
-/*
- * Copyright (c) 2005, 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 ilib;
-
-class ClassReaderWriter implements RuntimeConstants {
-
-    int codeAttributeIndex;
-    int lineNumberAttributeIndex;
-    int localVarAttributeIndex;
-
-    private final byte[] orig;
-    private final byte[] gen;
-    private final int sectionLength;
-
-    private static final int GROWTH_FACTOR = 2;
-    private static final int SECTIONS = 2;
-    private static final String codeAttributeName = "Code";
-    private static final String lineNumberAttributeName = "LineNumberTable";
-    private static final String localVarAttributeName = "LocalVariableTable";
-
-    private int[] genSectionPos = new int[SECTIONS];
-
-    private int inputPos = 0;
-    private int genPos = 0;
-    private int markPos = 0;
-    private int currentSection = 0;
-
-    private String[] constantPool;
-
-    ClassReaderWriter(byte[] orig) {
-        this.orig = orig;
-        sectionLength = orig.length * GROWTH_FACTOR;
-        gen = new byte[sectionLength * SECTIONS];
-        for (int section = 0; section < SECTIONS; ++section) {
-            genSectionPos[section] = section * sectionLength;
-        }
-    }
-
-    int setSection(int section) {
-        int prevSection = currentSection;
-        genSectionPos[prevSection] = genPos;
-        genPos = genSectionPos[section];
-        currentSection = section;
-        return prevSection;
-    }
-
-    byte[] result() {
-        int section;
-        int totalLength = 0;
-
-        setSection(0); // save current section
-
-        for (section = 0; section < SECTIONS; ++section) {
-            int sectionStart = section * sectionLength;
-            int sectionGenLength = genSectionPos[section] - sectionStart;
-            totalLength += sectionGenLength;
-        }
-
-        byte[] newcf = new byte[totalLength];
-        int written = 0;
-        for (section = 0; section < SECTIONS; ++section) {
-            int sectionStart = section * sectionLength;
-            int sectionGenLength = genSectionPos[section] - sectionStart;
-            System.arraycopy(gen, sectionStart, newcf, written, sectionGenLength);
-            written += sectionGenLength;
-        }
-
-        return newcf;
-    }
-
-    int readU1() {
-        return ((int)orig[inputPos++]) & 0xFF;
-    }
-
-    int readU2() {
-        int res = readU1();
-        return (res << 8) + readU1();
-    }
-
-    short readS2() {
-        int res = readU1();
-        return (short)((res << 8) + readU1());
-    }
-
-    int readU4() {
-        int res = readU2();
-        return (res << 16) + readU2();
-    }
-
-    void writeU1(int val) {
-        gen[genPos++] = (byte)val;
-    }
-
-    void writeU2(int val) {
-        writeU1(val >> 8);
-        writeU1(val & 0xFF);
-    }
-
-    void writeU4(int val) {
-        writeU2(val >> 16);
-        writeU2(val & 0xFFFF);
-    }
-
-    int copyU1() {
-        int value = readU1();
-        writeU1(value);
-        return value;
-    }
-
-    int copyU2() {
-        int value = readU2();
-        writeU2(value);
-        return value;
-    }
-
-    int copyU4() {
-        int value = readU4();
-        writeU4(value);
-        return value;
-    }
-
-    void copy(int count) {
-        for (int i = 0; i < count; ++i) {
-            gen[genPos++] = orig[inputPos++];
-        }
-    }
-
-    void skip(int count) {
-        inputPos += count;
-    }
-
-    byte[] readBytes(int count) {
-        byte[] bytes = new byte[count];
-        for (int i = 0; i < count; ++i) {
-            bytes[i] = orig[inputPos++];
-        }
-        return bytes;
-    }
-
-    void writeBytes(byte[] bytes) {
-        for (int i = 0; i < bytes.length; ++i) {
-            gen[genPos++] = bytes[i];
-        }
-    }
-
-    byte[] inputBytes() {
-        return orig;
-    }
-
-    int inputPosition() {
-        return inputPos;
-    }
-
-    void setInputPosition(int pos) {
-        inputPos = pos;
-    }
-
-    void markLocalPositionStart() {
-        markPos = inputPos;
-    }
-
-    int localPosition() {
-        return inputPos - markPos;
-    }
-
-    void rewind() {
-        setInputPosition(markPos);
-    }
-
-    int generatedPosition() {
-        return genPos;
-    }
-
-    void randomAccessWriteU2(int pos, int val) {
-        int savePos = genPos;
-        genPos = pos;
-        writeU2(val);
-        genPos = savePos;
-    }
-
-    void randomAccessWriteU4(int pos, int val) {
-        int savePos = genPos;
-        genPos = pos;
-        writeU4(val);
-        genPos = savePos;
-    }
-
-    String constantPoolString(int index) {
-        return constantPool[index];
-    }
-
-    void copyConstantPool(int constantPoolCount){
-        // copy const pool
-        constantPool = new String[constantPoolCount];
-        // index zero not in class file
-        for (int i = 1; i < constantPoolCount; ++i) {
-            int tag = readU1();
-            writeU1(tag);
-            switch (tag) {
-                case CONSTANT_CLASS:
-                case CONSTANT_STRING:
-                    copy(2);
-                    break;
-                case CONSTANT_FIELD:
-                case CONSTANT_METHOD:
-                case CONSTANT_INTERFACEMETHOD:
-                case CONSTANT_INTEGER:
-                case CONSTANT_FLOAT:
-                case CONSTANT_NAMEANDTYPE:
-                    copy(4);
-                    break;
-                case CONSTANT_LONG:
-                case CONSTANT_DOUBLE:
-                    copy(8);
-                    ++i;  // these take two CP entries - duh!
-                    break;
-                case CONSTANT_UTF8:
-                    int len = copyU2();
-                    byte[] utf8 = readBytes(len);
-                    String str = null; // null to shut the compiler up
-                    try {
-                        str = new String(utf8, "UTF-8");
-                    } catch (Exception exc) {
-                        throw new Error("CP exception: " + exc);
-                    }
-                    constantPool[i] = str;
-                    if (str.equals(codeAttributeName)) {
-                        codeAttributeIndex = i;
-                    } else if (str.equals(lineNumberAttributeName)) {
-                        lineNumberAttributeIndex = i;
-                    } else if (str.equals(localVarAttributeName)) {
-                        localVarAttributeIndex = i;
-                    }
-                    writeBytes(utf8);
-                    break;
-                default:
-                    throw new Error(i + " unexpected CP tag: " + tag);
-            }
-        }
-    }
-
-}