jdk/test/tools/pack200/pack200-verifier/src/xmlkit/ClassReader.java
author alanb
Thu, 01 Dec 2016 08:57:53 +0000
changeset 42338 a60f280f803c
parent 36511 9d0388c6b336
child 42703 20c39ea4a507
permissions -rw-r--r--
8169069: Module system implementation refresh (11/2016) Reviewed-by: plevart, chegar, psandoz, mchung, alanb, dfuchs, naoto, coffeys, weijun Contributed-by: alan.bateman@oracle.com, mandy.chung@oracle.com, claes.redestad@oracle.com, mark.reinhold@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
     1
/*
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
     2
 * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
     4
 *
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    10
 *
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    15
 * accompanied this code).
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    16
 *
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    20
 *
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    23
 * questions.
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    24
 */
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    25
package xmlkit; // -*- mode: java; indent-tabs-mode: nil -*-
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
    26
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    27
import com.sun.tools.classfile.AccessFlags;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    28
import com.sun.tools.classfile.Annotation;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    29
import com.sun.tools.classfile.Annotation.Annotation_element_value;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    30
import com.sun.tools.classfile.Annotation.Array_element_value;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    31
import com.sun.tools.classfile.Annotation.Class_element_value;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    32
import com.sun.tools.classfile.Annotation.Enum_element_value;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    33
import com.sun.tools.classfile.Annotation.Primitive_element_value;
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    34
import com.sun.tools.classfile.AnnotationDefault_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    35
import com.sun.tools.classfile.Attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    36
import com.sun.tools.classfile.Attributes;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    37
import com.sun.tools.classfile.BootstrapMethods_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    38
import com.sun.tools.classfile.CharacterRangeTable_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    39
import com.sun.tools.classfile.ClassFile;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    40
import com.sun.tools.classfile.Code_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    41
import com.sun.tools.classfile.CompilationID_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    42
import com.sun.tools.classfile.ConstantPool;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    43
import com.sun.tools.classfile.ConstantPool.CONSTANT_Class_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    44
import com.sun.tools.classfile.ConstantPool.CONSTANT_Double_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    45
import com.sun.tools.classfile.ConstantPool.CONSTANT_Fieldref_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    46
import com.sun.tools.classfile.ConstantPool.CONSTANT_Float_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    47
import com.sun.tools.classfile.ConstantPool.CONSTANT_Integer_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    48
import com.sun.tools.classfile.ConstantPool.CONSTANT_InterfaceMethodref_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    49
import com.sun.tools.classfile.ConstantPool.CONSTANT_InvokeDynamic_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    50
import com.sun.tools.classfile.ConstantPool.CONSTANT_Long_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    51
import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodHandle_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    52
import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodType_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    53
import com.sun.tools.classfile.ConstantPool.CONSTANT_Methodref_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    54
import com.sun.tools.classfile.ConstantPool.CONSTANT_NameAndType_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    55
import com.sun.tools.classfile.ConstantPool.CONSTANT_String_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    56
import com.sun.tools.classfile.ConstantPool.CONSTANT_Utf8_info;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    57
import com.sun.tools.classfile.ConstantPool.CPInfo;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    58
import com.sun.tools.classfile.ConstantPool.InvalidIndex;
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    59
import com.sun.tools.classfile.ConstantPoolException;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    60
import com.sun.tools.classfile.ConstantValue_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    61
import com.sun.tools.classfile.DefaultAttribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    62
import com.sun.tools.classfile.Deprecated_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    63
import com.sun.tools.classfile.Descriptor.InvalidDescriptor;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    64
import com.sun.tools.classfile.EnclosingMethod_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    65
import com.sun.tools.classfile.Exceptions_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    66
import com.sun.tools.classfile.Field;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    67
import com.sun.tools.classfile.InnerClasses_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    68
import com.sun.tools.classfile.InnerClasses_attribute.Info;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    69
import com.sun.tools.classfile.Instruction;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    70
import com.sun.tools.classfile.Instruction.TypeKind;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    71
import com.sun.tools.classfile.LineNumberTable_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    72
import com.sun.tools.classfile.LocalVariableTable_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    73
import com.sun.tools.classfile.LocalVariableTypeTable_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    74
import com.sun.tools.classfile.Method;
15261
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
    75
import com.sun.tools.classfile.MethodParameters_attribute;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    76
import com.sun.tools.classfile.Module_attribute;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    77
import com.sun.tools.classfile.Module_attribute.ExportsEntry;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    78
import com.sun.tools.classfile.Module_attribute.ProvidesEntry;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    79
import com.sun.tools.classfile.Module_attribute.RequiresEntry;
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
    80
import com.sun.tools.classfile.ModuleHashes_attribute;
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
    81
import com.sun.tools.classfile.ModuleHashes_attribute.Entry;
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
    82
import com.sun.tools.classfile.ModuleMainClass_attribute;
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
    83
import com.sun.tools.classfile.ModuleTarget_attribute;
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
    84
import com.sun.tools.classfile.ModulePackages_attribute;
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
    85
import com.sun.tools.classfile.ModuleVersion_attribute;
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    86
import com.sun.tools.classfile.Opcode;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    87
import com.sun.tools.classfile.RuntimeInvisibleAnnotations_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    88
import com.sun.tools.classfile.RuntimeInvisibleParameterAnnotations_attribute;
15526
84de8685a2d0 8003549: (pack200) assertion errors when processing lambda class files with IMethods
ksrini
parents: 15261
diff changeset
    89
import com.sun.tools.classfile.RuntimeInvisibleTypeAnnotations_attribute;
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    90
import com.sun.tools.classfile.RuntimeVisibleAnnotations_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    91
import com.sun.tools.classfile.RuntimeVisibleParameterAnnotations_attribute;
15526
84de8685a2d0 8003549: (pack200) assertion errors when processing lambda class files with IMethods
ksrini
parents: 15261
diff changeset
    92
import com.sun.tools.classfile.RuntimeVisibleTypeAnnotations_attribute;
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    93
import com.sun.tools.classfile.Signature_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    94
import com.sun.tools.classfile.SourceDebugExtension_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    95
import com.sun.tools.classfile.SourceFile_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    96
import com.sun.tools.classfile.SourceID_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
    97
import com.sun.tools.classfile.StackMapTable_attribute;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    98
import com.sun.tools.classfile.StackMapTable_attribute.append_frame;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
    99
import com.sun.tools.classfile.StackMapTable_attribute.chop_frame;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   100
import com.sun.tools.classfile.StackMapTable_attribute.full_frame;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   101
import com.sun.tools.classfile.StackMapTable_attribute.same_frame;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   102
import com.sun.tools.classfile.StackMapTable_attribute.same_frame_extended;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   103
import com.sun.tools.classfile.StackMapTable_attribute.same_locals_1_stack_item_frame;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   104
import com.sun.tools.classfile.StackMapTable_attribute.same_locals_1_stack_item_frame_extended;
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   105
import com.sun.tools.classfile.StackMap_attribute;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   106
import com.sun.tools.classfile.Synthetic_attribute;
17490
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
   107
import com.sun.tools.classfile.TypeAnnotation;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
   108
import com.sun.tools.classfile.TypeAnnotation.Position;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
   109
import static com.sun.tools.classfile.TypeAnnotation.TargetType.THROWS;
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   110
import java.io.*;
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   111
import java.util.*;
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   112
import java.util.jar.JarEntry;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   113
import java.util.jar.JarFile;
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   114
import xmlkit.XMLKit.Element;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   115
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   116
/*
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   117
 * @author jrose, ksrini
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   118
 */
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   119
public class ClassReader {
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   120
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   121
    private static final CommandLineParser CLP = new CommandLineParser(""
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   122
            + "-source:     +> = \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   123
            + "-dest:       +> = \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   124
            + "-encoding:   +> = \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   125
            + "-jcov           $ \n   -nojcov         !-jcov        \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   126
            + "-verbose        $ \n   -noverbose      !-verbose     \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   127
            + "-keepPath       $ \n   -nokeepPath     !-keepPath    \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   128
            + "-keepCP         $ \n   -nokeepCP       !-keepCP      \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   129
            + "-keepOrder      $ \n   -nokeepOrder    !-keepOrder   \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   130
            + "-continue       $ \n   -nocontinue     !-continue    \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   131
            + "-@         >-@  . \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   132
            + "-              +? \n"
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   133
            + "\n");
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   134
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   135
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   136
    // Protected state for representing the class file.
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   137
    protected Element cfile;          // <ClassFile ...>
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   138
    protected Element cpool;          // <ConstantPool ...>
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   139
    protected Element klass;          // <Class ...>
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   140
    protected List<String> thePool;    // stringified flattened Constant Pool
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   141
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   142
    public static void main(String[] ava) throws IOException {
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   143
        ArrayList<String> av = new ArrayList<>(Arrays.asList(ava));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   144
        HashMap<String, String> props = new HashMap<>();
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   145
        props.put("-encoding:", "UTF8");  // default
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   146
        props.put("-keepOrder", null);    // CLI default
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   147
        props.put("-pretty", "1");     // CLI default
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   148
        props.put("-continue", "1");     // CLI default
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   149
        CLP.parse(av, props);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   150
        //System.out.println(props+" ++ "+av);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   151
        File source = asFile(props.get("-source:"));
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   152
        File dest = asFile(props.get("-dest:"));
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   153
        String encoding = props.get("-encoding:");
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   154
        boolean contError = props.containsKey("-continue");
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   155
        ClassReader options = new ClassReader();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   156
        options.copyOptionsFrom(props);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   157
        /*
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   158
        if (dest == null && av.size() > 1) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   159
        dest = File.createTempFile("TestOut", ".dir", new File("."));
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   160
        dest.delete();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   161
        if (!dest.mkdir())
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   162
        throw new RuntimeException("Cannot create "+dest);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   163
        System.out.println("Writing results to "+dest);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   164
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   165
         */
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   166
        if (av.isEmpty()) {
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   167
            av.add("");  //to enter this loop
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   168
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   169
        boolean readList = false;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   170
        for (String a : av) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   171
            if (readList) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   172
                readList = false;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   173
                InputStream fin;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   174
                if (a.equals("-")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   175
                    fin = System.in;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   176
                } else {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   177
                    fin = new FileInputStream(a);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   178
                }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   179
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   180
                BufferedReader files = makeReader(fin, encoding);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   181
                for (String file; (file = files.readLine()) != null;) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   182
                    doFile(file, source, dest, options, encoding, contError);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   183
                }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   184
                if (fin != System.in) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   185
                    fin.close();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   186
                }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   187
            } else if (a.equals("-@")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   188
                readList = true;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   189
            } else if (a.startsWith("-")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   190
                throw new RuntimeException("Bad flag argument: " + a);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   191
            } else if (source.getName().endsWith(".jar")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   192
                doJar(a, source, dest, options, encoding, contError);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   193
            } else {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   194
                doFile(a, source, dest, options, encoding, contError);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   195
            }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   196
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   197
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   198
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   199
    private static File asFile(String str) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   200
        return (str == null) ? null : new File(str);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   201
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   202
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   203
    private static void doFile(String a,
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   204
            File source, File dest,
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   205
            ClassReader options, String encoding,
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   206
            boolean contError) throws IOException  {
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   207
        if (!contError) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   208
            doFile(a, source, dest, options, encoding);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   209
        } else {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   210
            try {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   211
                doFile(a, source, dest, options, encoding);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   212
            } catch (Exception ee) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   213
                System.out.println("Error processing " + source + ": " + ee);
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   214
                ee.printStackTrace();
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   215
            }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   216
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   217
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   218
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   219
    private static void doJar(String a, File source, File dest,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   220
                              ClassReader options, String encoding,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   221
                              Boolean contError) throws IOException {
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   222
        try {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   223
            JarFile jf = new JarFile(source);
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   224
            for (JarEntry je : Collections.list(jf.entries())) {
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   225
                String name = je.getName();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   226
                if (!name.endsWith(".class")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   227
                    continue;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   228
                }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   229
                try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   230
                    doStream(name, jf.getInputStream(je), dest, options, encoding);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   231
                } catch (Exception e) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   232
                    if (contError) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   233
                        System.out.println("Error processing " + source + ": " + e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   234
                        e.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   235
                        continue;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   236
                    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   237
                }
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   238
            }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   239
        } catch (IOException ioe) {
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   240
            throw ioe;
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   241
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   242
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   243
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   244
    private static void doStream(String a, InputStream in, File dest,
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   245
                                 ClassReader options, String encoding) throws IOException {
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   246
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   247
        File f = new File(a);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   248
        ClassReader cr = new ClassReader(options);
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   249
        Element e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   250
        if (options.verbose) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   251
            System.out.println("Reading " + f);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   252
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   253
        e = cr.readFrom(in);
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   254
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   255
        OutputStream out;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   256
        if (dest == null) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   257
            out = System.out;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   258
        } else {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   259
            File outf = new File(dest, f.isAbsolute() ? f.getName() : f.getPath());
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   260
            String outName = outf.getName();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   261
            File outSubdir = outf.getParentFile();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   262
            outSubdir.mkdirs();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   263
            int extPos = outName.lastIndexOf('.');
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   264
            if (extPos > 0) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   265
                outf = new File(outSubdir, outName.substring(0, extPos) + ".xml");
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   266
            }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   267
            out = new FileOutputStream(outf);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   268
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   269
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   270
        Writer outw = makeWriter(out, encoding);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   271
        if (options.pretty || !options.keepOrder) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   272
            e.writePrettyTo(outw);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   273
        } else {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   274
            e.writeTo(outw);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   275
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   276
        if (out == System.out) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   277
            outw.write("\n");
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   278
            outw.flush();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   279
        } else {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   280
            outw.close();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   281
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   282
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   283
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   284
    private static void doFile(String a,
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   285
            File source, File dest,
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   286
            ClassReader options, String encoding) throws IOException {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   287
        File inf = new File(source, a);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   288
        if (dest != null && options.verbose) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   289
            System.out.println("Reading " + inf);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   290
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   291
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   292
        BufferedInputStream in = new BufferedInputStream(new FileInputStream(inf));
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   293
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   294
        doStream(a, in, dest, options, encoding);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   295
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   296
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   297
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   298
    public static BufferedReader makeReader(InputStream in,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   299
                                            String encoding) throws IOException {
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   300
        Reader inw;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   301
        in = new BufferedInputStream(in);  // add buffering
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   302
        if (encoding == null) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   303
            inw = new InputStreamReader(in);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   304
        } else {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   305
            inw = new InputStreamReader(in, encoding);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   306
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   307
        return new BufferedReader(inw);  // add buffering
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   308
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   309
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   310
    public static Writer makeWriter(OutputStream out,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   311
                                    String encoding) throws IOException {
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   312
        Writer outw;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   313
        if (encoding == null) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   314
            outw = new OutputStreamWriter(out);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   315
        } else {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   316
            outw = new OutputStreamWriter(out, encoding);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   317
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   318
        return new BufferedWriter(outw);  // add buffering
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   319
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   320
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   321
    public Element result() {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   322
        return cfile;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   323
    }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   324
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   325
    protected InputStream in;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   326
    protected ByteArrayOutputStream buf = new ByteArrayOutputStream(1024);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   327
    // input options
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   328
    public boolean pretty = false;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   329
    public boolean verbose = false;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   330
    public boolean keepPath = false;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   331
    public boolean keepCP = false;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   332
    public boolean keepBytes = false;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   333
    public boolean parseBytes = true;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   334
    public boolean resolveRefs = true;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   335
    public boolean keepOrder = true;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   336
    public boolean keepSizes = false;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   337
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   338
    public ClassReader() {
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   339
        cfile = new Element("ClassFile");
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   340
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   341
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   342
    public ClassReader(ClassReader options) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   343
        this();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   344
        copyOptionsFrom(options);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   345
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   346
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   347
    public void copyOptionsFrom(ClassReader options) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   348
        pretty = options.pretty;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   349
        verbose = options.verbose;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   350
        keepPath = options.keepPath;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   351
        keepCP = options.keepCP;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   352
        keepOrder = options.keepOrder;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   353
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   354
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   355
    public void copyOptionsFrom(Map<String, String> options) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   356
        if (options.containsKey("-pretty")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   357
            pretty = (options.get("-pretty") != null);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   358
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   359
        if (options.containsKey("-verbose")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   360
            verbose = (options.get("-verbose") != null);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   361
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   362
        if (options.containsKey("-keepPath")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   363
            keepPath = (options.get("-keepPath") != null);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   364
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   365
        if (options.containsKey("-keepCP")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   366
            keepCP = (options.get("-keepCP") != null);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   367
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   368
        if (options.containsKey("-keepOrder")) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   369
            keepOrder = (options.get("-keepOrder") != null);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   370
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   371
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   372
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   373
    protected String getCpString(int i) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   374
        return thePool.get(i);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   375
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   376
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   377
    public Element readFrom(InputStream in) throws IOException {
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   378
        try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   379
            this.in = in;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   380
            ClassFile c = ClassFile.read(in);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   381
            // read the file header
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   382
            if (c.magic != 0xCAFEBABE) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   383
                throw new RuntimeException("bad magic number " +
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   384
                        Integer.toHexString(c.magic));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   385
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   386
            cfile.setAttr("magic", "" + c.magic);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   387
            int minver = c.minor_version;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   388
            int majver = c.major_version;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   389
            cfile.setAttr("minver", "" + minver);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   390
            cfile.setAttr("majver", "" + majver);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   391
            readCP(c);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   392
            readClass(c);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   393
            return result();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   394
        } catch (InvalidDescriptor | ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   395
            throw new IOException("Fatal error", ex);
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   396
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   397
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   398
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   399
    public Element readFrom(File file) throws IOException {
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   400
        try (InputStream strm = new FileInputStream(file)) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   401
            Element e = readFrom(new BufferedInputStream(strm));
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   402
            if (keepPath) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   403
                e.setAttr("path", file.toString());
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   404
            }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   405
            return e;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   406
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   407
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   408
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   409
    private void readClass(ClassFile c) throws IOException,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   410
                                               ConstantPoolException,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   411
                                               InvalidDescriptor {
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   412
        klass = new Element("Class");
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   413
        cfile.add(klass);
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   414
        String thisk = c.getName();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   415
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   416
        klass.setAttr("name", thisk);
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   417
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   418
        AccessFlags af = new AccessFlags(c.access_flags.flags);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   419
        klass.setAttr("flags", flagString(af, klass));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   420
        if (!"java/lang/Object".equals(thisk)) {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   421
            if (c.super_class != 0) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   422
                klass.setAttr("super", c.getSuperclassName());
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
   423
            }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   424
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   425
        for (int i : c.interfaces) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   426
            klass.add(new Element("Interface", "name", getCpString(i)));
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   427
        }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   428
        readFields(c, klass);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   429
        readMethods(c, klass);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   430
        readAttributesFor(c, c.attributes, klass);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   431
        klass.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   432
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   433
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   434
    private void readFields(ClassFile c, Element klass) throws IOException {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   435
        int len = c.fields.length;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   436
        Element fields = new Element(len);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   437
        for (Field f : c.fields) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   438
            Element field = new Element("Field");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   439
            field.setAttr("name", getCpString(f.name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   440
            field.setAttr("type", getCpString(f.descriptor.index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   441
            field.setAttr("flags", flagString(f.access_flags.flags, field));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   442
            readAttributesFor(c, f.attributes, field);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   443
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   444
            field.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   445
            fields.add(field);
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   446
        }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   447
        if (!keepOrder) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   448
            fields.sort();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   449
        }
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   450
        klass.addAll(fields);
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   451
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   452
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   453
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   454
    private void readMethods(ClassFile c, Element klass) throws IOException {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   455
        int len = c.methods.length;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   456
        Element methods = new Element(len);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   457
        for (Method m : c.methods) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   458
            Element member = new Element("Method");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   459
            member.setAttr("name", getCpString(m.name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   460
            member.setAttr("type", getCpString(m.descriptor.index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   461
            member.setAttr("flags", flagString(m.access_flags.flags, member));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   462
            readAttributesFor(c, m.attributes, member);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   463
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   464
            member.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   465
            methods.add(member);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   466
        }
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   467
        if (!keepOrder) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   468
            methods.sort();
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   469
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   470
        klass.addAll(methods);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   471
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   472
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   473
    private AccessFlags.Kind getKind(Element e) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   474
        switch(e.getName()) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   475
            case "Class":
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   476
                return AccessFlags.Kind.Class;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   477
            case "InnerClass":
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   478
                return AccessFlags.Kind.InnerClass;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   479
            case "Field":
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   480
                return AccessFlags.Kind.Field ;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   481
            case "Method":
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   482
                return AccessFlags.Kind.Method;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   483
            default: throw new RuntimeException("should not reach here");
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   484
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   485
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   486
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   487
    protected String flagString(int flags, Element holder) {
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   488
        return flagString(new AccessFlags(flags), holder);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   489
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   490
    protected String flagString(AccessFlags af, Element holder) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   491
        return flagString(af, holder.getName());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   492
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   493
    protected String flagString(int flags, String kind) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   494
        return flagString(new AccessFlags(flags), kind);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   495
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   496
    protected String flagString(AccessFlags af, String kind) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   497
        Set<String> mods = null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   498
        switch (kind) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   499
            case "Class":
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   500
                mods = af.getClassFlags();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   501
                break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   502
            case "InnerClass":
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   503
                mods = af.getInnerClassFlags();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   504
                break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   505
            case "Field":
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   506
                mods = af.getFieldFlags();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   507
                break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   508
            case "Method":
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   509
                mods = af.getMethodFlags();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   510
                break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   511
            default:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   512
                throw new RuntimeException("should not reach here");
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   513
        }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   514
        StringBuilder sb = new StringBuilder();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   515
        for (String x : mods) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   516
            sb.append(x.substring(x.indexOf('_') + 1).toLowerCase()).append(" ");
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   517
        }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   518
        return sb.toString().trim();
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   519
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   520
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   521
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   522
    protected  void readAttributesFor(ClassFile c, Attributes attrs, Element x) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   523
        Element container = new Element();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   524
        AttributeVisitor av = new AttributeVisitor(this, c);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   525
        for (Attribute a : attrs) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   526
            av.visit(a, container);
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   527
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   528
        if (!keepOrder) {
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   529
            container.sort();
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   530
        }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   531
        x.addAll(container);
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   532
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   533
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   534
    private int fileSize = 0;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   535
    private HashMap<String, int[]> attrSizes = new HashMap<>();
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   536
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   537
    private void attachTo(Element x, Object aval0) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   538
        if (aval0 == null) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   539
            return;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   540
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   541
        if (!(aval0 instanceof Element)) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   542
            x.add(aval0);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   543
            return;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   544
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   545
        Element aval = (Element) aval0;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   546
        if (!aval.isAnonymous()) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   547
            x.add(aval);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   548
            return;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   549
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   550
        for (int imax = aval.attrSize(), i = 0; i < imax; i++) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   551
            //%%
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   552
            attachAttrTo(x, aval.getAttrName(i), aval.getAttr(i));
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   553
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   554
        x.addAll(aval);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   555
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   556
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   557
    private void attachAttrTo(Element x, String aname, String aval) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   558
        String aval0 = x.getAttr(aname);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   559
        if (aval0 != null) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   560
            aval = aval0 + " " + aval;
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   561
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   562
        x.setAttr(aname, aval);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   563
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   564
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   565
    private void readCP(ClassFile c) throws IOException {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   566
        cpool = new Element("ConstantPool", c.constant_pool.size());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   567
        ConstantPoolVisitor cpv = new ConstantPoolVisitor(cpool, c,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   568
                c.constant_pool.size());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   569
        for (int i = 1 ; i < c.constant_pool.size() ; i++) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   570
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   571
                cpv.visit(c.constant_pool.get(i), i);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   572
            } catch (InvalidIndex ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   573
                // can happen periodically when accessing doubles etc. ignore it
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   574
                // ex.printStackTrace();
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   575
            }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   576
        }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   577
        thePool = cpv.getPoolList();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   578
        if (verbose) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   579
            for (int i = 0; i < thePool.size(); i++) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   580
                System.out.println("[" + i + "]: " + thePool.get(i));
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   581
            }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   582
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   583
        if (keepCP) {
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   584
            cfile.add(cpool);
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   585
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   586
    }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   587
}
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   588
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   589
class ConstantPoolVisitor implements ConstantPool.Visitor<String, Integer> {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   590
    final List<String> slist;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   591
    final Element xpool;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   592
    final ClassFile cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   593
    final ConstantPool cfpool;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   594
    final List<String> bsmlist;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   595
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   596
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   597
    public ConstantPoolVisitor(Element xpool, ClassFile cf, int size) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   598
        slist = new ArrayList<>(size);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   599
        for (int i = 0 ; i < size; i++) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   600
            slist.add(null);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   601
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   602
        this.xpool = xpool;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   603
        this.cf = cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   604
        this.cfpool = cf.constant_pool;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   605
        bsmlist = readBSM();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   606
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   607
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   608
    public List<String> getPoolList() {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   609
        return Collections.unmodifiableList(slist);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   610
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   611
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   612
    public List<String> getBSMList() {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   613
        return Collections.unmodifiableList(bsmlist);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   614
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   615
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   616
    public String visit(CPInfo c, int index) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   617
        return c.accept(this, index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   618
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   619
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   620
    private List<String> readBSM() {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   621
        BootstrapMethods_attribute bsmAttr =
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   622
                (BootstrapMethods_attribute) cf.getAttribute(Attribute.BootstrapMethods);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   623
        if (bsmAttr != null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   624
            List<String> out =
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   625
                    new ArrayList<>(bsmAttr.bootstrap_method_specifiers.length);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   626
            for (BootstrapMethods_attribute.BootstrapMethodSpecifier bsms :
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   627
                    bsmAttr.bootstrap_method_specifiers) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   628
                int index = bsms.bootstrap_method_ref;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   629
                try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   630
                    String value = slist.get(index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   631
                    String bsmStr = value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   632
                    if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   633
                        value = visit(cfpool.get(index), index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   634
                        slist.set(index, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   635
                    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   636
                    bsmStr = value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   637
                    for (int idx : bsms.bootstrap_arguments) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   638
                        value = slist.get(idx);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   639
                        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   640
                            value = visit(cfpool.get(idx), idx);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   641
                            slist.set(idx, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   642
                        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   643
                        bsmStr = bsmStr.concat("," + value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   644
                    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   645
                    out.add(bsmStr);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   646
                } catch (InvalidIndex ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   647
                    ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   648
                }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   649
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   650
            return out;
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   651
        }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   652
        return new ArrayList<>(0);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   653
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   654
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   655
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   656
    public String visitClass(CONSTANT_Class_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   657
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   658
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   659
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   660
                value = visit(cfpool.get(c.name_index), c.name_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   661
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   662
                xpool.add(new Element("CONSTANT_Class",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   663
                        new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   664
                        value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   665
            } catch (ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   666
                ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   667
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   668
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   669
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   670
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   671
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   672
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   673
    public String visitDouble(CONSTANT_Double_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   674
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   675
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   676
            value = Double.toString(c.value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   677
            slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   678
            xpool.add(new Element("CONSTANT_Double",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   679
                      new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   680
                      value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   681
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   682
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   683
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   684
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   685
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   686
    public String visitFieldref(CONSTANT_Fieldref_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   687
    String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   688
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   689
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   690
                value = visit(cfpool.get(c.class_index), c.class_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   691
                value = value.concat(" " + visit(cfpool.get(c.name_and_type_index),
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   692
                                     c.name_and_type_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   693
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   694
                xpool.add(new Element("CONSTANT_Fieldref",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   695
                          new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   696
                          value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   697
            } catch (ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   698
                ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   699
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   700
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   701
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   702
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   703
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   704
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   705
    public String visitFloat(CONSTANT_Float_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   706
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   707
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   708
            value = Float.toString(c.value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   709
            slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   710
            xpool.add(new Element("CONSTANT_Float",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   711
                      new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   712
                      value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   713
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   714
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   715
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   716
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   717
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   718
    public String visitInteger(CONSTANT_Integer_info cnstnt, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   719
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   720
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   721
            value = Integer.toString(cnstnt.value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   722
            slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   723
            xpool.add(new Element("CONSTANT_Integer",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   724
                      new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   725
                      value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   726
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   727
        return value;
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   728
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   729
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   730
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   731
    public String visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info c,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   732
                                          Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   733
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   734
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   735
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   736
                value = visit(cfpool.get(c.class_index), c.class_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   737
                value = value.concat(" " +
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   738
                                     visit(cfpool.get(c.name_and_type_index),
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   739
                                     c.name_and_type_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   740
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   741
                xpool.add(new Element("CONSTANT_InterfaceMethodref",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   742
                          new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   743
                          value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   744
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   745
            } catch (ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   746
                ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   747
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   748
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   749
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   750
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   751
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   752
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   753
    public String visitInvokeDynamic(CONSTANT_InvokeDynamic_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   754
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   755
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   756
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   757
                value = bsmlist.get(c.bootstrap_method_attr_index) + " "
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   758
                        + visit(cfpool.get(c.name_and_type_index), c.name_and_type_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   759
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   760
                xpool.add(new Element("CONSTANT_InvokeDynamic",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   761
                          new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   762
                          value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   763
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   764
            } catch (ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   765
                ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   766
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   767
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   768
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   769
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   770
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   771
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   772
    public String visitLong(CONSTANT_Long_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   773
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   774
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   775
            value = Long.toString(c.value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   776
            slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   777
            xpool.add(new Element("CONSTANT_Long",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   778
                      new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   779
                      value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   780
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   781
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   782
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   783
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   784
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   785
    public String visitNameAndType(CONSTANT_NameAndType_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   786
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   787
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   788
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   789
                value = visit(cfpool.get(c.name_index), c.name_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   790
                value = value.concat(" " +
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   791
                        visit(cfpool.get(c.type_index), c.type_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   792
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   793
                xpool.add(new Element("CONSTANT_NameAndType",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   794
                          new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   795
                          value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   796
            } catch (InvalidIndex ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   797
                ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   798
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   799
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   800
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   801
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   802
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   803
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   804
    public String visitMethodref(CONSTANT_Methodref_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   805
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   806
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   807
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   808
                value = visit(cfpool.get(c.class_index), c.class_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   809
                value = value.concat(" " +
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   810
                                     visit(cfpool.get(c.name_and_type_index),
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   811
                                     c.name_and_type_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   812
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   813
                xpool.add(new Element("CONSTANT_Methodref",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   814
                          new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   815
                          value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   816
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   817
            } catch (ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   818
                ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   819
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   820
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   821
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   822
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   823
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   824
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   825
    public String visitMethodHandle(CONSTANT_MethodHandle_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   826
    String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   827
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   828
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   829
                value = c.reference_kind.name();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   830
                value = value.concat(" "
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   831
                        + visit(cfpool.get(c.reference_index), c.reference_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   832
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   833
                xpool.add(new Element("CONSTANT_MethodHandle",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   834
                          new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   835
                          value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   836
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   837
            } catch (ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   838
                ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   839
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   840
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   841
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   842
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   843
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   844
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   845
    public String visitMethodType(CONSTANT_MethodType_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   846
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   847
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   848
            try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   849
                value = visit(cfpool.get(c.descriptor_index), c.descriptor_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   850
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   851
                xpool.add(new Element("CONSTANT_MethodType",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   852
                          new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   853
                          value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   854
            } catch (ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   855
                ex.printStackTrace();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   856
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   857
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   858
        return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   859
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   860
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   861
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   862
    public String visitString(CONSTANT_String_info c, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   863
        try {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   864
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   865
            String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   866
            if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   867
                value = c.getString();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   868
                slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   869
                xpool.add(new Element("CONSTANT_String",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   870
                          new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   871
                          value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   872
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   873
            return value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   874
        } catch (ConstantPoolException ex) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   875
            throw new RuntimeException("Fatal error", ex);
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   876
        }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   877
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   878
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   879
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   880
    public String  visitUtf8(CONSTANT_Utf8_info cnstnt, Integer p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   881
        String value = slist.get(p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   882
        if (value == null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   883
            value = cnstnt.value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   884
            slist.set(p, value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   885
            xpool.add(new Element("CONSTANT_Utf8",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   886
                      new String[]{"id", p.toString()},
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   887
                      value));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   888
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   889
        return value;
6314
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   890
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   891
    }
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   892
}
8ab691ddb904 6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
diff changeset
   893
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   894
class AttributeVisitor implements Attribute.Visitor<Element, Element> {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   895
    final ClassFile cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   896
    final ClassReader x;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   897
    final AnnotationsElementVisitor aev;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   898
    final InstructionVisitor iv;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   899
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   900
    public AttributeVisitor(ClassReader x, ClassFile cf) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   901
        this.x = x;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   902
        this.cf = cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   903
        iv =  new InstructionVisitor(x, cf);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   904
        aev = new AnnotationsElementVisitor(x, cf);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   905
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   906
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   907
    public void visit(Attribute a, Element parent) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   908
        a.accept(this, parent);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   909
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   910
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   911
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   912
    public Element visitBootstrapMethods(BootstrapMethods_attribute bm, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   913
        Element e = new Element(x.getCpString(bm.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   914
        for (BootstrapMethods_attribute.BootstrapMethodSpecifier bsm : bm.bootstrap_method_specifiers) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   915
            Element be = new Element("BootstrapMethodSpecifier");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   916
            be.setAttr("ref", x.getCpString(bsm.bootstrap_method_ref));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   917
            if (bsm.bootstrap_arguments.length > 0) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   918
                Element bme = new Element("MethodArguments");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   919
                for (int index : bsm.bootstrap_arguments) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   920
                    bme.add(x.getCpString(index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   921
                }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   922
                bme.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   923
                be.add(bme);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   924
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   925
            be.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   926
            e.add(be);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   927
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   928
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   929
        if (!x.keepOrder) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   930
            e.sort();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   931
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   932
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   933
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   934
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   935
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   936
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   937
    public Element visitDefault(DefaultAttribute da, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   938
        Element e = new Element(x.getCpString(da.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   939
        StringBuilder sb = new StringBuilder();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   940
        for (byte x : da.info) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   941
            sb.append("0x").append(Integer.toHexString(x)).append(" ");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   942
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   943
        e.setAttr("bytes", sb.toString().trim());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   944
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   945
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   946
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   947
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   948
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   949
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   950
    public Element visitAnnotationDefault(AnnotationDefault_attribute ad, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   951
        Element e = new Element(x.getCpString(ad.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   952
        e.setAttr("tag", "" + ad.default_value.tag);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   953
        Element child = aev.visit(ad.default_value, e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   954
        if (child != null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   955
            e.add(child);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   956
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   957
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   958
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   959
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   960
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   961
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   962
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   963
    public Element visitCharacterRangeTable(CharacterRangeTable_attribute crt,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   964
                                            Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   965
        Element e = new Element(x.getCpString(crt.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   966
        for (CharacterRangeTable_attribute.Entry ce : crt.character_range_table) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   967
            e.setAttr("start_pc", "" + ce.start_pc);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   968
            e.setAttr("end_pc", "" + ce.end_pc);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   969
            e.setAttr("range_start", "" + ce.character_range_start);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   970
            e.setAttr("range_end", "" + ce.character_range_end);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   971
            e.setAttr("flags", x.flagString(ce.flags, "Method"));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   972
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   973
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   974
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   975
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   976
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   977
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   978
    private Element instructions(Element code, Code_attribute c) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   979
        Element ielement = new Element("Instructions");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   980
        for (Instruction ins : c.getInstructions()) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   981
            ielement.add(iv.visit(ins));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   982
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   983
        ielement.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   984
        return ielement;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   985
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   986
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   987
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   988
    public Element visitCode(Code_attribute c, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   989
        Element e = null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   990
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   991
        e = new Element(x.getCpString(c.attribute_name_index),
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   992
                "stack", "" + c.max_stack,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   993
                "local", "" + c.max_locals);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   994
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   995
        e.add(instructions(e, c));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   996
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   997
        for (Code_attribute.Exception_data edata : c.exception_table) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   998
            e.add(new Element("Handler",
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
   999
                    "start", "" + edata.start_pc,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1000
                    "end", "" + edata.end_pc,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1001
                    "catch", "" + edata.handler_pc,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1002
                    "class", x.getCpString(edata.catch_type)));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1003
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1004
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1005
        this.x.readAttributesFor(cf, c.attributes, e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1006
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1007
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1008
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1009
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1010
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1011
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1012
    public Element visitCompilationID(CompilationID_attribute cid, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1013
        Element e = new Element(x.getCpString(cid.attribute_name_index),
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1014
                x.getCpString(cid.compilationID_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1015
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1016
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1017
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1018
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1019
    @Override
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1020
    public Element visitModulePackages(ModulePackages_attribute attr, Element p) {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1021
        Element e = new Element(x.getCpString(attr.attribute_name_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1022
        for (int i : attr.packages_index) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1023
            Element ee = new Element("Package");
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1024
            String pkg = x.getCpString(i);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1025
            ee.setAttr("package", pkg);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1026
            e.add(ee);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1027
        }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1028
        e.trimToSize();
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1029
        e.sort();
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1030
        p.add(e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1031
        return null;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1032
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1033
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1034
    @Override
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1035
    public Element visitConstantValue(ConstantValue_attribute cv, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1036
        Element e = new Element(x.getCpString(cv.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1037
        e.add(x.getCpString(cv.constantvalue_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1038
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1039
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1040
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1041
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1042
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1043
    public Element visitDeprecated(Deprecated_attribute d, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1044
        Element e = new Element(x.getCpString(d.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1045
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1046
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1047
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1048
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1049
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1050
    public Element visitEnclosingMethod(EnclosingMethod_attribute em, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1051
        Element e = new Element(x.getCpString(em.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1052
        e.setAttr("class", x.getCpString(em.class_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1053
        e.setAttr("desc", x.getCpString(em.method_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1054
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1055
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1056
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1057
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1058
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1059
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1060
    public Element visitExceptions(Exceptions_attribute e, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1061
        Element ee = new Element(x.getCpString(e.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1062
        for (int idx : e.exception_index_table) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1063
            Element n = new Element("Item");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1064
            n.setAttr("class", x.getCpString(idx));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1065
            ee.add(n);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1066
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1067
        ee.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1068
        p.add(ee);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1069
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1070
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1071
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1072
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1073
    public Element visitInnerClasses(InnerClasses_attribute ic, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1074
        for (Info info : ic.classes) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1075
            Element e = new Element(x.getCpString(ic.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1076
            e.setAttr("class", x.getCpString(info.inner_class_info_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1077
            e.setAttr("outer", x.getCpString(info.outer_class_info_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1078
            e.setAttr("name", x.getCpString(info.inner_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1079
            e.setAttr("flags", x.flagString(info.inner_class_access_flags,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1080
                    "InnerClass"));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1081
            e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1082
            p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1083
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1084
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1085
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1086
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1087
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1088
    public Element visitLineNumberTable(LineNumberTable_attribute lnt, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1089
        String name = x.getCpString(lnt.attribute_name_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1090
        for (LineNumberTable_attribute.Entry e : lnt.line_number_table) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1091
            Element l = new Element(name);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1092
            l.setAttr("bci", "" + e.start_pc);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1093
            l.setAttr("line", "" + e.line_number);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1094
            l.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1095
            p.add(l);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1096
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1097
        return null; // already added to parent
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1098
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1099
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1100
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1101
    public Element visitLocalVariableTable(LocalVariableTable_attribute lvt,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1102
                                                Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1103
        String name = x.getCpString(lvt.attribute_name_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1104
        for (LocalVariableTable_attribute.Entry e : lvt.local_variable_table) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1105
            Element l = new Element(name);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1106
            l.setAttr("bci", "" + e.start_pc);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1107
            l.setAttr("span", "" + e.length);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1108
            l.setAttr("name", x.getCpString(e.name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1109
            l.setAttr("type", x.getCpString(e.descriptor_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1110
            l.setAttr("slot", "" + e.index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1111
            l.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1112
            p.add(l);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1113
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1114
        return null; // already added to parent
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1115
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1116
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1117
    private void parseModuleRequires(RequiresEntry[] res, Element p) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1118
        for (RequiresEntry re : res) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1119
            Element er = new Element("Requires");
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1120
            er.setAttr("module", x.getCpString(re.requires_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1121
            er.setAttr("flags", Integer.toString(re.requires_flags));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1122
            p.add(er);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1123
        }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1124
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1125
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1126
    private void parseModuleExports(ExportsEntry[] exports, Element p) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1127
        Element ex = new Element("Exports");
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1128
        for (ExportsEntry export : exports) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1129
            Element exto = new Element("exports");
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1130
            exto.setAttr("package", x.getCpString(export.exports_index));
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1131
            for (int idx : export.exports_to_index) {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1132
                exto.setAttr("module", x.getCpString(idx));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1133
            }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1134
            ex.add(exto);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1135
        }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1136
        p.add(ex);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1137
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1138
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1139
    private void parseModuleProvides(ProvidesEntry[] provides, Element p) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1140
        Element ex = new Element("Provides");
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1141
        for (ProvidesEntry provide : provides) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1142
            ex.setAttr("provides", x.getCpString(provide.provides_index));
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1143
            for (int idx : provide.with_index) {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1144
                ex.setAttr("with", x.getCpString(idx));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1145
            }
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1146
        }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1147
        p.add(ex);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1148
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1149
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1150
    @Override
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1151
    public Element visitModule(Module_attribute m, Element p) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1152
        Element e = new Element(x.getCpString(m.attribute_name_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1153
        parseModuleRequires(m.requires, e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1154
        parseModuleExports(m.exports, e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1155
        for (int idx : m.uses_index) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1156
            Element ei = new Element("Uses");
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1157
            ei.setAttr("used_class", x.getCpString(idx));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1158
            e.add(ei);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1159
        }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1160
        parseModuleProvides(m.provides, e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1161
        p.add(e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1162
        return null;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1163
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1164
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1165
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1166
    public Element visitLocalVariableTypeTable(LocalVariableTypeTable_attribute lvtt,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1167
                                                    Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1168
        String name = x.getCpString(lvtt.attribute_name_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1169
        for (LocalVariableTypeTable_attribute.Entry e : lvtt.local_variable_table) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1170
            Element l = new Element(name);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1171
            l.setAttr("bci", "" + e.start_pc);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1172
            l.setAttr("span", "" + e.length);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1173
            l.setAttr("name", x.getCpString(e.name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1174
            l.setAttr("type", x.getCpString(e.signature_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1175
            l.setAttr("slot", "" + e.index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1176
            l.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1177
            p.add(l);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1178
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1179
        return null; // already added to parent
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1180
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1181
15261
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1182
    @Override
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1183
    public Element visitMethodParameters(MethodParameters_attribute mp, Element p) {
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1184
        String name = x.getCpString(mp.attribute_name_index);
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1185
        for (MethodParameters_attribute.Entry e : mp.method_parameter_table) {
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1186
            Element l = new Element(name);
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1187
            l.setAttr("name", x.getCpString(e.name_index));
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1188
            l.setAttr("flag", "" + e.flags);
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1189
            l.trimToSize();
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1190
            p.add(l);
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1191
        }
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1192
        return null; // already added to parent
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1193
    }
17490
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1194
    private void parseAnnotation(Annotation anno, Element p) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1195
        Element ea = new Element("Annotation");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1196
        ea.setAttr("name", "" + x.getCpString(anno.type_index));
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1197
        for (Annotation.element_value_pair evp : anno.element_value_pairs) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1198
            Element evpe = new Element("Element");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1199
            evpe.setAttr("tag", "" + evp.value.tag);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1200
            evpe.setAttr("value", x.getCpString(evp.element_name_index));
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1201
            Element child = aev.visit(evp.value, evpe);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1202
            if (child != null) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1203
                evpe.add(child);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1204
            }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1205
            ea.add(evpe);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1206
        }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1207
        ea.trimToSize();
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1208
        p.add(ea);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1209
    }
15261
c5b882836677 8005252: pack200 should support MethodParameters
ksrini
parents: 12544
diff changeset
  1210
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1211
    private void parseAnnotations(Annotation[] ra, Element p) {
17490
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1212
        for (Annotation anno : ra) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1213
            parseAnnotation(anno, p);
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1214
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1215
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1216
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1217
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1218
    public Element visitRuntimeVisibleAnnotations(RuntimeVisibleAnnotations_attribute rva,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1219
                                                  Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1220
        Element e = new Element(x.getCpString(rva.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1221
        parseAnnotations(rva.annotations, e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1222
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1223
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1224
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1225
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1226
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1227
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1228
    public Element visitRuntimeInvisibleAnnotations(RuntimeInvisibleAnnotations_attribute ria,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1229
                                                    Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1230
        Element e = new Element(x.getCpString(ria.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1231
        parseAnnotations(ria.annotations, e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1232
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1233
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1234
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1235
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1236
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1237
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1238
    public Element visitRuntimeVisibleParameterAnnotations(RuntimeVisibleParameterAnnotations_attribute rvpa,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1239
                                                           Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1240
        Element e = new Element(x.getCpString(rvpa.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1241
        for (Annotation[] pa : rvpa.parameter_annotations) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1242
           parseAnnotations(pa, e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1243
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1244
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1245
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1246
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1247
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1248
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1249
    public Element visitRuntimeInvisibleParameterAnnotations(RuntimeInvisibleParameterAnnotations_attribute ripa,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1250
                                                             Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1251
        Element e = new Element(x.getCpString(ripa.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1252
        for (Annotation[] pa : ripa.parameter_annotations) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1253
            parseAnnotations(pa, e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1254
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1255
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1256
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1257
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1258
17490
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1259
    private void parsePosition(Position ap, Element p) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1260
        Element te = new Element();
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1261
        switch (ap.type) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1262
            case CLASS_TYPE_PARAMETER: // 0x00
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1263
                te.setName("CLASS_TYPE_PARAMETER");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1264
                te.setAttr("idx", "" + ap.parameter_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1265
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1266
            case METHOD_TYPE_PARAMETER: // 0x01
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1267
                te.setName("METHOD_TYPE_PARAMETER");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1268
                te.setAttr("idx", "" + ap.parameter_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1269
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1270
            case CLASS_EXTENDS: // 0x10
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1271
                te.setName("CLASS_EXTENDS");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1272
                te.setAttr("idx", "" + ap.type_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1273
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1274
            case CLASS_TYPE_PARAMETER_BOUND: // 0x11
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1275
                te.setName("CLASS_TYPE_PARAMETER_BOUND");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1276
                te.setAttr("idx1", "" + ap.parameter_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1277
                te.setAttr("idx2", "" + ap.bound_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1278
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1279
            case METHOD_TYPE_PARAMETER_BOUND: // 0x12
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1280
                te.setName("METHOD_TYPE_PARAMETER_BOUND");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1281
                te.setAttr("idx1", "" + ap.parameter_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1282
                te.setAttr("idx2", "" + ap.bound_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1283
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1284
            case FIELD: // 0x13
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1285
                te.setName("FIELD");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1286
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1287
            case METHOD_RETURN: // 0x14
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1288
                te.setName("METHOD_RETURN");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1289
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1290
            case METHOD_RECEIVER: // 0x15
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1291
                te.setName("METHOD_RECEIVER");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1292
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1293
            case METHOD_FORMAL_PARAMETER: // 0x16
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1294
                te.setName("METHOD_FORMAL_PARAMETER");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1295
                te.setAttr("idx", "" + ap.parameter_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1296
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1297
            case THROWS: // 0x17
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1298
                te.setName("THROWS");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1299
                te.setAttr("idx", "" + ap.type_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1300
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1301
            case LOCAL_VARIABLE: // 0x40
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1302
                te.setName("LOCAL_VARIABLE");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1303
                for (int i = 0; i < ap.lvarIndex.length; i++) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1304
                    te.setAttr("lvar_idx_" + i, "" + ap.lvarIndex[i]);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1305
                    te.setAttr("lvar_len_" + i, "" + ap.lvarLength[i]);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1306
                    te.setAttr("lvar_off_" + i, "" + ap.lvarOffset[i]);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1307
                }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1308
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1309
            case RESOURCE_VARIABLE: // 0x41
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1310
                te.setName("RESOURCE_VARIABLE");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1311
                for (int i = 0; i < ap.lvarIndex.length ; i++) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1312
                    te.setAttr("lvar_idx_" + i, "" + ap.lvarIndex[i]);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1313
                    te.setAttr("lvar_len_" + i, "" + ap.lvarLength[i]);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1314
                    te.setAttr("lvar_off_" + i, "" + ap.lvarOffset[i]);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1315
                }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1316
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1317
            case EXCEPTION_PARAMETER: // 0x42
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1318
                te.setName("EXCEPTION_PARAMETER");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1319
                te.setAttr("idx", "" + ap.exception_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1320
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1321
            case INSTANCEOF: // 0x43
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1322
                te.setName("INSTANCE_OF");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1323
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1324
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1325
            case NEW: // 0x44
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1326
                te.setName("NEW");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1327
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1328
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1329
            case CONSTRUCTOR_REFERENCE: // 0x45
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1330
                te.setName("CONSTRUCTOR_REFERENCE_RECEIVER");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1331
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1332
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1333
            case METHOD_REFERENCE: // 0x46
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1334
                te.setName("METHOD_REFERENCE_RECEIVER");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1335
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1336
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1337
            case CAST: // 0x47
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1338
                te.setName("CAST");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1339
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1340
                te.setAttr("idx", "" + ap.type_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1341
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1342
            case CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT: // 0x48
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1343
                te.setName("CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1344
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1345
                te.setAttr("idx", "" + ap.type_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1346
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1347
            case METHOD_INVOCATION_TYPE_ARGUMENT: // 0x49
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1348
                te.setName("METHOD_INVOCATION_TYPE_ARGUMENT");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1349
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1350
                te.setAttr("idx", "" + ap.type_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1351
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1352
            case CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT: // 0x4A
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1353
                te.setName("CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1354
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1355
                te.setAttr("idx", "" + ap.type_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1356
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1357
            case METHOD_REFERENCE_TYPE_ARGUMENT: // 0x4B
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1358
                te.setName("METHOD_REFERENCE_TYPE_ARGUMENT");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1359
                te.setAttr("off", "" + ap.offset);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1360
                te.setAttr("idx", "" + ap.type_index);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1361
                break;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1362
            default:
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1363
                throw new RuntimeException("not implemented");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1364
        }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1365
        te.trimToSize();
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1366
        p.add(te);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1367
    }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1368
    private void parseTypeAnnotations(TypeAnnotation pa, Element p) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1369
        Element pta = new Element("RuntimeVisibleTypeAnnotation");
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1370
        p.add(pta);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1371
        Position pos = pa.position;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1372
        parsePosition(pos, pta);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1373
        parseAnnotation(pa.annotation, pta);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1374
    }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1375
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1376
    @Override
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1377
    public Element visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute rvta, Element p) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1378
        Element e = new Element(x.getCpString(rvta.attribute_name_index));
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1379
        for (TypeAnnotation pa : rvta.annotations) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1380
            parseTypeAnnotations(pa, e);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1381
        }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1382
        e.sort();
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1383
        p.add(e);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1384
        return null;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1385
    }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1386
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1387
    @Override
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1388
    public Element visitRuntimeInvisibleTypeAnnotations(RuntimeInvisibleTypeAnnotations_attribute rita, Element p) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1389
        Element e = new Element(x.getCpString(rita.attribute_name_index));
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1390
        for (TypeAnnotation pa : rita.annotations) {
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1391
            parseTypeAnnotations(pa, e);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1392
        }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1393
        e.sort();
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1394
        p.add(e);
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1395
        return null;
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1396
    }
46864558d068 8001163: [pack200] should support attributes introduced by JSR-308
ksrini
parents: 15526
diff changeset
  1397
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1398
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1399
    public Element visitSignature(Signature_attribute s, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1400
        String aname = x.getCpString(s.attribute_name_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1401
        String sname = x.getCpString(s.signature_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1402
        Element se = new Element(aname);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1403
        se.add(sname);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1404
        se.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1405
        p.add(se);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1406
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1407
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1408
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1409
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1410
    public Element visitSourceDebugExtension(SourceDebugExtension_attribute sde,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1411
                                                Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1412
        String aname = x.getCpString(sde.attribute_name_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1413
        Element se = new Element(aname);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1414
        se.setAttr("val", sde.getValue());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1415
        se.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1416
        p.add(se);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1417
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1418
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1419
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1420
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1421
    public Element visitSourceFile(SourceFile_attribute sf, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1422
        String aname = x.getCpString(sf.attribute_name_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1423
        String sname = x.getCpString(sf.sourcefile_index);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1424
        Element se = new Element(aname);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1425
        se.add(sname);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1426
        se.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1427
        p.add(se);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1428
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1429
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1430
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1431
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1432
    public Element visitSourceID(SourceID_attribute sid, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1433
        Element e = new Element(x.getCpString(sid.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1434
        e.add(x.getCpString(sid.sourceID_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1435
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1436
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1437
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1438
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1439
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1440
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1441
    public Element visitStackMap(StackMap_attribute sm, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1442
        throw new UnsupportedOperationException("Not supported yet.");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1443
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1444
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1445
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1446
    public Element visitStackMapTable(StackMapTable_attribute smt, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1447
        Element stackmap = new Element(x.getCpString(smt.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1448
        for (StackMapTable_attribute.stack_map_frame f : smt.entries) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1449
           StackMapVisitor smv = new StackMapVisitor(x, cf, stackmap);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1450
           stackmap.add(smv.visit(f));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1451
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1452
        stackmap.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1453
        p.add(stackmap);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1454
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1455
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1456
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1457
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1458
    public Element visitSynthetic(Synthetic_attribute s, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1459
        Element e = new Element(x.getCpString(s.attribute_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1460
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1461
        p.add(e);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1462
        return null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1463
    }
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1464
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1465
    @Override
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1466
    public Element visitModuleHashes(ModuleHashes_attribute attr, Element p) {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1467
        Element e = new Element(x.getCpString(attr.attribute_name_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1468
        e.setAttr("Algorithm", x.getCpString(attr.algorithm_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1469
        for (Entry entry : attr.hashes_table) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1470
            Element ee = new Element("Entry");
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1471
            String mn = x.getCpString(entry.module_name_index);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1472
            ee.setAttr("module_name", mn);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1473
            ee.setAttr("hash_length", "" + entry.hash.length);
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1474
            StringBuilder sb = new StringBuilder();
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1475
            for (byte b: entry.hash) {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1476
                sb.append(String.format("%02x", b & 0xff));
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1477
            }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1478
            ee.setAttr("hash", sb.toString());
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1479
            ee.trimToSize();
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1480
            e.add(ee);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1481
        }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1482
        e.trimToSize();
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1483
        e.sort();
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1484
        p.add(e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1485
        return null;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1486
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1487
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1488
    @Override
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1489
    public Element visitModuleMainClass(ModuleMainClass_attribute attr, Element p) {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1490
        Element e = new Element(x.getCpString(attr.attribute_name_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1491
        e.add(x.getCpString(attr.main_class_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1492
        e.trimToSize();
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1493
        p.add(e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1494
        return null;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1495
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1496
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1497
    @Override
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1498
    public Element visitModuleTarget(ModuleTarget_attribute attr, Element p) {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1499
        Element e = new Element(x.getCpString(attr.attribute_name_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1500
        e.add(x.getCpString(attr.os_name_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1501
        e.add(x.getCpString(attr.os_arch_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1502
        e.add(x.getCpString(attr.os_version_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1503
        e.trimToSize();
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1504
        p.add(e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1505
        return null;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1506
    }
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1507
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1508
    @Override
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1509
    public Element visitModuleVersion(ModuleVersion_attribute attr, Element p) {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1510
        Element e = new Element(x.getCpString(attr.attribute_name_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1511
        e.add(x.getCpString(attr.version_index));
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1512
        e.trimToSize();
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1513
        p.add(e);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1514
        return null;
9d0388c6b336 8142968: Module System implementation
alanb
parents: 17490
diff changeset
  1515
    }
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1516
}
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1517
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1518
class StackMapVisitor implements StackMapTable_attribute.stack_map_frame.Visitor<Element, Void> {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1519
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1520
    final ClassFile cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1521
    final ClassReader x;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1522
    final Element parent;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1523
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1524
    public StackMapVisitor(ClassReader x, ClassFile cf, Element parent) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1525
        this.x = x;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1526
        this.cf = cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1527
        this.parent = parent;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1528
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1529
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1530
    public Element visit(StackMapTable_attribute.stack_map_frame frame) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1531
        return frame.accept(this, null);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1532
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1533
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1534
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1535
    public Element visit_same_frame(same_frame sm_frm, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1536
        Element e = new Element("SameFrame");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1537
        e.setAttr("tag", "" + sm_frm.frame_type);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1538
        return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1539
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1540
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1541
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1542
    public Element visit_same_locals_1_stack_item_frame(same_locals_1_stack_item_frame s, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1543
        Element e = new Element("SameLocals1StackItemFrame");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1544
        e.setAttr("tag", "" + s.frame_type);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1545
        e.addAll(getVerificationTypeInfo("Stack", s.stack));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1546
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1547
        return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1548
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1549
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1550
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1551
    public Element visit_same_locals_1_stack_item_frame_extended(same_locals_1_stack_item_frame_extended s, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1552
        Element e = new Element("SameLocals1StackItemFrameExtended");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1553
        e.setAttr("tag", "" + s.frame_type);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1554
        e.addAll(getVerificationTypeInfo("Stack", s.stack));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1555
        e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1556
        return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1557
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1558
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1559
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1560
    public Element visit_chop_frame(chop_frame c, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1561
        Element e = new Element("Chop" + (251 - c.frame_type));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1562
        e.setAttr("tag", "" + c.frame_type);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1563
        e.setAttr("offset", "" + c.offset_delta);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1564
        return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1565
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1566
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1567
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1568
    public Element visit_same_frame_extended(same_frame_extended s, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1569
        Element e = new Element("SameFrameExtended");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1570
        e.setAttr("tag", "" + s.frame_type);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1571
        e.setAttr("offset", "" + s.offset_delta);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1572
        return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1573
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1574
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1575
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1576
    public Element visit_append_frame(append_frame a, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1577
       Element e = new Element("AppendFrame" + (a.frame_type - 251));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1578
       e.setAttr("tag", "" + a.frame_type);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1579
       e.addAll(getVerificationTypeInfo("Local", a.locals));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1580
       e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1581
       return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1582
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1583
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1584
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1585
    public Element visit_full_frame(full_frame fl_frm, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1586
         Element e = new Element("FullFrame");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1587
         e.setAttr("tag", "" + fl_frm.frame_type);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1588
         e.addAll(getVerificationTypeInfo("Local", fl_frm.locals));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1589
         e.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1590
         return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1591
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1592
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1593
    private Element getVerificationTypeInfo(String kind,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1594
            StackMapTable_attribute.verification_type_info velems[]) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1595
        Element container = new Element(velems.length);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1596
        for (StackMapTable_attribute.verification_type_info v : velems) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1597
            Element ve = null;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1598
            int offset = 0;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1599
            int index = 0;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1600
            switch (v.tag) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1601
                case StackMapTable_attribute.verification_type_info.ITEM_Top:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1602
                    ve = new Element("ITEM_Top");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1603
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1604
                case StackMapTable_attribute.verification_type_info.ITEM_Integer:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1605
                    ve = new Element("ITEM_Integer");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1606
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1607
                case StackMapTable_attribute.verification_type_info.ITEM_Float:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1608
                    ve = new Element("ITEM_Float");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1609
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1610
                case StackMapTable_attribute.verification_type_info.ITEM_Long:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1611
                    ve = new Element("ITEM_Long");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1612
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1613
                case StackMapTable_attribute.verification_type_info.ITEM_Double:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1614
                    ve = new Element("ITEM_Double");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1615
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1616
                case StackMapTable_attribute.verification_type_info.ITEM_Null:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1617
                    ve = new Element("ITEM_Null");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1618
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1619
                case StackMapTable_attribute.verification_type_info.ITEM_Uninitialized:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1620
                    ve = new Element("ITEM_Uninitialized");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1621
                    offset = ((StackMapTable_attribute.Uninitialized_variable_info) v).offset;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1622
                    ve.setAttr("offset", "" + offset);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1623
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1624
                case StackMapTable_attribute.verification_type_info.ITEM_UninitializedThis:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1625
                    ve = new Element("ITEM_UnitializedtThis");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1626
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1627
                case StackMapTable_attribute.verification_type_info.ITEM_Object:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1628
                    ve = new Element("ITEM_Object");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1629
                    index = ((StackMapTable_attribute.Object_variable_info) v).cpool_index;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1630
                    ve.setAttr("class", x.getCpString(index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1631
                    break;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1632
                default:
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1633
                    ve = new Element("Unknown");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1634
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1635
            Element kindE = new Element(kind);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1636
            kindE.setAttr("tag", "" + v.tag);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1637
            container.add(kindE);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1638
            kindE.add(ve);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1639
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1640
        container.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1641
        return container;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1642
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1643
}
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1644
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1645
class InstructionVisitor implements Instruction.KindVisitor<Element, Void> {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1646
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1647
    final ClassReader x;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1648
    final ClassFile cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1649
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1650
    public InstructionVisitor(ClassReader x, ClassFile cf) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1651
        this.x = x;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1652
        this.cf = cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1653
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1654
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1655
    public Element visit(Instruction i) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1656
        Element ie =  i.accept(this, null);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1657
        ie.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1658
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1659
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1660
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1661
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1662
    public Element visitNoOperands(Instruction i, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1663
        Opcode o = i.getOpcode();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1664
        Element e = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1665
        if (o.opcode > 0xab && o.opcode <= 0xb1) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1666
            e.setAttr("pc", "" + i.getPC());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1667
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1668
        return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1669
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1670
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1671
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1672
    public Element visitArrayType(Instruction i, TypeKind tk, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1673
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1674
        ie.setAttr("num", "" + tk.value);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1675
        ie.setAttr("val", tk.name);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1676
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1677
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1678
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1679
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1680
    public Element visitBranch(Instruction i, int i1, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1681
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1682
        ie.setAttr("lab", "" + (i.getPC() + i1));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1683
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1684
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1685
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1686
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1687
    public Element visitConstantPoolRef(Instruction i, int i1, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1688
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1689
        ie.setAttr("ref", x.getCpString(i1));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1690
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1691
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1692
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1693
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1694
    public Element visitConstantPoolRefAndValue(Instruction i, int i1, int i2, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1695
        // workaround for a potential bug in classfile
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1696
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1697
        if (i.getOpcode().equals(Opcode.IINC_W)) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1698
            ie.setAttr("loc", "" + i1);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1699
            ie.setAttr("num", "" + i2);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1700
        } else {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1701
            ie.setAttr("ref", x.getCpString(i1));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1702
            ie.setAttr("val", "" + i2);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1703
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1704
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1705
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1706
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1707
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1708
    public Element visitLocal(Instruction i, int i1, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1709
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1710
        ie.setAttr("loc", "" + i1);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1711
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1712
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1713
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1714
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1715
    public Element visitLocalAndValue(Instruction i, int i1, int i2, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1716
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1717
        ie.setAttr("loc", "" + i1);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1718
        ie.setAttr("num", "" + i2);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1719
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1720
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1721
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1722
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1723
    public Element visitLookupSwitch(Instruction i, int i1, int i2, int[] ints,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1724
                                     int[] ints1, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1725
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1726
        int pc = i.getPC();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1727
        ie.setAttr("lab", "" + (pc + i1));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1728
        for (int k = 0 ; k < i2 ; k++) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1729
            Element c = new Element("Case");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1730
            c.setAttr("num", "" + (ints[k]));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1731
            c.setAttr("lab", "" + (pc + ints1[k]));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1732
            c.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1733
            ie.add(c);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1734
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1735
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1736
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1737
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1738
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1739
    public Element visitTableSwitch(Instruction i, int i1, int i2, int i3,
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1740
                                    int[] ints, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1741
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1742
        int pc = i.getPC();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1743
        ie.setAttr("lab", "" + (pc + i1));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1744
        for (int k : ints) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1745
            Element c = new Element("Case");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1746
            c.setAttr("num", "" + (k + i2));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1747
            c.setAttr("lab", "" + (pc + k));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1748
            c.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1749
            ie.add(c);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1750
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1751
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1752
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1753
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1754
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1755
    public Element visitValue(Instruction i, int i1, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1756
        Element ie = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1757
        ie.setAttr("num", "" + i1);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1758
        return ie;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1759
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1760
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1761
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1762
    public Element visitUnknown(Instruction i, Void p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1763
        Element e = new Element(i.getMnemonic());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1764
        e.setAttr("pc", "" + i.getPC());
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1765
        e.setAttr("opcode", "" + i.getOpcode().opcode);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1766
        return e;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1767
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1768
}
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1769
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1770
class AnnotationsElementVisitor implements Annotation.element_value.Visitor<Element, Element> {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1771
    final ClassReader x;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1772
    final ClassFile cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1773
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1774
    public AnnotationsElementVisitor(ClassReader x, ClassFile cf) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1775
        this.x = x;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1776
        this.cf = cf;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1777
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1778
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1779
    public Element visit(Annotation.element_value v, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1780
        return v.accept(this, p);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1781
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1782
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1783
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1784
    public Element visitPrimitive(Primitive_element_value e, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1785
        Element el = new Element("String");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1786
        el.setAttr("val", x.getCpString(e.const_value_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1787
        el.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1788
        return el;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1789
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1790
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1791
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1792
    public Element visitEnum(Enum_element_value e, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1793
        Element el = new Element("Enum");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1794
        el.setAttr("name", x.getCpString(e.const_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1795
        el.setAttr("type", x.getCpString(e.type_name_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1796
        el.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1797
        return el;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1798
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1799
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1800
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1801
    public Element visitClass(Class_element_value c, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1802
        Element el = new Element("Class");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1803
        el.setAttr("name", x.getCpString(c.class_info_index));
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1804
        el.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1805
        return el;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1806
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1807
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1808
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1809
    public Element visitAnnotation(Annotation_element_value a, Element p) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1810
        Element el = new Element("Annotation");
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1811
        Annotation anno = a.annotation_value;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1812
        for (Annotation.element_value_pair evp : anno.element_value_pairs) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1813
            Element child = visit(evp.value, el);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1814
            if (child != null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1815
                el.add(child);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1816
            }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1817
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1818
        el.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1819
        return el;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1820
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1821
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1822
    @Override
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1823
    public Element visitArray(Array_element_value a, Element p) {
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 36511
diff changeset
  1824
        Element el = new Element("Array");
12544
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1825
        for (Annotation.element_value v : a.values) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1826
           Element child = visit(v, el);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1827
           if (child != null) {
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1828
               el.add(child);
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1829
           }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1830
        }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1831
        el.trimToSize();
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1832
        return el;
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1833
    }
5768f2e096de 6981776: Pack200 must support -target 7 bytecodes
ksrini
parents: 6314
diff changeset
  1834
}