diff --git a/PeerAtCodeParser.jar b/PeerAtCodeParser.jar index d3bcd0d..076c095 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 1048522..e00e5c7 100644 --- a/src/dev/peerat/mapping/TreasureProcessor.java +++ b/src/dev/peerat/mapping/TreasureProcessor.java @@ -23,6 +23,7 @@ import javax.tools.FileObject; import javax.tools.StandardLocation; import dev.peerat.mapping.providers.Provider; +import dev.peerat.mapping.providers.ProviderManager; import dev.peerat.parser.ElementBuilder.Builder; import dev.peerat.parser.Parser; import dev.peerat.parser.TokenValidator; @@ -33,6 +34,7 @@ import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.JavaFile; import dev.peerat.parser.java.JavaParser; import dev.peerat.parser.java.Value; +import dev.peerat.parser.java.Value.InstanceValue; import dev.peerat.parser.java.operation.ReturnOperation; public class TreasureProcessor extends AbstractProcessor{ @@ -68,13 +70,22 @@ public class TreasureProcessor extends AbstractProcessor{ } Provider provider = null; for(Entry classes : map.entrySet()){ - List values = new ArrayList<>(); - classes.getValue().findAll((e) -> e instanceof Value, values); + List values = new ArrayList<>(); + classes.getValue().findAll((e) -> { + if(e instanceof InstanceValue){ + InstanceValue iv = (InstanceValue)e; + return iv.getToken().getValue().equals("Ship()"); //can also be dev.peerat.mapping.Ship + } + return false; + }, 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 + InstanceValue ship = (InstanceValue)values.get(0); + String providerType = ship.getParameters().get(0).getToken().getValue(); + provider = ProviderManager.getInstance().getProvider(providerType); } + if(provider == null) return false; + for(Entry classes : map.entrySet()){ Class treasure = classes.getValue().find((element) -> { if(element instanceof Class){ diff --git a/src/dev/peerat/mapping/providers/ProviderManager.java b/src/dev/peerat/mapping/providers/ProviderManager.java new file mode 100644 index 0000000..59888f6 --- /dev/null +++ b/src/dev/peerat/mapping/providers/ProviderManager.java @@ -0,0 +1,28 @@ +package dev.peerat.mapping.providers; + +import java.util.HashMap; +import java.util.Map; + +public class ProviderManager{ + + private static final ProviderManager SINGLETON = new ProviderManager(); + + public static ProviderManager getInstance(){ + return SINGLETON; + } + + private Map providers; + + private ProviderManager(){ + this.providers = new HashMap<>(); + } + + public void register(String name, Provider provider){ + this.providers.put(name, provider); + } + + public Provider getProvider(String name){ + return this.providers.get(name); + } + +} diff --git a/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java b/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java index fac188c..a291f47 100644 --- a/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java +++ b/src/dev/peerat/mapping/providers/mysql/MySQlProvider.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import dev.peerat.mapping.providers.Provider; +import dev.peerat.mapping.providers.ProviderManager; import dev.peerat.parser.java.Class; import dev.peerat.parser.java.Function; import dev.peerat.parser.java.Value; @@ -11,9 +12,13 @@ import dev.peerat.parser.java.operation.ReturnOperation; public class MySQlProvider implements Provider{ + static{ + ProviderManager.getInstance().register("mysql", new MySQlProvider()); + } + private List treasures; - public MySQlProvider(){ + private MySQlProvider(){ this.treasures = new ArrayList<>(); }