📄 classfile.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 + -