src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/JavaClass.java
author joehw
Wed, 26 Jun 2019 05:49:59 +0000
changeset 55496 8e0ae3830fca
parent 47216 71c04702a3d5
permissions -rw-r--r--
8224157: BCEL: update to version 6.3.1 Reviewed-by: dfuchs, lancea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6
7f561c08de6b Initial load
duke
parents:
diff changeset
     1
/*
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
     2
 * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
6
7f561c08de6b Initial load
duke
parents:
diff changeset
     3
 */
44797
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
     4
/*
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
     5
 * Licensed to the Apache Software Foundation (ASF) under one or more
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
     6
 * contributor license agreements.  See the NOTICE file distributed with
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
     7
 * this work for additional information regarding copyright ownership.
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
     8
 * The ASF licenses this file to You under the Apache License, Version 2.0
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
     9
 * (the "License"); you may not use this file except in compliance with
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    10
 * the License.  You may obtain a copy of the License at
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    11
 *
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    12
 *      http://www.apache.org/licenses/LICENSE-2.0
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    13
 *
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    14
 * Unless required by applicable law or agreed to in writing, software
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    15
 * distributed under the License is distributed on an "AS IS" BASIS,
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    17
 * See the License for the specific language governing permissions and
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    18
 * limitations under the License.
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 25868
diff changeset
    19
 */
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    20
package com.sun.org.apache.bcel.internal.classfile;
7f561c08de6b Initial load
duke
parents:
diff changeset
    21
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    22
import java.io.ByteArrayOutputStream;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    23
import java.io.DataOutputStream;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    24
import java.io.File;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    25
import java.io.FileOutputStream;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    26
import java.io.IOException;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    27
import java.io.OutputStream;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    28
import java.util.ArrayList;
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    29
import java.util.Objects;
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    30
import java.util.StringTokenizer;
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    31
import java.util.List;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    32
import java.util.Set;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    33
import java.util.TreeSet;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    34
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    35
import com.sun.org.apache.bcel.internal.Const;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    36
import com.sun.org.apache.bcel.internal.generic.Type;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    37
import com.sun.org.apache.bcel.internal.util.BCELComparator;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    38
import com.sun.org.apache.bcel.internal.util.ClassQueue;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    39
import com.sun.org.apache.bcel.internal.util.SyntheticRepository;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    40
7f561c08de6b Initial load
duke
parents:
diff changeset
    41
