//NOTE: We scan linearly with NO recursion BUT when we hit an object like Activity.java
//that has a reference to Account.java and so the MetaClass of Activity has fields and that
//field needs a reference to the MetaClass of Account. To solve this, it creates a shell
//of MetaClass that will be filled in here when Account gets scanned(if it gets scanned
//after Activity that is). You can open call heirarchy on findOrCreateMetaClass ;).
MetaAbstractClass classMeta = metaInfo.findOrCreate(clazz);
NoSqlInheritance annotation = clazz.getAnnotation(NoSqlInheritance.class);
DboTableMeta metaDbo = classMeta.getMetaDbo();
if(classMeta instanceof MetaClassInheritance) {
MetaClassInheritance classMeta2 = (MetaClassInheritance) classMeta;
scanMultipleClasses(annotation, classMeta2);
} else {
MetaClassSingle classMeta2 = (MetaClassSingle)classMeta;
scanForAnnotations(classMeta2);
scanSingle(classMeta2, metaDbo);
}
if(classMeta.getIdField() == null && !metaDbo.isEmbeddable() && clazz.getSuperclass() != java.lang.Object.class)
throw new IllegalArgumentException("Entity="+classMeta.getMetaClass()+" has no field annotated with @NoSqlId and that is required");
metaInfo.addTableNameLookup(classMeta);
databaseInfo.addMetaClassDbo(classMeta.getMetaDbo());
}