....
This commit is contained in:
@@ -44,6 +44,23 @@ public abstract class BaseProcessor extends AbstractProcessor{
|
|||||||
|| type.equals("long") || type.equals("float") || type.equals("double") || type.equals("char");
|
|| type.equals("long") || type.equals("float") || type.equals("double") || type.equals("char");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getDefault(String value){
|
||||||
|
switch(value){
|
||||||
|
case "float":
|
||||||
|
case "double":
|
||||||
|
case "int":
|
||||||
|
case "long":
|
||||||
|
case "short":
|
||||||
|
case "char":
|
||||||
|
case "byte":
|
||||||
|
return "0";
|
||||||
|
case "boolean":
|
||||||
|
return "false";
|
||||||
|
default:
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static String simpleName(String str){
|
public static String simpleName(String str){
|
||||||
return str.contains(".") ? str.substring(str.lastIndexOf('.') + 1) : str;
|
return str.contains(".") ? str.substring(str.lastIndexOf('.') + 1) : str;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -335,24 +335,6 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
|
|
||||||
idBuilder.addStaticBlock(idStore.build());
|
idBuilder.addStaticBlock(idStore.build());
|
||||||
|
|
||||||
//create mock types of all components
|
|
||||||
for(Stype component : allComponents){
|
|
||||||
|
|
||||||
|
|
||||||
Array<Stype> dependencies = getDependencies(component);
|
|
||||||
Array<Stype> out = new Array<>();
|
|
||||||
out.add(component);
|
|
||||||
out.addAll(component.superclasses());
|
|
||||||
dependencies.each(dep -> {
|
|
||||||
out.add(dep);
|
|
||||||
out.addAll(dep.superclasses());
|
|
||||||
});
|
|
||||||
|
|
||||||
out.distinct();
|
|
||||||
|
|
||||||
Log.info("Dependencies of {0}:\n{1}\n\n", component, out.toString("\n", s -> "&lb> " + s));
|
|
||||||
}
|
|
||||||
|
|
||||||
write(idBuilder);
|
write(idBuilder);
|
||||||
}else{
|
}else{
|
||||||
//round 2: generate actual classes and implement interfaces
|
//round 2: generate actual classes and implement interfaces
|
||||||
@@ -394,6 +376,43 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
|
|
||||||
write(def.builder, imports.asArray());
|
write(def.builder, imports.asArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//create mock types of all components
|
||||||
|
for(Stype interf : interfaces){
|
||||||
|
Array<Stype> dependencies = interf.allInterfaces();
|
||||||
|
dependencies.add(interf);
|
||||||
|
Log.info(interf + ": sub " + interf.allSuperclasses() + " " + interf.allInterfaces());
|
||||||
|
|
||||||
|
Array<Smethod> methods = dependencies.flatMap(Stype::methods);
|
||||||
|
methods.sort(Structs.comparing(Object::toString));
|
||||||
|
|
||||||
|
ObjectSet<String> signatures = new ObjectSet<>();
|
||||||
|
|
||||||
|
TypeSpec.Builder nullBuilder = TypeSpec.classBuilder("Null" + interf.name().substring(0, interf.name().length() - 1))
|
||||||
|
.addModifiers(Modifier.PUBLIC, Modifier.FINAL);
|
||||||
|
|
||||||
|
nullBuilder.addSuperinterface(interf.tname());
|
||||||
|
|
||||||
|
for(Smethod method : methods){
|
||||||
|
String signature = method.toString();
|
||||||
|
if(signatures.contains(signature)) continue;
|
||||||
|
|
||||||
|
Stype type = method.type();
|
||||||
|
MethodSpec.Builder builder = MethodSpec.overriding(method.e).addModifiers(Modifier.PUBLIC, Modifier.FINAL);
|
||||||
|
|
||||||
|
if(!method.isVoid()){
|
||||||
|
builder.addStatement("return " + getDefault(method.ret().toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
nullBuilder.addMethod(builder.build());
|
||||||
|
|
||||||
|
signatures.add(signature);
|
||||||
|
}
|
||||||
|
|
||||||
|
//write(nullBuilder);
|
||||||
|
|
||||||
|
Log.info("Methods to override for {0}:\n{1}\n\n", interf, methods.toString("\n", s -> "&lg> &lb" + s));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,11 +54,11 @@ public class Selement<T extends Element>{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode(){
|
public int hashCode(){
|
||||||
return toString().hashCode();
|
return e.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o){
|
public boolean equals(Object o){
|
||||||
return o != null && toString().equals(o.toString());
|
return o != null && o.getClass() == getClass() && e == ((Selement)o).e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,10 +14,21 @@ public class Smethod extends Selement<ExecutableElement>{
|
|||||||
super(executableElement);
|
super(executableElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAny(Modifier... mod){
|
||||||
|
for(Modifier m : mod){
|
||||||
|
if(is(m)) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean is(Modifier mod){
|
public boolean is(Modifier mod){
|
||||||
return e.getModifiers().contains(mod);
|
return e.getModifiers().contains(mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Stype type(){
|
||||||
|
return new Stype((TypeElement)up());
|
||||||
|
}
|
||||||
|
|
||||||
public Array<TypeMirror> thrown(){
|
public Array<TypeMirror> thrown(){
|
||||||
return Array.with(e.getThrownTypes()).as(TypeMirror.class);
|
return Array.with(e.getThrownTypes()).as(TypeMirror.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,10 +24,19 @@ public class Stype extends Selement<TypeElement>{
|
|||||||
return Array.with(e.getInterfaces()).map(Stype::of);
|
return Array.with(e.getInterfaces()).map(Stype::of);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Array<Stype> allInterfaces(){
|
||||||
|
return interfaces().flatMap(Stype::allInterfaces).distinct();
|
||||||
|
}
|
||||||
|
|
||||||
public Array<Stype> superclasses(){
|
public Array<Stype> superclasses(){
|
||||||
return Array.with(BaseProcessor.typeu.directSupertypes(mirror())).map(Stype::of);
|
return Array.with(BaseProcessor.typeu.directSupertypes(mirror())).map(Stype::of);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Array<Stype> allSuperclasses(){
|
||||||
|
//this is truly PEAK efficiency
|
||||||
|
return superclasses().flatMap(Stype::allSuperclasses).distinct();
|
||||||
|
}
|
||||||
|
|
||||||
public Stype superclass(){
|
public Stype superclass(){
|
||||||
return new Stype((TypeElement)BaseProcessor.typeu.asElement(BaseProcessor.typeu.directSupertypes(mirror()).get(0)));
|
return new Stype((TypeElement)BaseProcessor.typeu.asElement(BaseProcessor.typeu.directSupertypes(mirror()).get(0)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
org.gradle.daemon=true
|
org.gradle.daemon=true
|
||||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||||
archash=e9bd792158afc4f72017d9bed995e448934e472e
|
archash=6c4b3d49c647e1d594bfd9c3e40db922f8516e5d
|
||||||
|
|||||||
Reference in New Issue
Block a user