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);
+}