Fixing a new bug: Considering parameters with Type and Type array, e.g., T and T[].
[jpf-core.git] / src / main / gov / nasa / jpf / jvm / ClassFileReader.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18
19 package gov.nasa.jpf.jvm;
20
21 import gov.nasa.jpf.vm.ClassParseException;
22
23 /**
24  * interface for classfile processors
25  *
26  * NOTE - all types are given ss descriptors, i.e. "Lx/y/Z;" or type codes such as "I"
27  *
28  * iteration groups always start with a
29  *   setXCount(int xCount)
30  *
31  * followed by xCount notifications
32  *   setX (int xIndex)
33  *
34  * with 0<=xIndex<xCount
35  */
36 public interface ClassFileReader {
37
38   void setClass(ClassFile cf, String clsName, String superClsName, int flags, int cpCount) throws ClassParseException;
39
40
41   //--- interfaces
42   void setInterfaceCount(ClassFile cf, int ifcCount);
43
44   void setInterface(ClassFile cf, int ifcIndex, String ifcName);
45
46   void setInterfacesDone(ClassFile cf);
47
48
49   //--- fields
50   void setFieldCount(ClassFile cf, int fieldCount);
51
52   void setField(ClassFile cf, int fieldIndex, int accessFlags, String name, String descriptor);
53
54   void setFieldAttributeCount(ClassFile cf, int fieldIndex, int attrCount);
55
56   void setFieldAttribute(ClassFile cf, int fieldIndex, int attrIndex, String name, int attrLength);
57
58   void setFieldAttributesDone(ClassFile cf, int fieldIndex);
59
60   void setFieldDone(ClassFile cf, int fieldIndex);
61
62   void setFieldsDone(ClassFile cf);
63
64
65   //--- standard field attributes
66   void setConstantValue(ClassFile cf, Object tag, Object value);
67
68
69   //--- methods
70   void setMethodCount(ClassFile cf, int methodCount);
71
72   void setMethod(ClassFile cf, int methodIndex, int accessFlags, String name, String descriptor);
73
74   void setMethodAttributeCount(ClassFile cf, int methodIndex, int attrCount);
75
76   void setMethodAttribute(ClassFile cf, int methodIndex, int attrIndex, String name, int attrLength);
77
78   void setMethodAttributesDone(ClassFile cf, int methodIndex);
79
80   void setMethodDone(ClassFile cf, int methodIndex);
81
82   void setMethodsDone(ClassFile cf);
83
84
85   //--- standard method attributes
86   void setExceptionCount (ClassFile cf, Object tag, int exceptionCount);
87
88   void setException (ClassFile cf, Object tag, int exceptionIndex, String exceptionType);
89
90   void setExceptionsDone(ClassFile cf, Object tag);
91
92   void setCode(ClassFile cf, Object tag, int maxStack, int maxLocals, int codeLength);
93
94   void setExceptionHandlerTableCount (ClassFile cf, Object tag, int exceptionTableCount);
95
96   void setExceptionHandler(ClassFile cf, Object tag, int exceptionIndex, int startPc, int endPc, int handlerPc, String catchType);
97
98   void setExceptionHandlerTableDone(ClassFile cf, Object tag);
99
100   void setCodeAttributeCount(ClassFile cf, Object tag, int attrCount);
101
102   void setCodeAttribute(ClassFile cf, Object tag, int attrIndex, String name, int attrLength);
103
104   void setCodeAttributesDone (ClassFile cf, Object tag);
105
106
107   //--- standard code attribute attributes (yes, attributes can be nested)
108   void setLineNumberTableCount(ClassFile cf, Object tag, int lineNumberCount);
109   
110   void setLineNumber(ClassFile cf, Object tag, int lineIndex, int lineNumber, int startPc);
111
112   void setLineNumberTableDone(ClassFile cf, Object tag);
113
114
115   void setLocalVarTableCount(ClassFile cf, Object tag, int localVarCount);
116
117   void setLocalVar(ClassFile cf, Object tag, int localVarIndex, String varName, String descriptor,
118                       int scopeStartPc, int scopeEndPc, int slotIndex);
119
120   void setLocalVarTableDone(ClassFile cf, Object tag);
121
122
123   void setClassAttributeCount(ClassFile cf, int attrCount);
124
125   void setClassAttribute(ClassFile cf, int attrIndex, String name, int attrLength);
126
127   void setClassAttributesDone(ClassFile cf);
128
129
130   //--- standard class attributes
131   void setSourceFile(ClassFile cf, Object tag, String pathName);
132
133   void setInnerClassCount(ClassFile cf, Object tag, int innerClsCount);
134   void setInnerClass(ClassFile cf, Object tag, int innerClsIndex, String outerName, String innerName, String innerSimpleName, int accessFlags);
135   void setInnerClassesDone (ClassFile cf, Object tag);
136
137   void setBootstrapMethodCount (ClassFile cf, Object tag, int count);
138   void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth, String descriptor, int[] cpArgs);
139   void setBootstrapMethodsDone (ClassFile cf, Object tag);
140   
141   void setEnclosingMethod(ClassFile cf, Object tag, String enclosingClass, String enclosingMethod, String descriptor);
142   
143   //--- annotations
144   void setAnnotationCount(ClassFile cf, Object tag, int annotationCount);
145   void setAnnotation(ClassFile cf, Object tag, int annotationIndex, String annotationType);
146   void setAnnotationsDone(ClassFile cf, Object tag);
147
148   
149   // Java 8 type annotations
150   void setTypeAnnotationCount(ClassFile cf, Object tag, int annotationCount);
151   
152   void setTypeParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int typeIndex, short[] typePath, String annotationType);
153   void setSuperTypeAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int superTypeIdx, short[] typePath, String annotationType);
154   void setTypeParameterBoundAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int typeParamIdx, int boundIdx, short[] typePath, String annotationType);
155   void setTypeAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, short[] typePath, String annotationType);
156   void setFormalParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int formalParamIndex, short[] typePath, String annotationType);
157   void setThrowsAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int throwsTypeIndex, short[] typePath, String annotationType);
158   void setVariableAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, long[] scopeEntries, short[] typePath, String annotationType);
159   void setExceptionParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int exceptionIndex, short[] typePath, String annotationType);
160   void setBytecodeAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int offset, short[] typePath, String annotationType);
161   void setBytecodeTypeParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, int targetType, int offset, int typeArgIdx, short[] typePath, String annotationType);
162   
163   void setTypeAnnotationsDone(ClassFile cf, Object tag);
164
165   
166   
167   void setAnnotationValueCount(ClassFile cf, Object tag, int annotationIndex, int nValuePairs);
168
169   void setPrimitiveAnnotationValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex, Object val);
170   
171   void setAnnotationFieldValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex);
172
173   void setStringAnnotationValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex, String s);
174
175   void setClassAnnotationValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex, String typeName);
176
177   void setEnumAnnotationValue(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int arrayIndex,
178           String enumType, String enumValue);
179
180   void setAnnotationValueElementCount(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName, int elementCount);
181
182   void setAnnotationValueElementsDone(ClassFile cf, Object tag, int annotationIndex, int valueIndex, String elementName);
183
184   void setAnnotationValuesDone(ClassFile cf, Object tag, int annotationIndex);
185
186   void setParameterCount(ClassFile cf, Object tag, int parameterCount);
187
188   void setParameterAnnotationCount(ClassFile cf, Object tag, int paramIndex, int annotationCount);
189
190   void setParameterAnnotation(ClassFile cf, Object tag, int annotationIndex, String annotationType);
191
192   void setParameterAnnotationsDone(ClassFile cf, Object tag, int paramIndex);
193
194   void setParametersDone(ClassFile cf, Object tag);
195
196
197   void setSignature(ClassFile cf, Object tag, String signature);
198 }