⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classfile.java

📁 这是实现Javac功能的GJC的最新源码
💻 JAVA
字号:
/** * @(#)ClassFile.java	1.21 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.tools.javac.v8.code;import com.sun.tools.javac.v8.util.*;import java.io.File;/** * Generic Java classfiles have one additional attribute for classes, * methods and fields: * *   "Signature" (u4 attr-length, u2 signature-index) * *   A signature gives the full Java type of a method or field. When used as a *   class attribute, it indicates type parameters, followed by supertype, *   followed by all interfaces. * *     methodOrFieldSignature ::= type *     classSignature         ::= [ typeparams ] supertype { interfacetype } * *   The type syntax in signatures is extended as follows: * *     type       ::= ... | classtype | methodtype | typevar *     classtype  ::= classsig { '.' classsig } *     classig    ::= 'L' name [typeargs] ';' *     methodtype ::= [ typeparams ] '(' { type } ')' type *     typevar    ::= 'T' name ';' *     typeargs   ::= '<' type { type } '>' *     typeparams ::= '<' typeparam { typeparam } '>' *     typeparam  ::= name ':' type * *  This class defines constants used in class files as well *  as routines to convert between internal ``.'' and external ``/'' *  separators in class names. */public class ClassFile {    public ClassFile() {        super();    }    public static final int JAVA_MAGIC = -889275714;    public static final int CONSTANT_Utf8 = 1;    public static final int CONSTANT_Unicode = 2;    public static final int CONSTANT_Integer = 3;    public static final int CONSTANT_Float = 4;    public static final int CONSTANT_Long = 5;    public static final int CONSTANT_Double = 6;    public static final int CONSTANT_Class = 7;    public static final int CONSTANT_String = 8;    public static final int CONSTANT_Fieldref = 9;    public static final int CONSTANT_Methodref = 10;    public static final int CONSTANT_InterfaceMethodref = 11;    public static final int CONSTANT_NameandType = 12;    public static final int MAX_PARAMETERS = 255;    public static final int MAX_DIMENSIONS = 255;    public static final int MAX_CODE = 65535;    public static final int MAX_LOCALS = 65535;    public static final int MAX_STACK = 65535;    /**     * Return internal representation of buf[offset..offset+len-1],     *  converting '/' to '.'.     */    public static byte[] internalize(byte[] buf, int offset, int len) {        byte[] translated = new byte[len];        for (int j = 0; j < len; j++) {            byte b = buf[offset + j];            if (b == '/')                translated[j] = (byte)'.';            else                translated[j] = b;        }        return translated;    }    /**      * Return internal representation of given name,      *  converting '/' to '.'.      */    public static byte[] internalize(Name name) {        return internalize(name.table.names, name.index, name.len);    }    /**      * Return external representation of buf[offset..offset+len-1],      *  converting '.' to '/'.      */    public static byte[] externalize(byte[] buf, int offset, int len) {        byte[] translated = new byte[len];        for (int j = 0; j < len; j++) {            byte b = buf[offset + j];            if (b == '.')                translated[j] = (byte)'/';            else                translated[j] = b;        }        return translated;    }    /**      * Return external representation of given name,      *  converting '/' to '.'.      */    public static byte[] externalize(Name name) {        return externalize(name.table.names, name.index, name.len);    }    /**      * Return external representation of file name s,      *  converting '.' to File.separatorChar.      */    public static String externalizeFileName(Name n) {        return n.toString().replace('.', File.separatorChar);    }    /**      * A class for the name-and-type signature of a method or field.      */    public static class NameAndType {        Name name;        Type type;        NameAndType(Name name, Type type) {            super();            this.name = name;            this.type = type;        }        public boolean equals(Object other) {            return other instanceof NameAndType &&                    name == ((NameAndType) other).name &&                    type.equals(((NameAndType) other).type);        }        public int hashCode() {            return name.hashCode() * type.hashCode();        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -