+ Iterator methodit = cn.getMethods();
+ HashMap<MethodDescriptor, Integer> md2pos = new HashMap<MethodDescriptor, Integer>();
+ while(methodit.hasNext()) {
+ MethodDescriptor currmd=(MethodDescriptor)methodit.next();
+ if(currmd.isConstructor()) {
+ BlockNode bn=state.getMethodBody(currmd);
+ // if there are super(...) invokation, the initializers should be invoked after that
+ int i = 0;
+ for(; i < bn.size(); i++) {
+ if(Kind.BlockExpressionNode==bn.get(i).kind()
+ &&(((BlockExpressionNode)bn.get(i)).getExpression() instanceof MethodInvokeNode)
+ &&((MethodInvokeNode)(((BlockExpressionNode)bn.get(i)).getExpression())).getMethodName().equals("super")) {
+ break;
+ }
+ }
+ if(i==bn.size()) {
+ md2pos.put(currmd, 0);
+ } else {
+ md2pos.put(currmd, i+1);
+ }
+ }
+ }