diff --git a/PeerAtCodeParser.jar b/PeerAtCodeParser.jar index a480240..d3bcd0d 100644 Binary files a/PeerAtCodeParser.jar and b/PeerAtCodeParser.jar differ diff --git a/src/dev/peerat/mapping/TreasureProcessor.java b/src/dev/peerat/mapping/TreasureProcessor.java index 4fffc74..1048522 100644 --- a/src/dev/peerat/mapping/TreasureProcessor.java +++ b/src/dev/peerat/mapping/TreasureProcessor.java @@ -22,6 +22,7 @@ import javax.tools.Diagnostic.Kind; import javax.tools.FileObject; import javax.tools.StandardLocation; +import dev.peerat.mapping.providers.Provider; import dev.peerat.parser.ElementBuilder.Builder; import dev.peerat.parser.Parser; import dev.peerat.parser.TokenValidator; @@ -31,7 +32,6 @@ import dev.peerat.parser.java.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.JavaFile; import dev.peerat.parser.java.JavaParser; -import dev.peerat.parser.java.Operation; import dev.peerat.parser.java.Value; import dev.peerat.parser.java.operation.ReturnOperation; @@ -66,13 +66,62 @@ public class TreasureProcessor extends AbstractProcessor{ annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, ex.getMessage(), e))); } } + Provider provider = null; for(Entry classes : map.entrySet()){ - List values = new ArrayList<>(); - classes.getValue().findAll((e) -> e instanceof Operation, values); + List values = new ArrayList<>(); + classes.getValue().findAll((e) -> e instanceof Value, values); if(values.size() < 1) continue; // annotations.forEach((a) -> roundEnv.getElementsAnnotatedWith(a).forEach((e) -> processingEnv.getMessager().printMessage(Kind.ERROR, classes.getKey().getName()+" | "+values, e))); //ship } + + for(Entry 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); + List 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; + }, null); + for(Function function : seaBottles){ + provider.mapBottle(treasure, function); + } + } + } + + for(Entry classes : map.entrySet()){ + List 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 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); + } + } + } return true; } diff --git a/src/dev/peerat/mapping/providers/ProviderMapper.java b/src/dev/peerat/mapping/providers/Provider.java similarity index 88% rename from src/dev/peerat/mapping/providers/ProviderMapper.java rename to src/dev/peerat/mapping/providers/Provider.java index ef6b80b..9c2f8fd 100644 --- a/src/dev/peerat/mapping/providers/ProviderMapper.java +++ b/src/dev/peerat/mapping/providers/Provider.java @@ -3,7 +3,7 @@ package dev.peerat.mapping.providers; import dev.peerat.parser.java.Class; import dev.peerat.parser.java.Function; -public interface ProviderMapper{ +public interface Provider{ void mapTreasure(Class clazz); diff --git a/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java b/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java index 83aefb5..fac188c 100644 --- a/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java +++ b/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java @@ -3,13 +3,13 @@ package dev.peerat.mapping.providers.mysql; import java.util.ArrayList; import java.util.List; -import dev.peerat.mapping.providers.ProviderMapper; +import dev.peerat.mapping.providers.Provider; import dev.peerat.parser.java.Class; import dev.peerat.parser.java.Function; import dev.peerat.parser.java.Value; import dev.peerat.parser.java.operation.ReturnOperation; -public class MySQlProvider implements ProviderMapper{ +public class MySQlProvider implements Provider{ private List treasures;