public void visitClass(ClassUnit classUnit, ScopeElement data){
    	emit(".class "+classUnit.getName());
    	if (classUnit.getSuperClass() != null) {
    		emit(".super "+classUnit.getSuperClass().getName());
    	} else {
    		emit(".super "+getType("Object"));
    	}
    	Iterator<Unit> memberUnits = classUnit.getMembersAndMethods().listIterator();
    	Unit memberUnit = null;
		MethodUnit methodUnit = null;
		VariableUnit variableUnit = null;
		// Variables
		emit("");
		while (memberUnits.hasNext()) {
			memberUnit = memberUnits.next();
			if (memberUnit instanceof VariableUnit) {			
				variableUnit = (VariableUnit) memberUnit;
				visitField(variableUnit, sf.getCurrentScope());
			}
		}
		emit("");
		if (!hasDefaultConstructor(classUnit.getMembersAndMethods())) {
			createDefaultConstructor(classUnit);
			emit("");
		}
		memberUnits = classUnit.getMembersAndMethods().listIterator();
		while (memberUnits.hasNext()) {
			memberUnit = memberUnits.next();
			if (memberUnit instanceof MethodUnit) {	
				methodUnit = (MethodUnit) memberUnit;
				sf.enterNewScopeForUnit(methodUnit, MODE);
				if (methodUnit.isConstructor()) {
					visitConstructor(methodUnit, sf.getCurrentScope());
				} else {
					visitMethod(methodUnit, sf.getCurrentScope());
				}
				sf.exitLastScope(1);
				emit("");
			}
		}
    }