| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| package org.apache.tomcat.util.bcel.classfile; |
| |
| /** |
| * Represents a Java class, i.e., the data structures, constant pool, |
| * fields, methods and commands contained in a Java .class file. |
| * See <a href="http://docs.oracle.com/javase/specs/">JVM specification</a> for details. |
| * The intent of this class is to represent a parsed or otherwise existing |
| * class file. Those interested in programatically generating classes |
| * should see the <a href="../generic/ClassGen.html">ClassGen</a> class. |
| */ |
| public class JavaClass { |
| |
| private final int access_flags; |
| private final String class_name; |
| private final String superclass_name; |
| private final String[] interface_names; |
| private final Annotations runtimeVisibleAnnotations; // "RuntimeVisibleAnnotations" attribute defined in the class |
| |
| /** |
| * Constructor gets all contents as arguments. |
| * |
| * @param class_name Name of this class. |
| * @param superclass_name Name of this class's superclass. |
| * @param access_flags Access rights defined by bit flags |
| * @param constant_pool Array of constants |
| * @param interfaces Implemented interfaces |
| * @param runtimeVisibleAnnotations "RuntimeVisibleAnnotations" attribute defined on the Class, or null |
| */ |
| JavaClass(final String class_name, final String superclass_name, |
| final int access_flags, final ConstantPool constant_pool, final String[] interface_names, |
| final Annotations runtimeVisibleAnnotations) { |
| this.access_flags = access_flags; |
| this.runtimeVisibleAnnotations = runtimeVisibleAnnotations; |
| this.class_name = class_name; |
| this.superclass_name = superclass_name; |
| this.interface_names = interface_names; |
| } |
| |
| /** |
| * @return Access flags of the object aka. "modifiers". |
| */ |
| public final int getAccessFlags() { |
| return access_flags; |
| } |
| |
| /** |
| * Return annotations entries from "RuntimeVisibleAnnotations" attribute on |
| * the class, if there is any. |
| * |
| * @return An array of entries or {@code null} |
| */ |
| public AnnotationEntry[] getAnnotationEntries() { |
| if (runtimeVisibleAnnotations != null) { |
| return runtimeVisibleAnnotations.getAnnotationEntries(); |
| } |
| return null; |
| } |
| |
| /** |
| * @return Class name. |
| */ |
| public String getClassName() { |
| return class_name; |
| } |
| |
| |
| /** |
| * @return Names of implemented interfaces. |
| */ |
| public String[] getInterfaceNames() { |
| return interface_names; |
| } |
| |
| |
| /** |
| * returns the super class name of this class. In the case that this class is |
| * java.lang.Object, it will return itself (java.lang.Object). This is probably incorrect |
| * but isn't fixed at this time to not break existing clients. |
| * |
| * @return Superclass name. |
| */ |
| public String getSuperclassName() { |
| return superclass_name; |
| } |
| } |