Mercurial > hg > Members > kono > jpf-core
diff src/main/gov/nasa/jpf/jvm/ClassFileReader.java @ 0:61d41facf527
initial v8 import (history reset)
author | Peter Mehlitz <Peter.C.Mehlitz@nasa.gov> |
---|---|
date | Fri, 23 Jan 2015 10:14:01 -0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/gov/nasa/jpf/jvm/ClassFileReader.java Fri Jan 23 10:14:01 2015 -0800 @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2014, United States Government, as represented by the + * Administrator of the National Aeronautics and Space Administration. + * All rights reserved. + * + * The Java Pathfinder core (jpf-core) platform is licensed under the + * Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package gov.nasa.jpf.jvm; + +import gov.nasa.jpf.vm.ClassParseException; + +/** + * interface for classfile processors + * + * NOTE - all types are given ss descriptors, i.e. "Lx/y/Z;" or type codes such as "I" + * + * iteration groups always start with a + * setXCount(int xCount) + * + * followed by xCount notifications + * setX (int xIndex) + * + * with 0<=xIndex<xCount + */ +public interface ClassFileReader { + + void setClass(ClassFile cf, String clsName, String superClsName, int flags, int cpCount) throws ClassParseException; + + + //--- interfaces + void setInterfaceCount(ClassFile cf, int ifcCount); + + void setInterface(ClassFile cf, int ifcIndex, String ifcName); + + void setInterfacesDone(ClassFile cf); + + + //--- fields + void setFieldCount(ClassFile cf, int fieldCount); + + void setField(ClassFile cf, int fieldIndex, int accessFlags, String name, String descriptor); + + void setFieldAttributeCount(ClassFile cf, int fieldIndex, int attrCount); + + void setFieldAttribute(ClassFile cf, int fieldIndex, int attrIndex, String name, int attrLength); + + void setFieldAttributesDone(ClassFile cf, int fieldIndex); + + void setFieldDone(ClassFile cf, int fieldIndex); + + void setFieldsDone(ClassFile cf); + + + //--- standard field attributes + void setConstantValue(ClassFile cf, Object tag, Object value); + + + //--- methods + void setMethodCount(ClassFile cf, int methodCount); + + void setMethod(ClassFile cf, int methodIndex, int accessFlags, String name, String descriptor); + + void setMethodAttributeCount(ClassFile cf, int methodIndex, int attrCount); + + void setMethodAttribute(ClassFile cf, int methodIndex, int attrIndex, String name, int attrLength); + + void setMethodAttributesDone(ClassFile cf, int methodIndex); + + void setMethodDone(ClassFile cf, int methodIndex); + + void setMethodsDone(ClassFile cf); + + + //--- standard method attributes + void setExceptionCount (ClassFile cf, Object tag, int exceptionCount); + + void setException (ClassFile cf, Object tag, int exceptionIndex, String exceptionType); + + void setExceptionsDone(ClassFile cf, Object tag); + + void setCode(ClassFile cf, Object tag, int maxStack, int maxLocals, int codeLength); + + void setExceptionHandlerTableCount (ClassFile cf, Object tag, int exceptionTableCount); + + void setExceptionHandler(ClassFile cf, Object tag, int exceptionIndex, int startPc, int endPc, int handlerPc, String catchType); + + void setExceptionHandlerTableDone(ClassFile cf, Object tag); + + void setCodeAttributeCount(ClassFile cf, Object tag, int attrCount); + + void setCodeAttribute(ClassFile cf, Object tag, int attrIndex, String name, int attrLength); + + void setCodeAttributesDone (ClassFile cf, Object tag); + + + //--- standard code attribute attributes (yes, attributes can be nested) + void setLineNumberTableCount(ClassFile cf, Object tag, int lineNumberCount); + + void setLineNumber(ClassFile cf, Object tag, int lineIndex, int lineNumber, int startPc); + + void setLineNumberTableDone(ClassFile cf, Object tag); + + + void setLocalVarTableCount(ClassFile cf, Object tag, int localVarCount); + + void setLocalVar(ClassFile cf, Object tag, int localVarIndex, String varName, String descriptor, + int scopeStartPc, int scopeEndPc, int slotIndex); + + void setLocalVarTableDone(ClassFile cf, Object tag); + + + void setClassAttributeCount(ClassFile cf, int attrCount); + + void setClassAttribute(ClassFile cf, int attrIndex, String name, int attrLength); + + void setClassAttributesDone(ClassFile cf); + + + //--- standard class attributes + void setSourceFile(ClassFile cf, Object tag, String pathName); + + void setInnerClassCount(ClassFile cf, Object tag, int innerClsCount); + void setInnerClass(ClassFile cf, Object tag, int innerClsIndex, String outerName, String innerName, String innerSimpleName, int accessFlags); + void setInnerClassesDone (ClassFile cf, Object tag); + + void setBootstrapMethodCount (ClassFile cf, Object tag, int count); + void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth, String descriptor, int[] cpArgs); + void setBootstrapMethodsDone (ClassFile cf, Object tag); + + void setEnclosingMethod(ClassFile cf, Object tag, String enclosingClass, String enclosingMethod, String descriptor); + + //--- annotations + void setAnnotationCount(ClassFile cf, Object tag, int annotationCount); + void setAnnotation(ClassFile cf, Object tag, int annotationIndex, String annotationType); + void setAnnotationsDone(ClassFile cf, Object tag); + + + // Java 8 type annotations + void setTypeAnnotationCount(ClassFile cf, Object tag, int annotationCount); + + void setTypeParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int typeIndex, short[] typePath, String annotationType); + void setSuperTypeAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int superTypeIdx, short[] typePath, String annotationType); + void setTypeParameterBoundAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int typeParamIdx, int boundIdx, short[] typePath, String annotationType); + void setTypeAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, short[] typePath, String annotationType); + void setFormalParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int formalParamIndex, short[] typePath, String annotationType); + void setThrowsAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int throwsTypeIndex, short[] typePath, String annotationType); + void setVariableAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, long[] scopeEntries, short[] typePath, String annotationType); + void setExceptionParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int exceptionIndex, short[] typePath, String annotationType); + void setBytecodeAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int offset, short[] typePath, String annotationType); + void setBytecodeTypeParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int offset, int typeArgIdx, short[] typePath, String annotationType); + + void setTypeAnnotationsDone(ClassFile cf, Object tag); + + + + void setAnnotationValueCount(ClassFile cf, Object tag, int annotationIndex, int nValuePairs); + + void setPrimitiveAnnotationValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex, Object val); + + void setStringAnnotationValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex, String s); + + void setClassAnnotationValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex, String typeName); + + void setEnumAnnotationValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex, + String enumType, String enumValue); + + void setAnnotationValueElementCount(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int elementCount); + + void setAnnotationValueElementsDone(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName); + + void setAnnotationValuesDone(ClassFile cf, Object tag, int annotationIndex); + + void setParameterCount(ClassFile cf, Object tag, int parameterCount); + + void setParameterAnnotationCount(ClassFile cf, Object tag, int paramIndex, int annotationCount); + + void setParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, String annotationType); + + void setParameterAnnotationsDone(ClassFile cf, Object tag, int paramIndex); + + void setParametersDone(ClassFile cf, Object tag); + + + void setSignature(ClassFile cf, Object tag, String signature); +}