jjg@46: /* jjg@46: * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. jjg@46: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. jjg@46: * jjg@46: * This code is free software; you can redistribute it and/or modify it jjg@46: * under the terms of the GNU General Public License version 2 only, as jjg@46: * published by the Free Software Foundation. Sun designates this jjg@46: * particular file as subject to the "Classpath" exception as provided jjg@46: * by Sun in the LICENSE file that accompanied this code. jjg@46: * jjg@46: * This code is distributed in the hope that it will be useful, but WITHOUT jjg@46: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or jjg@46: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License jjg@46: * version 2 for more details (a copy is included in the LICENSE file that jjg@46: * accompanied this code). jjg@46: * jjg@46: * You should have received a copy of the GNU General Public License version jjg@46: * 2 along with this work; if not, write to the Free Software Foundation, jjg@46: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. jjg@46: * jjg@46: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, jjg@46: * CA 95054 USA or visit www.sun.com if you need additional information or jjg@46: * have any questions. jjg@46: */ jjg@46: jjg@46: package com.sun.tools.classfile; jjg@46: jjg@46: import java.util.List; jjg@46: jjg@46: /* jjg@46: *
This is NOT part of any API supported by Sun Microsystems. If
jjg@46: * you write code that depends on this, you do so at your own risk.
jjg@46: * This code and its internal interfaces are subject to change or
jjg@46: * deletion without notice.
jjg@46: */
jjg@46: public class Type {
jjg@46: protected Type() { }
jjg@46:
jjg@46: protected static void append(StringBuilder sb, String prefix, List extends Type> types, String suffix) {
jjg@46: sb.append(prefix);
jjg@46: String sep = "";
jjg@46: for (Type t: types) {
jjg@46: sb.append(sep);
jjg@46: sb.append(t);
jjg@46: sep = ", ";
jjg@46: }
jjg@46: sb.append(suffix);
jjg@46: }
jjg@46:
jjg@46: protected static void appendIfNotEmpty(StringBuilder sb, String prefix, List extends Type> types, String suffix) {
jjg@46: if (types != null && types.size() > 0)
jjg@46: append(sb, prefix, types, suffix);
jjg@46: }
jjg@46:
jjg@46: public static class SimpleType extends Type {
jjg@46: public SimpleType(String name) {
jjg@46: this.name = name;
jjg@46: }
jjg@46:
jjg@46: @Override
jjg@46: public String toString() {
jjg@46: return name;
jjg@46: }
jjg@46:
jjg@46: public final String name;
jjg@46: }
jjg@46:
jjg@46: public static class ArrayType extends Type {
jjg@46: public ArrayType(Type elemType) {
jjg@46: this.elemType = elemType;
jjg@46: }
jjg@46:
jjg@46: @Override
jjg@46: public String toString() {
jjg@46: return elemType + "[]";
jjg@46: }
jjg@46:
jjg@46: public final Type elemType;
jjg@46: }
jjg@46:
jjg@46: public static class MethodType extends Type {
jjg@46: public MethodType(List extends Type> argTypes, Type resultType) {
jjg@46: this(null, argTypes, resultType, null);
jjg@46: }
jjg@46:
jjg@46: public MethodType(List extends Type> typeArgTypes,
jjg@46: List extends Type> argTypes,
jjg@46: Type returnType,
jjg@46: List extends Type> throwsTypes) {
jjg@46: this.typeArgTypes = typeArgTypes;
jjg@46: this.argTypes = argTypes;
jjg@46: this.returnType = returnType;
jjg@46: this.throwsTypes = throwsTypes;
jjg@46: }
jjg@46:
jjg@46: @Override
jjg@46: public String toString() {
jjg@46: StringBuilder sb = new StringBuilder();
jjg@46: appendIfNotEmpty(sb, "<", typeArgTypes, "> ");
jjg@46: sb.append(returnType);
jjg@46: append(sb, " (", argTypes, ")");
jjg@46: appendIfNotEmpty(sb, " throws ", throwsTypes, "");
jjg@46: return sb.toString();
jjg@46: }
jjg@46:
jjg@46: public final List extends Type> typeArgTypes;
jjg@46: public final List extends Type> argTypes;
jjg@46: public final Type returnType;
jjg@46: public final List extends Type> throwsTypes;
jjg@46: }
jjg@46:
jjg@46: public static class ClassSigType extends Type {
jjg@46: public ClassSigType(List