Compare commits

..

No commits in common. "ad2101d7e82503fc4f40d23bec93248d1bc5e5ac" and "4e9e1034fa244f1c3e4bba8a6990cebae5ae57b5" have entirely different histories.

4 changed files with 60 additions and 95 deletions

Binary file not shown.

View file

@ -1,8 +1,5 @@
package dev.peerat.mapping; package dev.peerat.mapping;
import static dev.peerat.parser.visitor.Operator.*;
import static dev.peerat.parser.java.visitor.JavaVisitor.*;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.File; import java.io.File;
@ -27,6 +24,7 @@ import javax.tools.StandardLocation;
import dev.peerat.mapping.providers.Provider; import dev.peerat.mapping.providers.Provider;
import dev.peerat.mapping.providers.ProviderManager; import dev.peerat.mapping.providers.ProviderManager;
import dev.peerat.parser.ElementBuilder.Builder;
import dev.peerat.parser.Parser; import dev.peerat.parser.Parser;
import dev.peerat.parser.TokenValidator; import dev.peerat.parser.TokenValidator;
import dev.peerat.parser.java.Annotation; import dev.peerat.parser.java.Annotation;
@ -35,7 +33,6 @@ import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.JavaFile; import dev.peerat.parser.java.JavaFile;
import dev.peerat.parser.java.JavaParser; import dev.peerat.parser.java.JavaParser;
import dev.peerat.parser.java.JavaProject;
import dev.peerat.parser.java.operation.ReturnOperation; import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.java.value.InstanceValue; import dev.peerat.parser.java.value.InstanceValue;
import dev.peerat.parser.java.value.StaticValue; import dev.peerat.parser.java.value.StaticValue;
@ -70,72 +67,64 @@ public class TreasureProcessor extends AbstractProcessor{
return false; return false;
} }
JavaProject project = new JavaProject(); Map<File, JavaFile> map = new HashMap<>();
for(File workingDirectory : workingDir){ for(File workingDirectory : workingDir){
try { try {
parseProject(workingDirectory, project); parseClazz(workingDirectory, output, workingDirectory, map);
}catch(Exception ex){ }catch(Exception ex){
annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, ex.getMessage(), e))); annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, ex.getMessage(), e)));
} }
} }
Provider provider = null;
List<InstanceValue> ships = or( for(Entry<File, JavaFile> classes : map.entrySet()){
collect(allInstanceValue().named((name) -> name.equals("dev.peerat.mapping.Ship"))) List<InstanceValue> values = new ArrayList<>();
, classes.getValue().findAll((e) -> {
and( if(e instanceof InstanceValue){
allImport().named((name) -> name.equals("dev.peerat.mapping.Ship")) InstanceValue iv = (InstanceValue)e;
, return iv.getToken().getValue().equals("Ship()"); //can also be dev.peerat.mapping.Ship
collect(allInstanceValue().named((name) -> name.equals("Ship"))) }
) return false;
).visit(project).toList(); }, values);
if(ships.isEmpty()) return false; if(values.size() < 1) continue;
InstanceValue ship = (InstanceValue)values.get(0);
//TODO accept multiple instance of Ship String providerType = ((StaticValue)ship.getParameters().get(0)).getToken().getValue().replace("\"", "");
provider = ProviderManager.getInstance().getProvider(providerType);
InstanceValue ship = (InstanceValue)ships.get(0); }
String providerType = ((StaticValue)ship.getParameters().get(0)).getToken().getValue().replace("\"", "");
Provider provider = ProviderManager.getInstance().getProvider(providerType);
if(provider == null) return false; if(provider == null) return false;
try { try {
provider.init(output); provider.init(output);
throw new Exception(output.getAbsolutePath());
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
List<Class> treasures = or( // for(Entry<File, JavaFile> classes : map.entrySet()){
and( // Class treasure = classes.getValue().find((element) -> {
allImport().named((name) -> name.equals("dev.peerat.mapping.Treasure")) // if(element instanceof Class){
, // Class c = (Class)element;
allClass(). // return c.hasAnnotation((annotation) -> annotation.getName().getValue().equals("Treasure")); //can also be dev.peerat.mapping.Treasure
annotation( // }
annotation().nameFilter((name) -> name.equals("Treasure") || name.equals("dev.peerat.mapping.Treasure")) // return false;
) // });
) // if(treasure != null){
, // provider.mapTreasure(treasure);
allClass(). //// annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, classes.getKey().getName(), e)));
annotation( // List<Function> seaBottles = new ArrayList<>();
annotation().nameFilter((name) -> name.equals("dev.peerat.mapping.Treasure")) // treasure.findAll((element) -> {
) // if(element instanceof Function){
).visit(project).toList(); // Function function = (Function)element;
// return function.hasAnnotation((annotation) -> annotation.getName().getValue().equals("SeaBottle")); //can also be dev.peerat.mapping.SeaBottle
for(Class treasure : treasures){ // }
provider.mapTreasure(treasure); // return false;
// annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, classes.getKey().getName(), e))); // }, seaBottles);
List<Function> seaBottles = new ArrayList<>(); // for(Function function : seaBottles){
treasure.findAll((element) -> { // provider.mapBottle(treasure, function);
if(element instanceof Function){ // }
Function function = (Function)element; // }
return function.hasAnnotation((annotation) -> annotation.getName().getValue().equals("SeaBottle")); //can also be dev.peerat.mapping.SeaBottle // }
} //
return false;
}, seaBottles);
for(Function function : seaBottles){
provider.mapBottle(treasure, function);
}
}
// for(Entry<File, JavaFile> classes : map.entrySet()){ // for(Entry<File, JavaFile> classes : map.entrySet()){
// List<Class> noTreasures = new ArrayList<>(); // List<Class> noTreasures = new ArrayList<>();
// classes.getValue().findAll((element) -> { // classes.getValue().findAll((element) -> {
@ -159,30 +148,12 @@ public class TreasureProcessor extends AbstractProcessor{
// } // }
// } // }
// } // }
provider.complete(); // provider.complete();
return true; // return true;
} }
private static final Parser<JavaElement> PARSER = new JavaParser(); private static final Parser<JavaElement> PARSER = new JavaParser();
private void parseProject(File file, JavaProject project) throws Exception{
if(file.isDirectory()){
for(File child : file.listFiles()) parseProject(child, project);
return;
}
if(!file.getName().endsWith(".java")) return;
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
JavaFile javaFile = new JavaFile();
TokenValidator.TOKENS = 0;
TokenValidator.MAX_VALIDATE = 0;
PARSER.parse(reader, javaFile);
project.addFile(javaFile);
}catch(Exception ex){
error(null, null, file, new Exception(file.getName()+" | "+ex.getMessage()));
}
}
private void parseClazz(File source, File output, File file, Map<File, JavaFile> map) throws Exception{ private void parseClazz(File source, File output, File file, Map<File, JavaFile> map) throws Exception{
if(file.isDirectory()){ if(file.isDirectory()){
for(File child : file.listFiles()) parseClazz(source, output, child, map); for(File child : file.listFiles()) parseClazz(source, output, child, map);
@ -230,9 +201,9 @@ public class TreasureProcessor extends AbstractProcessor{
}else{ }else{
processOthers(file); processOthers(file);
} }
// Builder builder = new Builder(); Builder builder = new Builder();
// file.build(builder); file.build(builder);
// builder.build(writer); builder.build(writer);
} }

View file

@ -5,9 +5,6 @@ import java.io.File;
import dev.peerat.mapping.Ship; import dev.peerat.mapping.Ship;
import dev.peerat.parser.java.Class; import dev.peerat.parser.java.Class;
import dev.peerat.parser.java.Function; import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.value.InstanceValue;
import dev.peerat.parser.java.value.MethodCallValue;
public interface Provider{ public interface Provider{
@ -17,8 +14,7 @@ public interface Provider{
void mapBottle(Class clazz, Function function); void mapBottle(Class clazz, Function function);
void mapCreation(Class clazz, JavaElement container, InstanceValue value); void mapUses(Class clazz, Function function);
void mapEdit(Class clazz, JavaElement container, MethodCallValue value);
void complete(); void complete();

View file

@ -19,10 +19,10 @@ import java.util.List;
import dev.peerat.mapping.Ship; import dev.peerat.mapping.Ship;
import dev.peerat.mapping.providers.Provider; import dev.peerat.mapping.providers.Provider;
import dev.peerat.mapping.providers.ProviderManager; import dev.peerat.mapping.providers.ProviderManager;
import dev.peerat.parser.ElementBuilder.Builder;
import dev.peerat.parser.Token; import dev.peerat.parser.Token;
import dev.peerat.parser.java.Class; import dev.peerat.parser.java.Class;
import dev.peerat.parser.java.Function; import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.JavaFile; import dev.peerat.parser.java.JavaFile;
import dev.peerat.parser.java.Variable; import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.builder.JavaBuilder; import dev.peerat.parser.java.builder.JavaBuilder;
@ -31,7 +31,6 @@ import dev.peerat.parser.java.builder.JavaFunctionBuilder;
import dev.peerat.parser.java.operation.CatchOperation; import dev.peerat.parser.java.operation.CatchOperation;
import dev.peerat.parser.java.operation.ReturnOperation; import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.java.operation.TryOperation; import dev.peerat.parser.java.operation.TryOperation;
import dev.peerat.parser.java.value.InstanceValue;
import dev.peerat.parser.java.value.MethodCallValue; import dev.peerat.parser.java.value.MethodCallValue;
import dev.peerat.parser.java.value.Value; import dev.peerat.parser.java.value.Value;
@ -81,22 +80,21 @@ public class MySQLProvider implements Provider{
} }
@Override @Override
public void mapCreation(Class clazz, JavaElement container, InstanceValue value){ public void mapUses(Class clazz, Function function){
}
@Override
public void mapEdit(Class clazz, JavaElement container, MethodCallValue value){
} }
@Override @Override
public void complete(){ public void complete(){
JavaClassBuilder clazz = ofClass("MySQlRepository"); JavaClassBuilder clazz = ofClass("MySQlRepository");
for(MySQLRequestBuilder request : this.requests){ for(MySQLRequestBuilder request : this.requests){
Function base = request.getFunction(); Function base = request.getFunction();
JavaFunctionBuilder func = ofFunction().normalizeSignature(base).setName("getter_"+base.getName().getValue()).setPublic(); JavaFunctionBuilder func = ofFunction(base.getReturnType().getValue(), "getter_"+base.getName().getValue()).setPublic();
for(Variable params : base.getParameters()){
func.parameter(ofVariable(params.getType().getValue(), params.getName().getValue(), params.getValue()));
}
clazz.element( clazz.element(
func.element( func.element(
ofOperation("try{" ofOperation("try{"
@ -113,10 +111,10 @@ public class MySQLProvider implements Provider{
.clazz(clazz) .clazz(clazz)
.build(); .build();
try{ try{
// Builder builder = new Builder(); Builder builder = new Builder();
// file.build(builder); file.build(builder);
BufferedWriter writer = new BufferedWriter(new FileWriter(this.repo)); BufferedWriter writer = new BufferedWriter(new FileWriter(this.repo));
// builder.build(writer); builder.build(writer);
writer.flush(); writer.flush();
writer.close(); writer.close();
}catch(Exception ex){ }catch(Exception ex){