Skip to content

Commit

Permalink
Merge pull request #56 from maishihang/master
Browse files Browse the repository at this point in the history
complete jvm 2week work
  • Loading branch information
guodongym authored Apr 12, 2017
2 parents e2633d2 + e17c53f commit 3a5f381
Show file tree
Hide file tree
Showing 21 changed files with 994 additions and 25 deletions.
25 changes: 25 additions & 0 deletions group12/446031103/src/com/coderising/jvm/clz/AccessFlag.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.coderising.jvm.clz;

public class AccessFlag {
private int flagValue;

public AccessFlag(int value) {
this.flagValue = value;
}

public int getFlagValue() {
return flagValue;
}

public void setFlagValue(int flag) {
this.flagValue = flag;
}

public boolean isPublicClass(){
return (this.flagValue & 0x0001) != 0;
}
public boolean isFinalClass(){
return (this.flagValue & 0x0010) != 0;
}

}
75 changes: 75 additions & 0 deletions group12/446031103/src/com/coderising/jvm/clz/ClassFile.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.coderising.jvm.clz;

import com.coderising.jvm.constant.ClassInfo;
import com.coderising.jvm.constant.ConstantPool;

public class ClassFile {

private int minorVersion;
private int majorVersion;

private AccessFlag accessFlag;
private ClassIndex clzIndex;
private ConstantPool pool;


public ClassIndex getClzIndex() {
return clzIndex;
}
public AccessFlag getAccessFlag() {
return accessFlag;
}
public void setAccessFlag(AccessFlag accessFlag) {
this.accessFlag = accessFlag;
}



public ConstantPool getConstantPool() {
return pool;
}
public int getMinorVersion() {
return minorVersion;
}
public void setMinorVersion(int minorVersion) {
this.minorVersion = minorVersion;
}
public int getMajorVersion() {
return majorVersion;
}
public void setMajorVersion(int majorVersion) {
this.majorVersion = majorVersion;
}
public void setConstPool(ConstantPool pool) {
this.pool = pool;

}
public void setClassIndex(ClassIndex clzIndex) {
this.clzIndex = clzIndex;
}




public void print(){

if(this.accessFlag.isPublicClass()){
System.out.println("Access flag : public ");
}
System.out.println("Class Name:"+ getClassName());

System.out.println("Super Class Name:"+ getSuperClassName());


}

private String getClassName(){
int thisClassIndex = this.clzIndex.getThisClassIndex();
ClassInfo thisClass = (ClassInfo)this.getConstantPool().getConstantInfo(thisClassIndex);
return thisClass.getClassName();
}
private String getSuperClassName(){
ClassInfo superClass = (ClassInfo)this.getConstantPool().getConstantInfo(this.clzIndex.getSuperClassIndex());
return superClass.getClassName();
}
}
19 changes: 19 additions & 0 deletions group12/446031103/src/com/coderising/jvm/clz/ClassIndex.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.coderising.jvm.clz;

public class ClassIndex {
private int thisClassIndex;
private int superClassIndex;

public int getThisClassIndex() {
return thisClassIndex;
}
public void setThisClassIndex(int thisClassIndex) {
this.thisClassIndex = thisClassIndex;
}
public int getSuperClassIndex() {
return superClassIndex;
}
public void setSuperClassIndex(int superClassIndex) {
this.superClassIndex = superClassIndex;
}
}
24 changes: 24 additions & 0 deletions group12/446031103/src/com/coderising/jvm/constant/ClassInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.coderising.jvm.constant;

