Annotation -> Function
This commit is contained in:
parent
31fbc33fa6
commit
01107c788f
7 changed files with 70 additions and 19 deletions
48
src/be/jeffcheasey88/peeratcode/parser/java/Annotation.java
Normal file
48
src/be/jeffcheasey88/peeratcode/parser/java/Annotation.java
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package be.jeffcheasey88.peeratcode.parser.java;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class Annotation extends JavaElement{
|
||||||
|
|
||||||
|
private static Pattern PATTERN = Pattern.compile("^(\\s*@\\s*([^\\s\\^]*)\\s*(\\^GENERIC_PARENTHESIS\\d+)?)");
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
private String param;
|
||||||
|
|
||||||
|
public Annotation(){}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int parse(String content, CleanerPool global, CleanerPool local) throws Exception {
|
||||||
|
Matcher matcher = PATTERN.matcher(content);
|
||||||
|
matcher.lookingAt();
|
||||||
|
|
||||||
|
this.type = matcher.group(2);
|
||||||
|
this.param = matcher.group(3);
|
||||||
|
|
||||||
|
return matcher.group(1).length();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void build(ArrayBuffer<String> buffer, int tab) throws Exception {
|
||||||
|
super.build(buffer, tab);
|
||||||
|
buffer.append((s) -> s+="@"+type+(param == null ? "":param));
|
||||||
|
buffer.add("");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> search, Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -24,14 +24,6 @@ public class Class extends JavaElement{
|
||||||
Matcher matcher = PATTERN.matcher(content);
|
Matcher matcher = PATTERN.matcher(content);
|
||||||
matcher.matches();
|
matcher.matches();
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
}catch(Exception e) {
|
|
||||||
|
|
||||||
}finally {
|
|
||||||
System.out.println("Hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
String[] split = matcher.group(2).split("\\s+");
|
String[] split = matcher.group(2).split("\\s+");
|
||||||
for(int i = 0; i < split.length-1; i++){
|
for(int i = 0; i < split.length-1; i++){
|
||||||
this.modifier+=JavaParser.getModifier(split[i]);
|
this.modifier+=JavaParser.getModifier(split[i]);
|
||||||
|
|
|
@ -14,6 +14,7 @@ public class Function extends OperationContainer{
|
||||||
|
|
||||||
private static Pattern PATTERN = Pattern.compile("^(\\s*([^(]*)\\(([^)]*)\\)\\s*([^{]*)\\{)(.*)$");
|
private static Pattern PATTERN = Pattern.compile("^(\\s*([^(]*)\\(([^)]*)\\)\\s*([^{]*)\\{)(.*)$");
|
||||||
|
|
||||||
|
private List<Annotation> annotations;
|
||||||
private int modifier;
|
private int modifier;
|
||||||
private String returnType;
|
private String returnType;
|
||||||
private String name;
|
private String name;
|
||||||
|
@ -23,6 +24,7 @@ public class Function extends OperationContainer{
|
||||||
private boolean constructor;
|
private boolean constructor;
|
||||||
|
|
||||||
public Function(){
|
public Function(){
|
||||||
|
this.annotations = new ArrayList<>();
|
||||||
this.parameters = new ArrayList<>();
|
this.parameters = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +53,7 @@ public class Function extends OperationContainer{
|
||||||
private static Pattern UNZIP_MAJ = Pattern.compile(">(?<e>[^>\\d,;(])");
|
private static Pattern UNZIP_MAJ = Pattern.compile(">(?<e>[^>\\d,;(])");
|
||||||
private static Pattern UNZIP_ARRAY = Pattern.compile("](?<e>[^\\[\\d,;])");
|
private static Pattern UNZIP_ARRAY = Pattern.compile("](?<e>[^\\[\\d,;])");
|
||||||
|
|
||||||
private void attribute(String content){
|
private void attribute(String content) throws Exception{
|
||||||
CleanerPool generic = new CleanerPool(
|
CleanerPool generic = new CleanerPool(
|
||||||
new Cleaner("GENERIC_TYPE_",'<','>'),
|
new Cleaner("GENERIC_TYPE_",'<','>'),
|
||||||
new Cleaner("GENERIC_ARRAY",'[',']'));
|
new Cleaner("GENERIC_ARRAY",'[',']'));
|
||||||
|
@ -67,8 +69,15 @@ public class Function extends OperationContainer{
|
||||||
Iterator<String> values = new ArrayIterator<>(unzip.split("\\s+"));
|
Iterator<String> values = new ArrayIterator<>(unzip.split("\\s+"));
|
||||||
String value = null;
|
String value = null;
|
||||||
int modifier;
|
int modifier;
|
||||||
while(values.hasNext() && (modifier = JavaParser.getModifier(value = values.next())) > 0){
|
while(values.hasNext() && ((value = values.next()).charAt(0) == '@')){
|
||||||
this.modifier+=modifier;
|
Annotation annotation = new Annotation();
|
||||||
|
annotation.parse(value, null, generic);
|
||||||
|
this.annotations.add(annotation);
|
||||||
|
}
|
||||||
|
if((modifier = JavaParser.getModifier(value)) > 0){
|
||||||
|
do{
|
||||||
|
this.modifier+=modifier;
|
||||||
|
}while(values.hasNext() && (modifier = JavaParser.getModifier(value = values.next())) > 0);
|
||||||
}
|
}
|
||||||
if(this.returnType == null){
|
if(this.returnType == null){
|
||||||
this.returnType = value;
|
this.returnType = value;
|
||||||
|
@ -95,15 +104,16 @@ public class Function extends OperationContainer{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
|
public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
|
||||||
|
for(Annotation annotation : this.annotations) annotation.build(buffer, tab);
|
||||||
|
|
||||||
String param = "";
|
String param = "";
|
||||||
for(Variable v : this.parameters) param+=","+v.getType()+" "+v.getName()+"";
|
for(Variable v : this.parameters) param+=","+v.getType()+" "+v.getName()+"";
|
||||||
if(!param.isEmpty()) param = param.substring(1);
|
if(!param.isEmpty()) param = param.substring(1);
|
||||||
super.build(buffer, tab);
|
|
||||||
|
|
||||||
final String paramMod = param;
|
final String paramMod = param;
|
||||||
|
|
||||||
boolean empty = getChilds().size() == 0;
|
boolean empty = getChilds().size() == 0;
|
||||||
|
|
||||||
|
super.build(buffer, tab);
|
||||||
buffer.append((s) -> s+=Modifier.toString(modifier)+" "+(constructor ? "" : returnType+" ")+name+"("+paramMod+") "+exceptions+"{"+((empty ? "}":"")));
|
buffer.append((s) -> s+=Modifier.toString(modifier)+" "+(constructor ? "" : returnType+" ")+name+"("+paramMod+") "+exceptions+"{"+((empty ? "}":"")));
|
||||||
buffer.add("");
|
buffer.add("");
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,7 @@ public class JavaParser{
|
||||||
private List<Import> imports;
|
private List<Import> imports;
|
||||||
private Class clazz;
|
private Class clazz;
|
||||||
|
|
||||||
|
//later, maybe put string in the element
|
||||||
private CleanerPool cleaner;
|
private CleanerPool cleaner;
|
||||||
|
|
||||||
public JavaParser(){}
|
public JavaParser(){}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class ConditionalOperation extends OperationContainer{
|
||||||
matcher.lookingAt();
|
matcher.lookingAt();
|
||||||
|
|
||||||
this.condition = local.unzipOne(matcher.group(2), (s,p) -> s);
|
this.condition = local.unzipOne(matcher.group(2), (s,p) -> s);
|
||||||
System.out.println("CONDITION "+condition);
|
// System.out.println("CONDITION "+condition);
|
||||||
|
|
||||||
int index = matcher.group(1).length();
|
int index = matcher.group(1).length();
|
||||||
content = content.substring(index);
|
content = content.substring(index);
|
||||||
|
|
|
@ -21,22 +21,22 @@ public abstract class OperationContainer extends JavaElement{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int parse(String content, CleanerPool global, CleanerPool local) throws Exception{
|
public int parse(String content, CleanerPool global, CleanerPool local) throws Exception{
|
||||||
System.out.println("OperationContainer.parse -> "+content);
|
// System.out.println("OperationContainer.parse -> "+content);
|
||||||
while(!(content.replaceAll("\\s+", "").isEmpty())) content = internalParse(content, global, local);
|
while(!(content.replaceAll("\\s+", "").isEmpty())) content = internalParse(content, global, local);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int parseOne(String content, CleanerPool global, CleanerPool local) throws Exception{
|
public int parseOne(String content, CleanerPool global, CleanerPool local) throws Exception{
|
||||||
System.out.println("OperationContainer.parseOne -> "+content);
|
// System.out.println("OperationContainer.parseOne -> "+content);
|
||||||
String modify = internalParse(content, global, local);
|
String modify = internalParse(content, global, local);
|
||||||
return content.length()-modify.length();
|
return content.length()-modify.length();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String internalParse(String content, CleanerPool global, CleanerPool local) throws Exception{
|
private String internalParse(String content, CleanerPool global, CleanerPool local) throws Exception{
|
||||||
System.out.println("OperationContainer.internalParse -> "+content);
|
// System.out.println("OperationContainer.internalParse -> "+content);
|
||||||
JavaElement operation = FACTORY.buildOperation(content);
|
JavaElement operation = FACTORY.buildOperation(content);
|
||||||
|
|
||||||
System.out.println(operation.getClass().getSimpleName()+" operation = FACTORY.buildOperation();");
|
// System.out.println(operation.getClass().getSimpleName()+" operation = FACTORY.buildOperation();");
|
||||||
int index = operation.parse(content, global, local);
|
int index = operation.parse(content, global, local);
|
||||||
content = content.substring(index);
|
content = content.substring(index);
|
||||||
if(operation instanceof Variable){
|
if(operation instanceof Variable){
|
||||||
|
|
|
@ -82,7 +82,7 @@ public class OperationFactory{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public JavaElement buildOperation(String content) throws Exception{
|
public JavaElement buildOperation(String content) throws Exception{
|
||||||
System.out.println("Factory.buildOperation -> "+content);
|
// System.out.println("Factory.buildOperation -> "+content);
|
||||||
CleanerPool generic = new CleanerPool(
|
CleanerPool generic = new CleanerPool(
|
||||||
new Cleaner("GENERIC_ARRAY",'[',']'),
|
new Cleaner("GENERIC_ARRAY",'[',']'),
|
||||||
new Cleaner("GENERIC_TYPE_",'<','>'));
|
new Cleaner("GENERIC_TYPE_",'<','>'));
|
||||||
|
|
Loading…
Add table
Reference in a new issue