protected boolean isglobal;
protected boolean isstaticblock; // flag to indicate if this is a static block
protected boolean isinvokedbystatic; // flag to indicate if this method is invoked by some static block
+
+ protected boolean isdefaultconstructor; // flag to indicate if this is a default constructor
public MethodDescriptor(Modifiers m, TypeDescriptor rt, String identifier) {
super(identifier);
paramtable=new SymbolTable();
thisvd=null;
isstaticblock = false;
+ this.isinvokedbystatic = false;
+ this.isdefaultconstructor = false;
}
public Modifiers getModifiers() {
st+=")";
return st;
}
+
+ public boolean isDefaultConstructor() {
+ return this.isdefaultconstructor;
+ }
+
+ public void setDefaultConstructor() {
+ this.isdefaultconstructor = true;
+ }
}
}
cn.setModifiers(parseModifiersList(pn.getChild("modifiers")));
parseClassBody(cn, pn.getChild("classbody"));
+
+ boolean hasConstructor = false;
+ for(Iterator method_it=cn.getMethods(); method_it.hasNext();) {
+ MethodDescriptor md=(MethodDescriptor)method_it.next();
+ hasConstructor |= md.isConstructor();
+ }
+ if((!hasConstructor) && (!cn.isEnum())) {
+ // add a default constructor for this class
+ MethodDescriptor md = new MethodDescriptor(new Modifiers(Modifiers.PUBLIC),
+ cn.getSymbol(), false);
+ BlockNode bn=new BlockNode();
+ state.addTreeCode(md,bn);
+ md.setDefaultConstructor();
+ cn.addMethod(md);
+ }
return cn;
}
checkField(cd,fd);
}
- boolean hasConstructor = false;
for(Iterator method_it=cd.getMethods(); method_it.hasNext();) {
- MethodDescriptor md=(MethodDescriptor)method_it.next();
- checkMethod(cd,md);
- hasConstructor |= md.isConstructor();
- }
- if((!hasConstructor) && (!cd.isEnum())) {
- // add a default constructor for this class
- MethodDescriptor md = new MethodDescriptor(new Modifiers(Modifiers.PUBLIC),
- cd.getSymbol(), false);
- BlockNode bn=new BlockNode();
- state.addTreeCode(md,bn);
- cd.addMethod(md);
+ MethodDescriptor md=(MethodDescriptor)method_it.next();
checkMethod(cd,md);
+ if(md.isDefaultConstructor() && (cd.getSuperDesc() != null)) {
+ // add the construction of it super class, can only be super()
+ NameDescriptor nd=new NameDescriptor("super");
+ MethodInvokeNode min=new MethodInvokeNode(nd);
+ BlockExpressionNode ben=new BlockExpressionNode(min);
+ BlockNode bn = state.getMethodBody(md);
+ bn.addFirstBlockStatement(ben);
+ }
}
}
}