public class ClassInfo extends ConstantInfo {
private int type = ConstantInfo.CLASS_INFO;
private int utf8Index ;
public ClassInfo(ConstantPool pool) {
super(pool);
}
public int getUtf8Index() {
return utf8Index;
}
public void setUtf8Index(int utf8Index) {
this.utf8Index = utf8Index;
}
public int getType() {
return type;
}

public String getClassName() {
int index = getUtf8Index();
UTF8Info utf8Info = (UTF8Info)constantPool.getConstantInfo(index);
return utf8Info.getValue();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.coderising.jvm.constant;

public abstract class ConstantInfo {
public static final int UTF8_INFO = 1;
public static final int FLOAT_INFO = 4;
public static final int CLASS_INFO = 7;
public static final int STRING_INFO = 8;
public static final int FIELD_INFO = 9;
public static final int METHOD_INFO = 10;
public static final int NAME_AND_TYPE_INFO = 12;
protected ConstantPool constantPool;

public ConstantInfo(){

}

public ConstantInfo(ConstantPool pool) {
this.constantPool = pool;
}
public abstract int getType();

public ConstantPool getConstantPool() {
return constantPool;
}
public ConstantInfo getConstantInfo(int index){
return this.constantPool.getConstantInfo(index);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.coderising.jvm.constant;

import java.util.ArrayList;
import java.util.List;

public class ConstantPool {

private List<ConstantInfo> constantInfos = new ArrayList<ConstantInfo>();


public ConstantPool(){

}
public void addConstantInfo(ConstantInfo info){

this.constantInfos.add(info);

}

public ConstantInfo getConstantInfo(int index){
return this.constantInfos.get(index);
}
public String getUTF8String(int index){
return ((UTF8Info)this.constantInfos.get(index)).getValue();
}
public Object getSize() {
return this.constantInfos.size() -1;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.coderising.jvm.constant;

public class FieldRefInfo extends ConstantInfo{
private int type = ConstantInfo.FIELD_INFO;
private int classInfoIndex;
private int nameAndTypeIndex;

public FieldRefInfo(ConstantPool pool) {
super(pool);
}
public int getType() {
return type;
}

public int getClassInfoIndex() {
return classInfoIndex;
}
public void setClassInfoIndex(int classInfoIndex) {
this.classInfoIndex = classInfoIndex;
}
public int getNameAndTypeIndex() {
return nameAndTypeIndex;
}
public void setNameAndTypeIndex(int nameAndTypeIndex) {
this.nameAndTypeIndex = nameAndTypeIndex;
}

public String toString(){

NameAndTypeInfo typeInfo = (NameAndTypeInfo)this.getConstantInfo(this.getNameAndTypeIndex());

return getClassName() +" : "+ typeInfo.getName() + ":" + typeInfo.getTypeInfo() +"]";
}

public String getClassName(){

ClassInfo classInfo = (ClassInfo) this.getConstantInfo(this.getClassInfoIndex());

UTF8Info utf8Info = (UTF8Info)this.getConstantInfo(classInfo.getUtf8Index());

return utf8Info.getValue();

}

public String getFieldName(){
NameAndTypeInfo typeInfo = (NameAndTypeInfo)this.getConstantInfo(this.getNameAndTypeIndex());
return typeInfo.getName();
}

public String getFieldType(){
NameAndTypeInfo typeInfo = (NameAndTypeInfo)this.getConstantInfo(this.getNameAndTypeIndex());
return typeInfo.getTypeInfo();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.coderising.jvm.constant;

public class MethodRefInfo extends ConstantInfo {

private int type = ConstantInfo.METHOD_INFO;

private int classInfoIndex;
private int nameAndTypeIndex;

public MethodRefInfo(ConstantPool pool) {
super(pool);
}

public int getType() {
return type;
}

public int getClassInfoIndex() {
return classInfoIndex;
}
public void setClassInfoIndex(int classInfoIndex) {
this.classInfoIndex = classInfoIndex;
}
public int getNameAndTypeIndex() {
return nameAndTypeIndex;
}
public void setNameAndTypeIndex(int nameAndTypeIndex) {
this.nameAndTypeIndex = nameAndTypeIndex;
}

public String toString(){

return getClassName() +" : "+ this.getMethodName() + " : " + this.getParamAndReturnType() ;
}
public String getClassName(){
ConstantPool pool = this.getConstantPool();
ClassInfo clzInfo = (ClassInfo)pool.getConstantInfo(this.getClassInfoIndex());
return clzInfo.getClassName();
}

public String getMethodName(){
ConstantPool pool = this.getConstantPool();
NameAndTypeInfo typeInfo = (NameAndTypeInfo)pool.getConstantInfo(this.getNameAndTypeIndex());
return typeInfo.getName();
}

public String getParamAndReturnType(){
ConstantPool pool = this.getConstantPool();
NameAndTypeInfo typeInfo = (NameAndTypeInfo)pool.getConstantInfo(this.getNameAndTypeIndex());
return typeInfo.getTypeInfo();
}



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.coderising.jvm.constant;

public class NameAndTypeInfo extends ConstantInfo{
public int type = ConstantInfo.NAME_AND_TYPE_INFO;

private int index1;
private int index2;

public NameAndTypeInfo(ConstantPool pool) {
super(pool);
}

public int getIndex1() {
return index1;
}
public void setIndex1(int index1) {
this.index1 = index1;
}
public int getIndex2() {
return index2;
}
public void setIndex2(int index2) {
this.index2 = index2;
}
public int getType() {
return type;
}


public String getName(){
ConstantPool pool = this.getConstantPool();
UTF8Info utf8Info1 = (UTF8Info)pool.getConstantInfo(index1);
return utf8Info1.getValue();
}

public String getTypeInfo(){
ConstantPool pool = this.getConstantPool();
UTF8Info utf8Info2 = (UTF8Info)pool.getConstantInfo(index2);
return utf8Info2.getValue();
}

public String toString(){
return "(" + getName() + "," + getTypeInfo()+")";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.coderising.jvm.constant;

public class NullConstantInfo extends ConstantInfo {

public NullConstantInfo(){

}
@Override
public int getType() {
return -1;
}

}
Loading

0 comments on commit 3a5f381

Please sign in to comment.