1 Star 1 Fork 0

magicdmer/ClassEditor

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
FieldInfo.java 4.10 KB
一键复制 编辑 原始数据 按行查看 历史
/*
* FieldInfo.java
*
* Created on March 12, 1999
*
* Modification Log:
* 1.00 12th Mar 1999 Tanmay Original version.
* 1.01 18th Mar 1999 Tanmay Throws IOexception instead of Exception,
* needs constant pool during read and write
* 1.02 12th Jun 1999 Tanmay Methods to verify and get summary text added.
* 1.03 05th Jul 1999 Tanmay setFieldDescriptor method added
* 1.04 05th Jul 1999 Tanmay methods to add and delete reference added
*-----------------------------------------------------------------------------------------
* 10th Sep 2003 Tanmay Moved to SourceForge (http://classeditor.sourceforge.net)
*-----------------------------------------------------------------------------------------
* 1.05 28th Sep 2003 Tanmay Moved text summary method to visitor.
*/
package classfile;
import classfile.attributes.Attributes;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Vector;
/**
* Class to handle a single field.
*<br><br>
*
* @author Tanmay K. Mohapatra
* @version 1.05, 28th Sep, 2003
*/
public class FieldInfo {
public AccessFlags accessFlags;
public int iNameIndex;
public int iDescriptorIndex;
public Attributes attributes;
public ConstantPoolInfo cpName; // points to UTF8
public ConstantPoolInfo cpDescriptor; // points to UTF8
void read(DataInputStream dis, ConstantPool constantPool) throws IOException {
accessFlags = new AccessFlags();
accessFlags.read(dis);
iNameIndex = dis.readUnsignedShort();
cpName = constantPool.getPoolInfo(iNameIndex);
iDescriptorIndex = dis.readUnsignedShort();
cpDescriptor = constantPool.getPoolInfo(iDescriptorIndex);
attributes = new Attributes();
attributes.read(dis, constantPool);
addReference();
}
void write(DataOutputStream dos, ConstantPool constantPool) throws IOException {
accessFlags.write(dos);
iNameIndex = constantPool.getIndexOf(cpName);
dos.writeShort(iNameIndex);
iDescriptorIndex = constantPool.getIndexOf(cpDescriptor);
dos.writeShort(iDescriptorIndex);
attributes.write(dos, constantPool);
}
public void removeReferences() {
cpName.deleteRef();
cpDescriptor.deleteRef();
}
public void addReference() {
cpName.addRef();
cpDescriptor.addRef();
}
public String toString() {
String sRetStr;
sRetStr = "FieldInfo:" +
accessFlags.toString() +
" Name: " + cpName +
" Desc: " + cpDescriptor +
" Attribs: " + attributes.toString();
return sRetStr;
}
public String getFieldName() {
return cpName.sUTFStr;
}
public void setFieldName(String sNewName) {
cpName.sUTFStr = sNewName;
}
public String getFieldDescriptor() {
String sRawDesc = cpDescriptor.sUTFStr;
return Utils.getReadableDesc(sRawDesc);
}
public void setFieldDescriptor(String sNewDesc) {
String sRawDesc = Utils.getRawDesc(sNewDesc);
cpDescriptor.sUTFStr = sRawDesc;
}
public boolean verify(String sPrepend, Vector vectVerifyErrors) {
boolean bRet = true;
bRet = (accessFlags.verify(sPrepend, vectVerifyErrors, false) && bRet);
bRet = (attributes.verify(sPrepend, vectVerifyErrors) && bRet);
if ( (ConstantPoolInfo.CONSTANT_Utf8 != cpName.iTag) ||
(cpName.sUTFStr.length() == 0) ) {
vectVerifyErrors.addElement(sPrepend + ": Field name must point to a constant UTF8 and can not be empty.");
bRet = false;
}
if ( (ConstantPoolInfo.CONSTANT_Utf8 != cpDescriptor.iTag) ||
(cpDescriptor.sUTFStr.length() == 0) ) {
vectVerifyErrors.addElement(sPrepend + ": Field descriptor must point to a constant UTF8 and can not be empty.");
bRet = false;
}
return bRet;
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/magicdmer/ClassEditor.git
git@gitee.com:magicdmer/ClassEditor.git
magicdmer
ClassEditor
ClassEditor
master

搜索帮助