/**
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    42
 * Represents a Java class, i.e., the data structures, constant pool, fields,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    43
 * methods and commands contained in a Java .class file. See <a
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    44
 * href="http://docs.oracle.com/javase/specs/">JVM specification</a> for
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    45
 * details. The intent of this class is to represent a parsed or otherwise
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    46
 * existing class file. Those interested in programatically generating classes
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    47
 * should see the <a href="../generic/ClassGen.html">ClassGen</a> class.
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    48
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    49
 * @version $Id$
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    50
 * @see com.sun.org.apache.bcel.internal.generic.ClassGen
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    51
 * @LastModified: Jun 2019
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    52
 */
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    53
public class JavaClass extends AccessFlags implements Cloneable, Node, Comparable<JavaClass> {
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    54
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    55
    private String file_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    56
    private String package_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    57
    private String source_file_name = "<Unknown>";
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    58
    private int class_name_index;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    59
    private int superclass_name_index;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    60
    private String class_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    61
    private String superclass_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    62
    private int major;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    63
    private int minor; // Compiler version
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    64
    private ConstantPool constant_pool; // Constant pool
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    65
    private int[] interfaces; // implemented interfaces
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    66
    private String[] interface_names;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    67
    private Field[] fields; // Fields, i.e., variables of class
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    68
    private Method[] methods; // methods defined in the class
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    69
    private Attribute[] attributes; // attributes defined in the class
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    70
    private AnnotationEntry[] annotations;   // annotations defined on the class
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    71
    private byte source = HEAP; // Generated in memory
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    72
    private boolean isAnonymous = false;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    73
    private boolean isNested = false;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    74
    private boolean computedNestedTypeStatus = false;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    75
    public static final byte HEAP = 1;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    76
    public static final byte FILE = 2;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    77
    public static final byte ZIP = 3;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
    78
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    79
    private static BCELComparator bcelComparator = new BCELComparator() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    80
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    81
        @Override
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    82
        public boolean equals( final Object o1, final Object o2 ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    83
            final JavaClass THIS = (JavaClass) o1;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    84
            final JavaClass THAT = (JavaClass) o2;
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    85
            return Objects.equals(THIS.getClassName(), THAT.getClassName());
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    86
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    87
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    88
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    89
        @Override
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    90
        public int hashCode( final Object o ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    91
            final JavaClass THIS = (JavaClass) o;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    92
            return THIS.getClassName().hashCode();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    93
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    94
    };
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    95
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    96
     * In cases where we go ahead and create something,
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    97
     * use the default SyntheticRepository, because we
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
    98
     * don't know any better.
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
    99
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   100
    private transient com.sun.org.apache.bcel.internal.util.Repository repository
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   101
            = SyntheticRepository.getInstance();
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   102
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   103
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   104
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   105
     * Constructor gets all contents as arguments.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   106
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   107
     * @param class_name_index Index into constant pool referencing a
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   108
     * ConstantClass that represents this class.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   109
     * @param superclass_name_index Index into constant pool referencing a
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   110
     * ConstantClass that represents this class's superclass.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   111
     * @param file_name File name
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   112
     * @param major Major compiler version
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   113
     * @param minor Minor compiler version
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   114
     * @param access_flags Access rights defined by bit flags
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   115
     * @param constant_pool Array of constants
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   116
     * @param interfaces Implemented interfaces
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   117
     * @param fields Class fields
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   118
     * @param methods Class methods
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   119
     * @param attributes Class attributes
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   120
     * @param source Read from file or generated in memory?
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   121
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   122
    public JavaClass(final int class_name_index, final int superclass_name_index,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   123
            final String file_name, final int major, final int minor, final int access_flags,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   124
            final ConstantPool constant_pool, int[] interfaces, Field[] fields,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   125
            Method[] methods, Attribute[] attributes, final byte source) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   126
        super(access_flags);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   127
        if (interfaces == null) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   128
            interfaces = new int[0];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   129
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   130
        if (attributes == null) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   131
            attributes = new Attribute[0];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   132
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   133
        if (fields == null) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   134
            fields = new Field[0];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   135
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   136
        if (methods == null) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   137
            methods = new Method[0];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   138
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   139
        this.class_name_index = class_name_index;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   140
        this.superclass_name_index = superclass_name_index;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   141
        this.file_name = file_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   142
        this.major = major;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   143
        this.minor = minor;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   144
        this.constant_pool = constant_pool;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   145
        this.interfaces = interfaces;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   146
        this.fields = fields;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   147
        this.methods = methods;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   148
        this.attributes = attributes;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   149
        this.source = source;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   150
        // Get source file name if available
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   151
        for (final Attribute attribute : attributes) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   152
            if (attribute instanceof SourceFile) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   153
                source_file_name = ((SourceFile) attribute).getSourceFileName();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   154
                break;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   155
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   156
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   157
        /* According to the specification the following entries must be of type
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   158
         * `ConstantClass' but we check that anyway via the
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   159
         * `ConstPool.getConstant' method.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   160
         */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   161
        class_name = constant_pool.getConstantString(class_name_index, Const.CONSTANT_Class);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   162
        class_name = Utility.compactClassName(class_name, false);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   163
        final int index = class_name.lastIndexOf('.');
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   164
        if (index < 0) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   165
            package_name = "";
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   166
        } else {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   167
            package_name = class_name.substring(0, index);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   168
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   169
        if (superclass_name_index > 0) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   170
            // May be zero -> class is java.lang.Object
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   171
            superclass_name = constant_pool.getConstantString(superclass_name_index,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   172
                    Const.CONSTANT_Class);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   173
            superclass_name = Utility.compactClassName(superclass_name, false);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   174
        } else {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   175
            superclass_name = "java.lang.Object";
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   176
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   177
        interface_names = new String[interfaces.length];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   178
        for (int i = 0; i < interfaces.length; i++) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   179
            final String str = constant_pool.getConstantString(interfaces[i], Const.CONSTANT_Class);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   180
            interface_names[i] = Utility.compactClassName(str, false);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   181
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   182
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   183
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   184
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   185
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   186
     * Constructor gets all contents as arguments.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   187
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   188
     * @param class_name_index Class name
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   189
     * @param superclass_name_index Superclass name
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   190
     * @param file_name File name
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   191
     * @param major Major compiler version
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   192
     * @param minor Minor compiler version
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   193
     * @param access_flags Access rights defined by bit flags
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   194
     * @param constant_pool Array of constants
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   195
     * @param interfaces Implemented interfaces
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   196
     * @param fields Class fields
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   197
     * @param methods Class methods
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   198
     * @param attributes Class attributes
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   199
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   200
    public JavaClass(final int class_name_index, final int superclass_name_index,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   201
            final String file_name, final int major, final int minor, final int access_flags,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   202
            final ConstantPool constant_pool, final int[] interfaces, final Field[] fields,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   203
            final Method[] methods, final Attribute[] attributes) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   204
        this(class_name_index, superclass_name_index, file_name, major, minor, access_flags,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   205
                constant_pool, interfaces, fields, methods, attributes, HEAP);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   206
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   207
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   208
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   209
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   210
     * Called by objects that are traversing the nodes of the tree implicitely
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   211
     * defined by the contents of a Java class. I.e., the hierarchy of methods,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   212
     * fields, attributes, etc. spawns a tree of objects.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   213
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   214
     * @param v Visitor object
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   215
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   216
    @Override
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   217
    public void accept( final Visitor v ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   218
        v.visitJavaClass(this);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   219
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   220
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   221
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   222
     * Dump class to a file.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   223
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   224
     * @param file Output file
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   225
     * @throws IOException
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   226
     */
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   227
    public void dump(final File file) throws IOException {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   228
        final String parent = file.getParent();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   229
        if (parent != null) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   230
            final File dir = new File(parent);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   231
            if (!dir.mkdirs()) { // either was not created or already existed
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   232
                if (!dir.isDirectory()) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   233
                    throw new IOException("Could not create the directory " + dir);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   234
                }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   235
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   236
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   237
        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(file))) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   238
            dump(dos);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   239
        }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   240
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   241
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   242
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   243
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   244
     * Dump class to a file named file_name.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   245
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   246
     * @param _file_name Output file name
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   247
     * @throws IOException
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   248
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   249
    public void dump( final String _file_name ) throws IOException {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   250
        dump(new File(_file_name));
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   251
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   252
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   253
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   254
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   255
     * @return class in binary format
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   256
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   257
    public byte[] getBytes() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   258
        final ByteArrayOutputStream s = new ByteArrayOutputStream();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   259
        final DataOutputStream ds = new DataOutputStream(s);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   260
        try {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   261
            dump(ds);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   262
        } catch (final IOException e) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   263
            System.err.println("Error dumping class: " + e.getMessage());
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   264
        } finally {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   265
            try {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   266
                ds.close();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   267
            } catch (final IOException e2) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   268
                System.err.println("Error dumping class: " + e2.getMessage());
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   269
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   270
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   271
        return s.toByteArray();
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   272
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   273
7f561c08de6b Initial load
duke
parents:
diff changeset
   274
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   275
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   276
     * Dump Java class to output stream in binary format.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   277
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   278
     * @param file Output stream
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   279
     * @throws IOException
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   280
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   281
    public void dump( final OutputStream file ) throws IOException {
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   282
        dump(new DataOutputStream(file));
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   283
    }
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   284
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   285
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   286
    /**
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   287
     * Dump Java class to output stream in binary format.
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   288
     *
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   289
     * @param file Output stream
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   290
     * @throws IOException
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   291
     */
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   292
    public void dump( final DataOutputStream file ) throws IOException {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   293
        file.writeInt(Const.JVM_CLASSFILE_MAGIC);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   294
        file.writeShort(minor);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   295
        file.writeShort(major);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   296
        constant_pool.dump(file);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   297
        file.writeShort(super.getAccessFlags());
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   298
        file.writeShort(class_name_index);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   299
        file.writeShort(superclass_name_index);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   300
        file.writeShort(interfaces.length);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   301
        for (final int interface1 : interfaces) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   302
            file.writeShort(interface1);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   303
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   304
        file.writeShort(fields.length);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   305
        for (final Field field : fields) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   306
            field.dump(file);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   307
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   308
        file.writeShort(methods.length);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   309
        for (final Method method : methods) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   310
            method.dump(file);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   311
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   312
        if (attributes != null) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   313
            file.writeShort(attributes.length);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   314
            for (final Attribute attribute : attributes) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   315
                attribute.dump(file);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   316
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   317
        } else {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   318
            file.writeShort(0);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   319
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   320
        file.flush();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   321
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   322
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   323
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   324
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   325
     * @return Attributes of the class.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   326
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   327
    public Attribute[] getAttributes() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   328
        return attributes;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   329
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   330
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   331
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   332
     * @return Annotations on the class
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   333
     * @since 6.0
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   334
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   335
    public AnnotationEntry[] getAnnotationEntries() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   336
        if (annotations == null) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   337
            annotations = AnnotationEntry.createAnnotationEntries(getAttributes());
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   338
        }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   339
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   340
        return annotations;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   341
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   342
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   343
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   344
     * @return Class name.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   345
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   346
    public String getClassName() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   347
        return class_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   348
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   349
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   350
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   351
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   352
     * @return Package name.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   353
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   354
    public String getPackageName() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   355
        return package_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   356
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   357
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   358
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   359
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   360
     * @return Class name index.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   361
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   362
    public int getClassNameIndex() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   363
        return class_name_index;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   364
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   365
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   366
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   367
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   368
     * @return Constant pool.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   369
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   370
    public ConstantPool getConstantPool() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   371
        return constant_pool;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   372
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   373
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   374
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   375
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   376
     * @return Fields, i.e., variables of the class. Like the JVM spec
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   377
     * mandates for the classfile format, these fields are those specific to
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   378
     * this class, and not those of the superclass or superinterfaces.
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   379
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   380
    public Field[] getFields() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   381
        return fields;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   382
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   383
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   384
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   385
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   386
     * @return File name of class, aka SourceFile attribute value
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   387
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   388
    public String getFileName() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   389
        return file_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   390
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   391
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   392
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   393
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   394
     * @return Names of implemented interfaces.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   395
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   396
    public String[] getInterfaceNames() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   397
        return interface_names;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   398
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   399
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   400
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   401
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   402
     * @return Indices in constant pool of implemented interfaces.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   403
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   404
    public int[] getInterfaceIndices() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   405
        return interfaces;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   406
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   407
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   408
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   409
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   410
     * @return Major number of class file version.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   411
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   412
    public int getMajor() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   413
        return major;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   414
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   415
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   416
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   417
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   418
     * @return Methods of the class.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   419
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   420
    public Method[] getMethods() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   421
        return methods;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   422
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   423
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   424
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   425
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   426
     * @return A {@link Method} corresponding to
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   427
     * java.lang.reflect.Method if any
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   428
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   429
    public Method getMethod( final java.lang.reflect.Method m ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   430
        for (final Method method : methods) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   431
            if (m.getName().equals(method.getName()) && (m.getModifiers() == method.getModifiers())
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   432
                    && Type.getSignature(m).equals(method.getSignature())) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   433
                return method;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   434
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   435
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   436
        return null;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   437
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   438
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   439
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   440
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   441
     * @return Minor number of class file version.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   442
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   443
    public int getMinor() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   444
        return minor;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   445
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   446
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   447
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   448
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   449
     * @return sbsolute path to file where this class was read from
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   450
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   451
    public String getSourceFileName() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   452
        return source_file_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   453
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   454
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   455
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   456
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   457
     * returns the super class name of this class. In the case that this class is
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   458
     * java.lang.Object, it will return itself (java.lang.Object). This is probably incorrect
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   459
     * but isn't fixed at this time to not break existing clients.
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   460
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   461
     * @return Superclass name.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   462
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   463
    public String getSuperclassName() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   464
        return superclass_name;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   465
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   466
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   467
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   468
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   469
     * @return Class name index.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   470
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   471
    public int getSuperclassNameIndex() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   472
        return superclass_name_index;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   473
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   474
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   475
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   476
     * @param attributes .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   477
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   478
    public void setAttributes( final Attribute[] attributes ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   479
        this.attributes = attributes;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   480
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   481
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   482
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   483
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   484
     * @param class_name .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   485
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   486
    public void setClassName( final String class_name ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   487
        this.class_name = class_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   488
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   489
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   490
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   491
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   492
     * @param class_name_index .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   493
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   494
    public void setClassNameIndex( final int class_name_index ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   495
        this.class_name_index = class_name_index;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   496
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   497
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   498
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   499
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   500
     * @param constant_pool .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   501
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   502
    public void setConstantPool( final ConstantPool constant_pool ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   503
        this.constant_pool = constant_pool;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   504
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   505
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   506
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   507
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   508
     * @param fields .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   509
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   510
    public void setFields( final Field[] fields ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   511
        this.fields = fields;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   512
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   513
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   514
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   515
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   516
     * Set File name of class, aka SourceFile attribute value
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   517
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   518
    public void setFileName( final String file_name ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   519
        this.file_name = file_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   520
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   521
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   522
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   523
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   524
     * @param interface_names .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   525
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   526
    public void setInterfaceNames( final String[] interface_names ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   527
        this.interface_names = interface_names;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   528
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   529
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   530
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   531
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   532
     * @param interfaces .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   533
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   534
    public void setInterfaces( final int[] interfaces ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   535
        this.interfaces = interfaces;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   536
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   537
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   538
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   539
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   540
     * @param major .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   541
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   542
    public void setMajor( final int major ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   543
        this.major = major;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   544
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   545
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   546
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   547
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   548
     * @param methods .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   549
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   550
    public void setMethods( final Method[] methods ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   551
        this.methods = methods;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   552
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   553
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   554
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   555
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   556
     * @param minor .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   557
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   558
    public void setMinor( final int minor ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   559
        this.minor = minor;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   560
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   561
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   562
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   563
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   564
     * Set absolute path to file this class was read from.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   565
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   566
    public void setSourceFileName( final String source_file_name ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   567
        this.source_file_name = source_file_name;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   568
    }
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   569
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   570
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   571
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   572
     * @param superclass_name .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   573
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   574
    public void setSuperclassName( final String superclass_name ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   575
        this.superclass_name = superclass_name;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   576
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   577
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   578
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   579
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   580
     * @param superclass_name_index .
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   581
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   582
    public void setSuperclassNameIndex( final int superclass_name_index ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   583
        this.superclass_name_index = superclass_name_index;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   584
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   585
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   586
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   587
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   588
     * @return String representing class contents.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   589
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   590
    @Override
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   591
    public String toString() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   592
        String access = Utility.accessToString(super.getAccessFlags(), true);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   593
        access = access.isEmpty() ? "" : (access + " ");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   594
        final StringBuilder buf = new StringBuilder(128);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   595
        buf.append(access).append(Utility.classOrInterface(super.getAccessFlags())).append(" ").append(
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   596
                class_name).append(" extends ").append(
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   597
                Utility.compactClassName(superclass_name, false)).append('\n');
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   598
        final int size = interfaces.length;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   599
        if (size > 0) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   600
            buf.append("implements\t\t");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   601
            for (int i = 0; i < size; i++) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   602
                buf.append(interface_names[i]);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   603
                if (i < size - 1) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   604
                    buf.append(", ");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   605
                }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   606
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   607
            buf.append('\n');
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   608
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   609
        buf.append("filename\t\t").append(file_name).append('\n');
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   610
        buf.append("compiled from\t\t").append(source_file_name).append('\n');
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   611
        buf.append("compiler version\t").append(major).append(".").append(minor).append('\n');
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   612
        buf.append("access flags\t\t").append(super.getAccessFlags()).append('\n');
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   613
        buf.append("constant pool\t\t").append(constant_pool.getLength()).append(" entries\n");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   614
        buf.append("ACC_SUPER flag\t\t").append(isSuper()).append("\n");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   615
        if (attributes.length > 0) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   616
            buf.append("\nAttribute(s):\n");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   617
            for (final Attribute attribute : attributes) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   618
                buf.append(indent(attribute));
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   619
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   620
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   621
        final AnnotationEntry[] annotations = getAnnotationEntries();
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   622
        if (annotations!=null && annotations.length>0) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   623
            buf.append("\nAnnotation(s):\n");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   624
            for (final AnnotationEntry annotation : annotations) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   625
                buf.append(indent(annotation));
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   626
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   627
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   628
        if (fields.length > 0) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   629
            buf.append("\n").append(fields.length).append(" fields:\n");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   630
            for (final Field field : fields) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   631
                buf.append("\t").append(field).append('\n');
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   632
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   633
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   634
        if (methods.length > 0) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   635
            buf.append("\n").append(methods.length).append(" methods:\n");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   636
            for (final Method method : methods) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   637
                buf.append("\t").append(method).append('\n');
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   638
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   639
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   640
        return buf.toString();
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   641
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   642
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   643
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   644
    private static String indent( final Object obj ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   645
        final StringTokenizer tok = new StringTokenizer(obj.toString(), "\n");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   646
        final StringBuilder buf = new StringBuilder();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   647
        while (tok.hasMoreTokens()) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   648
            buf.append("\t").append(tok.nextToken()).append("\n");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   649
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   650
        return buf.toString();
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   651
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   652
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   653
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   654
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   655
     * @return deep copy of this class
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   656
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   657
    public JavaClass copy() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   658
        JavaClass c = null;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   659
        try {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   660
            c = (JavaClass) clone();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   661
            c.constant_pool = constant_pool.copy();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   662
            c.interfaces = interfaces.clone();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   663
            c.interface_names = interface_names.clone();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   664
            c.fields = new Field[fields.length];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   665
            for (int i = 0; i < fields.length; i++) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   666
                c.fields[i] = fields[i].copy(c.constant_pool);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   667
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   668
            c.methods = new Method[methods.length];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   669
            for (int i = 0; i < methods.length; i++) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   670
                c.methods[i] = methods[i].copy(c.constant_pool);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   671
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   672
            c.attributes = new Attribute[attributes.length];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   673
            for (int i = 0; i < attributes.length; i++) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   674
                c.attributes[i] = attributes[i].copy(c.constant_pool);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   675
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   676
        } catch (final CloneNotSupportedException e) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   677
            // TODO should this throw?
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   678
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   679
        return c;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   680
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   681
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   682
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   683
    public final boolean isSuper() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   684
        return (super.getAccessFlags() & Const.ACC_SUPER) != 0;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   685
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   686
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   687
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   688
    public final boolean isClass() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   689
        return (super.getAccessFlags() & Const.ACC_INTERFACE) == 0;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   690
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   691
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   692
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   693
     * @since 6.0
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   694
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   695
    public final boolean isAnonymous() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   696
        computeNestedTypeStatus();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   697
        return this.isAnonymous;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   698
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   699
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   700
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   701
     * @since 6.0
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   702
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   703
    public final boolean isNested() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   704
        computeNestedTypeStatus();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   705
        return this.isNested;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   706
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   707
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   708
    private void computeNestedTypeStatus() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   709
        if (computedNestedTypeStatus) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   710
            return;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   711
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   712
        for (final Attribute attribute : this.attributes) {
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   713
              if (attribute instanceof InnerClasses) {
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   714
                  final InnerClass[] innerClasses = ((InnerClasses) attribute).getInnerClasses();
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   715
                  for (final InnerClass innerClasse : innerClasses) {
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   716
                      boolean innerClassAttributeRefersToMe = false;
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   717
                      String inner_class_name = constant_pool.getConstantString(innerClasse.getInnerClassIndex(),
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   718
                                 Const.CONSTANT_Class);
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   719
                      inner_class_name = Utility.compactClassName(inner_class_name);
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   720
                      if (inner_class_name.equals(getClassName())) {
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   721
                          innerClassAttributeRefersToMe = true;
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   722
                      }
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   723
                      if (innerClassAttributeRefersToMe) {
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   724
                          this.isNested = true;
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   725
                          if (innerClasse.getInnerNameIndex() == 0) {
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   726
                              this.isAnonymous = true;
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   727
                          }
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   728
                      }
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   729
                  }
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   730
              }
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   731
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   732
        this.computedNestedTypeStatus = true;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   733
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   734
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   735
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   736
    /** @return returns either HEAP (generated), FILE, or ZIP
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   737
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   738
    public final byte getSource() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   739
        return source;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   740
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   741
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   742
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   743
    /********************* New repository functionality *********************/
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   744
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   745
     * Gets the ClassRepository which holds its definition. By default
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   746
     * this is the same as SyntheticRepository.getInstance();
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   747
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   748
    public com.sun.org.apache.bcel.internal.util.Repository getRepository() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   749
        return repository;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   750
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   751
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   752
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   753
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   754
     * Sets the ClassRepository which loaded the JavaClass.
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   755
     * Should be called immediately after parsing is done.
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   756
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   757
    public void setRepository(final com.sun.org.apache.bcel.internal.util.Repository repository) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   758
        this.repository = repository;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   759
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   760
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   761
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   762
    /** Equivalent to runtime "instanceof" operator.
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   763
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   764
     * @return true if this JavaClass is derived from the super class
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   765
     * @throws ClassNotFoundException if superclasses or superinterfaces
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   766
     *   of this object can't be found
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   767
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   768
    public final boolean instanceOf( final JavaClass super_class ) throws ClassNotFoundException {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   769
        if (this.equals(super_class)) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   770
            return true;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   771
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   772
        final JavaClass[] super_classes = getSuperClasses();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   773
        for (final JavaClass super_classe : super_classes) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   774
            if (super_classe.equals(super_class)) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   775
                return true;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   776
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   777
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   778
        if (super_class.isInterface()) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   779
            return implementationOf(super_class);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   780
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   781
        return false;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   782
    }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   783
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   784
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   785
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   786
     * @return true, if this class is an implementation of interface inter
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   787
     * @throws ClassNotFoundException if superclasses or superinterfaces
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   788
     *   of this class can't be found
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   789
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   790
    public boolean implementationOf( final JavaClass inter ) throws ClassNotFoundException {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   791
        if (!inter.isInterface()) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   792
            throw new IllegalArgumentException(inter.getClassName() + " is no interface");
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   793
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   794
        if (this.equals(inter)) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   795
            return true;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   796
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   797
        final JavaClass[] super_interfaces = getAllInterfaces();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   798
        for (final JavaClass super_interface : super_interfaces) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   799
            if (super_interface.equals(inter)) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   800
                return true;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   801
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   802
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   803
        return false;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   804
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   805
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   806
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   807
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   808
     * @return the superclass for this JavaClass object, or null if this
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   809
     * is java.lang.Object
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   810
     * @throws ClassNotFoundException if the superclass can't be found
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   811
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   812
    public JavaClass getSuperClass() throws ClassNotFoundException {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   813
        if ("java.lang.Object".equals(getClassName())) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   814
            return null;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   815
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   816
        return repository.loadClass(getSuperclassName());
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   817
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   818
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   819
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   820
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   821
     * @return list of super classes of this class in ascending order, i.e.,
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   822
     * java.lang.Object is always the last element
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   823
     * @throws ClassNotFoundException if any of the superclasses can't be found
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   824
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   825
    public JavaClass[] getSuperClasses() throws ClassNotFoundException {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   826
        JavaClass clazz = this;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   827
        final List<JavaClass> allSuperClasses = new ArrayList<>();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   828
        for (clazz = clazz.getSuperClass(); clazz != null; clazz = clazz.getSuperClass()) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   829
            allSuperClasses.add(clazz);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   830
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   831
        return allSuperClasses.toArray(new JavaClass[allSuperClasses.size()]);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   832
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   833
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   834
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   835
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   836
     * Get interfaces directly implemented by this JavaClass.
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   837
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   838
    public JavaClass[] getInterfaces() throws ClassNotFoundException {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   839
        final String[] _interfaces = getInterfaceNames();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   840
        final JavaClass[] classes = new JavaClass[_interfaces.length];
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   841
        for (int i = 0; i < _interfaces.length; i++) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   842
            classes[i] = repository.loadClass(_interfaces[i]);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   843
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   844
        return classes;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   845
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   846
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   847
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   848
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   849
     * Get all interfaces implemented by this JavaClass (transitively).
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   850
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   851
    public JavaClass[] getAllInterfaces() throws ClassNotFoundException {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   852
        final ClassQueue queue = new ClassQueue();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   853
        final Set<JavaClass> allInterfaces = new TreeSet<>();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   854
        queue.enqueue(this);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   855
        while (!queue.empty()) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   856
            final JavaClass clazz = queue.dequeue();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   857
            final JavaClass souper = clazz.getSuperClass();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   858
            final JavaClass[] _interfaces = clazz.getInterfaces();
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   859
            if (clazz.isInterface()) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   860
                allInterfaces.add(clazz);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   861
            } else {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   862
                if (souper != null) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   863
                    queue.enqueue(souper);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   864
                }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   865
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   866
            for (final JavaClass _interface : _interfaces) {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   867
                queue.enqueue(_interface);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   868
            }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   869
        }
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   870
        return allInterfaces.toArray(new JavaClass[allInterfaces.size()]);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   871
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   872
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   873
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   874
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   875
     * @return Comparison strategy object
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   876
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   877
    public static BCELComparator getComparator() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   878
        return bcelComparator;
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   879
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   880
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   881
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   882
    /**
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   883
     * @param comparator Comparison strategy object
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   884
     */
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   885
    public static void setComparator( final BCELComparator comparator ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   886
        bcelComparator = comparator;
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   887
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   888
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   889
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   890
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   891
     * Return value as defined by given BCELComparator strategy.
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   892
     * By default two JavaClass objects are said to be equal when
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   893
     * their class names are equal.
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   894
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   895
     * @see java.lang.Object#equals(java.lang.Object)
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   896
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   897
    @Override
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   898
    public boolean equals( final Object obj ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   899
        return bcelComparator.equals(this, obj);
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   900
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   901
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   902
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   903
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   904
     * Return the natural ordering of two JavaClasses.
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   905
     * This ordering is based on the class name
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   906
     * @since 6.0
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   907
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   908
    @Override
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   909
    public int compareTo( final JavaClass obj ) {
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   910
        return getClassName().compareTo(obj.getClassName());
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   911
    }
7f561c08de6b Initial load
duke
parents:
diff changeset
   912
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   913
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   914
    /**
55496
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   915
     * Return value as defined by given BCELComparator strategy.
8e0ae3830fca 8224157: BCEL: update to version 6.3.1
joehw
parents: 47216
diff changeset
   916
     * By default return the hashcode of the class name.
46174
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   917
     *
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   918
     * @see java.lang.Object#hashCode()
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   919
     */
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   920
    @Override
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   921
    public int hashCode() {
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   922
        return bcelComparator.hashCode(this);
5611d2529b49 8163121: BCEL: update to the latest 6.0 release
joehw
parents: 45853
diff changeset
   923
    }
6
7f561c08de6b Initial load
duke
parents:
diff changeset
   924
}