Include Ship in running programs (before was only for compilation)

This commit is contained in:
jeffcheasey88 2024-02-28 22:38:10 +01:00
parent 69c4fc8015
commit 53f8c3d2eb
6 changed files with 123 additions and 53 deletions

Binary file not shown.

View file

@ -2,6 +2,7 @@ package dev.peerat.mapping;
import dev.peerat.mapping.providers.Compass;
import dev.peerat.mapping.providers.Map;
import dev.peerat.mapping.providers.ProviderManager;
public class Ship{
@ -15,5 +16,19 @@ public class Ship{
this.map = map;
}
public void setSails() throws Exception{}
public String getType(){
return this.type;
}
public Compass getCompass(){
return this.compass;
}
public Map getMap(){
return this.map;
}
public void setSails() throws Exception{
ProviderManager.getInstance().register(this);
}
}

View file

@ -94,60 +94,61 @@ public class TreasureProcessor extends AbstractProcessor{
try {
provider.init(output);
throw new Exception(output.getAbsolutePath());
} catch (Exception e) {
throw new RuntimeException(e);
}
for(Entry<File, JavaFile> classes : map.entrySet()){
Class treasure = classes.getValue().find((element) -> {
if(element instanceof Class){
Class c = (Class)element;
return c.hasAnnotation((annotation) -> annotation.getName().getValue().equals("Treasure")); //can also be dev.peerat.mapping.Treasure
}
return false;
});
if(treasure != null){
provider.mapTreasure(treasure);
// annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, classes.getKey().getName(), e)));
List<Function> seaBottles = new ArrayList<>();
treasure.findAll((element) -> {
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()){
List<Class> noTreasures = new ArrayList<>();
classes.getValue().findAll((element) -> {
if(element instanceof Class){
Class c = (Class)element;
return !c.hasAnnotation((annotation) -> annotation.getName().getValue().equals("Treasure")); //can also be dev.peerat.mapping.Treasure
}
return false;
}, noTreasures);
for(Class clazz : noTreasures){
List<Function> functions = new ArrayList<>();
clazz.findAll((element) -> {
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;
}, functions);
for(Function function : functions){
provider.mapUses(clazz, function);
}
}
}
provider.complete();
return true;
// for(Entry<File, JavaFile> classes : map.entrySet()){
// Class treasure = classes.getValue().find((element) -> {
// if(element instanceof Class){
// Class c = (Class)element;
// return c.hasAnnotation((annotation) -> annotation.getName().getValue().equals("Treasure")); //can also be dev.peerat.mapping.Treasure
// }
// return false;
// });
// if(treasure != null){
// provider.mapTreasure(treasure);
//// annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, classes.getKey().getName(), e)));
// List<Function> seaBottles = new ArrayList<>();
// treasure.findAll((element) -> {
// 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()){
// List<Class> noTreasures = new ArrayList<>();
// classes.getValue().findAll((element) -> {
// if(element instanceof Class){
// Class c = (Class)element;
// return !c.hasAnnotation((annotation) -> annotation.getName().getValue().equals("Treasure")); //can also be dev.peerat.mapping.Treasure
// }
// return false;
// }, noTreasures);
// for(Class clazz : noTreasures){
// List<Function> functions = new ArrayList<>();
// clazz.findAll((element) -> {
// 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;
// }, functions);
// for(Function function : functions){
// provider.mapUses(clazz, function);
// }
// }
// }
// provider.complete();
// return true;
}
private static final Parser<JavaElement> PARSER = new JavaParser();

View file

@ -2,6 +2,7 @@ package dev.peerat.mapping.providers;
import java.io.File;
import dev.peerat.mapping.Ship;
import dev.peerat.parser.java.Class;
import dev.peerat.parser.java.Function;
@ -16,4 +17,6 @@ public interface Provider{
void mapUses(Class clazz, Function function);
void complete();
void register(Ship ship) throws Exception;
}

View file

@ -3,6 +3,8 @@ package dev.peerat.mapping.providers;
import java.util.HashMap;
import java.util.Map;
import dev.peerat.mapping.Ship;
public class ProviderManager{
private static final ProviderManager SINGLETON = new ProviderManager();
@ -21,6 +23,10 @@ public class ProviderManager{
this.providers.put(name, provider);
}
public void register(Ship ship) throws Exception{
this.providers.get(ship.getType()).register(ship);
}
public Provider getProvider(String name){
return this.providers.get(name);
}

View file

@ -5,9 +5,11 @@ import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import dev.peerat.mapping.Ship;
import dev.peerat.mapping.providers.Provider;
import dev.peerat.mapping.providers.ProviderManager;
import dev.peerat.parser.ElementBuilder.Builder;
@ -17,7 +19,11 @@ import dev.peerat.parser.java.Class;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.Value;
import dev.peerat.parser.java.Value.MethodCallValue;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.operation.CatchOperation;
import dev.peerat.parser.java.operation.MethodCallOperation;
import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.java.operation.TryOperation;
public class MySQLProvider implements Provider{
@ -87,8 +93,30 @@ public class MySQLProvider implements Provider{
Modifier.PUBLIC,
null,
new Token(0,0,base.getReturnType().getValue(), null),
new Token(0,0,base.getName().getValue(),null),
new Token(0,0,"getter_"+base.getName().getValue(),null),
base.getParameters());
TryOperation tryOp = new TryOperation();
tryOp.addOperation(new MethodCallOperation((Value)null, new Token(0,0,"ensureConnection()",null), null));
tryOp.addVariable(
new Variable(
null,
0,
new Token(0,0,"PreparedStatement",null),
new Token(0,0,"stmt",null),
false,
new MethodCallValue(
new Value(new Token(0,0,"con",null)),
null,
new Token(0,0,"prepareStatement",null),
Arrays.asList(new Value(new Token(0,0,request.build(),null))))));
CatchOperation catchOp = new CatchOperation(Arrays.asList(new Token(0,0,"Exception",null)), new Token(0,0,"e", null));
catchOp.addOperation(new MethodCallOperation(new Value(new Token(0,0,"e",null)), new Token(0,0,"printStackTrace()", null), null));
func.addOperation(tryOp);
func.addOperation(catchOp);
clazz.addFunction(func);
}
@ -104,4 +132,21 @@ public class MySQLProvider implements Provider{
throw new RuntimeException(ex);
}
}
@Override
public void register(Ship ship) throws Exception {
}
/*
* try{
* ensureConnection();
* PreparedStatement stmt = con.prepareStatement(REQUEST);
* //bind
* //execute
* //build object
* }catch(Exception ex){
* ex.printStackTrace();
* }
*/
}