Parseur -> Build -> Adaptation to include the Cleaner Pool

This commit is contained in:
jeffcheasey88 2023-06-05 22:40:49 +02:00
parent 0159f9c5fc
commit 97aa0ac391
17 changed files with 179 additions and 99 deletions

View file

@ -0,0 +1,28 @@
package be.jeffcheasey88.peeratcode.parser.java;
import java.lang.reflect.Array;
import java.util.Iterator;
public class ArrayBuffer<E>{
private E[] elements;
public ArrayBuffer(java.lang.Class<?> type){
this.elements = (E[]) Array.newInstance(type, 0);
}
public void add(E e){
E[] copy = (E[]) Array.newInstance(e.getClass(), this.elements.length+1);
System.arraycopy(elements, 0, copy, 0, elements.length);
copy[elements.length] = e;
this.elements = copy;
}
public void append(java.util.function.Function<E, E> modifier){
this.elements[elements.length-1] = modifier.apply(this.elements[elements.length-1]);
}
public Iterator<E> iterator(){
return new ArrayIterator<E>(elements);
}
}

View file

@ -1,5 +1,6 @@
package be.jeffcheasey88.peeratcode.parser.java; package be.jeffcheasey88.peeratcode.parser.java;
import java.lang.reflect.Array;
import java.util.Iterator; import java.util.Iterator;
public class ArrayIterator<E> implements Iterator<E>{ public class ArrayIterator<E> implements Iterator<E>{
@ -8,7 +9,9 @@ public class ArrayIterator<E> implements Iterator<E>{
private int index; private int index;
public ArrayIterator(E[] elements){ public ArrayIterator(E[] elements){
this.elements = elements; E[] copy = (E[]) Array.newInstance(elements.getClass().getComponentType(), elements.length);
System.arraycopy(elements, 0, copy, 0, elements.length);
this.elements = copy;
} }
@Override @Override

View file

@ -100,17 +100,19 @@ public class Class extends JavaElement{
// } // }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
super.build(writer, tab); super.build(buffer, tab);
writer.write(Modifier.toString(modifier)+" "+this.name+"{\n"); buffer.append((s) -> s+=Modifier.toString(modifier)+" "+this.name+"{");
buffer.add("");
for(JavaElement child : this.childs){ for(JavaElement child : this.childs){
child.build(writer, tab+1); child.build(buffer, tab+1);
writer.write("\n"); buffer.add("");
} }
super.build(writer, tab); super.build(buffer, tab);
writer.write("}\n"); buffer.append((s) -> s+="}");
buffer.add("");
} }
@Override @Override

View file

@ -1,6 +1,5 @@
package be.jeffcheasey88.peeratcode.parser.java; package be.jeffcheasey88.peeratcode.parser.java;
import java.io.BufferedWriter;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
@ -95,17 +94,22 @@ public class Function extends OperationContainer{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
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(writer, tab); super.build(buffer, tab);
writer.write(Modifier.toString(modifier)+" "+(constructor ? "" : returnType+" ")+name+"("+param+") "+exceptions+"{\n");
for(JavaElement child : getChilds()) child.build(writer, tab+1); final String paramMod = param;
super.build(writer, tab); buffer.append((s) -> s+=Modifier.toString(modifier)+" "+(constructor ? "" : returnType+" ")+name+"("+paramMod+") "+exceptions+"{");
writer.write("}\n"); buffer.add("");
for(JavaElement child : getChilds()) child.build(buffer, tab+1);
super.build(buffer, tab);
buffer.append((s) -> s+="}");
buffer.add("");
} }
} }

View file

@ -1,6 +1,5 @@
package be.jeffcheasey88.peeratcode.parser.java; package be.jeffcheasey88.peeratcode.parser.java;
import java.io.BufferedWriter;
import java.util.List; import java.util.List;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
@ -12,9 +11,10 @@ public abstract class JavaElement {
public abstract <E extends JavaElement> E find(Function<JavaElement, Boolean> search, Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace); public abstract <E extends JavaElement> E find(Function<JavaElement, Boolean> search, Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace);
public abstract <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace); public abstract <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace);
public void build(BufferedWriter writer, int tab) throws Exception { public void build(ArrayBuffer<String> buffer, int tab) throws Exception {
String spacement = ""; String spacement = "";
for(int i = 0; i < tab; i++) spacement+="\t"; for(int i = 0; i < tab; i++) spacement+="\t";
writer.write(spacement); final String modifier = spacement;
buffer.append((s) -> s+=modifier);
} }
} }

View file

@ -7,6 +7,7 @@ import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
@ -19,8 +20,8 @@ public class JavaParser{
File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-backend\\src\\be\\jeffcheasey88\\peeratcode\\parser\\java\\Class.java"); File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-backend\\src\\be\\jeffcheasey88\\peeratcode\\parser\\java\\Class.java");
BufferedReader reader = new BufferedReader(new FileReader(file)); BufferedReader reader = new BufferedReader(new FileReader(file));
JavaParser parser = new JavaParser(reader); JavaParser parser = new JavaParser();
parser.parse(); parser.parse(reader);
System.out.println("build-----------------"); System.out.println("build-----------------");
parser.build(new BufferedWriter(new FileWriter(new File("/home/buildClazzFromParser.txt")))); parser.build(new BufferedWriter(new FileWriter(new File("/home/buildClazzFromParser.txt"))));
} }
@ -41,8 +42,8 @@ public class JavaParser{
BufferedReader reader = new BufferedReader(new FileReader(new File("/home/tmp.txt"))); BufferedReader reader = new BufferedReader(new FileReader(new File("/home/tmp.txt")));
JavaParser parser = new JavaParser(reader); JavaParser parser = new JavaParser();
parser.parse(); parser.parse(reader);
System.out.println("SHOW-----------------"); System.out.println("SHOW-----------------");
} }
@ -53,8 +54,8 @@ public class JavaParser{
BufferedReader reader = new BufferedReader(new FileReader(dir)); BufferedReader reader = new BufferedReader(new FileReader(dir));
try { try {
JavaParser parser = new JavaParser(reader); JavaParser parser = new JavaParser();
parser.parse(); parser.parse(reader);
Class clazz = parser.getClazz(); Class clazz = parser.getClazz();
System.out.println(clazz.getName()); System.out.println(clazz.getName());
@ -71,17 +72,15 @@ public class JavaParser{
private List<Import> imports; private List<Import> imports;
private Class clazz; private Class clazz;
private BufferedReader reader; private CleanerPool cleaner;
public JavaParser(BufferedReader reader){ public JavaParser(){}
this.reader = reader;
}
public void parse() throws Exception{ public void parse(BufferedReader reader) throws Exception{
String content = ""; String content = "";
int index; int index;
CleanerPool cleaner = new CleanerPool( cleaner = new CleanerPool(
new Cleaner("CONSTANT_STRING",'"','"'), new Cleaner("CONSTANT_STRING",'"','"'),
new Cleaner("CONSTANT_CHAR",'\'','\'')); new Cleaner("CONSTANT_CHAR",'\'','\''));
@ -136,7 +135,17 @@ public class JavaParser{
for(Import element : this.imports) writer.write("import "+element.getName()+";\n"); for(Import element : this.imports) writer.write("import "+element.getName()+";\n");
writer.write("\n"); writer.write("\n");
this.clazz.build(writer, 0); ArrayBuffer<String> buffer = new ArrayBuffer<String>(String.class);
buffer.add("");
this.clazz.build(buffer, 0);
Iterator<String> lines = buffer.iterator();
while(lines.hasNext()){
String line = lines.next();
line = this.cleaner.unzip(line, (s,p) -> s);
writer.write(line+"\n");
}
writer.flush(); writer.flush();
writer.close(); writer.close();
} }

View file

@ -1,5 +1,6 @@
package be.jeffcheasey88.peeratcode.parser.java; package be.jeffcheasey88.peeratcode.parser.java;
import java.io.BufferedWriter;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
@ -126,10 +127,12 @@ public class Variable extends JavaElement{
return this.value; return this.value;
} }
public void show(int tab){
String start = ""; @Override
for(int i = 0; i < tab; i++) start+="\t"; public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
System.out.println(start+Modifier.toString(modifier)+(modifier > 0 ? " ":"")+type+" "+name+(value == null ? ";":" = "+value+";")); super.build(buffer, tab);
buffer.append((s) -> s+=Modifier.toString(modifier)+(modifier > 0 ? " ":"")+type+" "+name+(value == null ? ";":" = "+value+";"));
buffer.add("");
} }
@Override @Override
@ -188,16 +191,21 @@ public class Variable extends JavaElement{
} }
@Override @Override
public void show(int tab){ public void build(ArrayBuffer<String> buffer, int tab) throws Exception {
String start = ""; String spacement = "";
for(int i = 0; i < tab; i++) start+="\t"; for(int i = 0; i < tab; i++) spacement+="\t";
final String sMod = spacement;
String vars = ""; String vars = "";
for(int i = 0; i < this.names.size(); i++){ for(int i = 0; i < this.names.size(); i++){
Variable value = this.values.get(i); Variable value = this.values.get(i);
vars+=","+this.names.get(i)+((value == null) ? "" : " = "+value); vars+=","+this.names.get(i)+((value == null) ? "" : " = "+value);
} }
vars = vars.substring(1); vars = vars.substring(1);
System.out.println(start+Modifier.toString(getModifier())+" "+getType()+" "+vars+";"); String varMod = vars;
buffer.append((s) -> s+=sMod+Modifier.toString(getModifier())+" "+getType()+" "+varMod+";");
buffer.add("");
} }
} }
} }

View file

@ -1,11 +1,11 @@
package be.jeffcheasey88.peeratcode.parser.java.operations; package be.jeffcheasey88.peeratcode.parser.java.operations;
import java.io.BufferedWriter;
import java.util.List; import java.util.List;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import be.jeffcheasey88.peeratcode.parser.java.ArrayBuffer;
import be.jeffcheasey88.peeratcode.parser.java.CleanerPool; import be.jeffcheasey88.peeratcode.parser.java.CleanerPool;
import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaElement;
@ -30,9 +30,10 @@ public class AssigmentOperation extends JavaElement{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
super.build(writer, tab); super.build(buffer, tab);
writer.write(variable+"= "+value+";\n"); buffer.append((s) -> s+=variable+" = "+value+";");
buffer.add("");
} }
@Override @Override

View file

@ -4,6 +4,7 @@ import java.io.BufferedWriter;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import be.jeffcheasey88.peeratcode.parser.java.ArrayBuffer;
import be.jeffcheasey88.peeratcode.parser.java.CleanerPool; import be.jeffcheasey88.peeratcode.parser.java.CleanerPool;
import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaElement;
@ -58,22 +59,27 @@ public class ConditionalOperation extends OperationContainer{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
boolean empty = getChilds().size() == 0; boolean empty = getChilds().size() == 0;
if(empty){ if(empty){
writer.write(";\n"); buffer.append((s) -> s+=";");
buffer.add("");
return; return;
} }
boolean oneChild = getChilds().size() == 1; boolean oneChild = getChilds().size() == 1;
if(oneChild) writer.write("\t"); if(oneChild) buffer.append((s) -> s+=" ");
else writer.write("{\n"); else{
buffer.append((s) -> s+="{");
buffer.add("");
}
for(JavaElement child : getChilds()) child.build(writer, oneChild ? 0 : tab+1); for(JavaElement child : getChilds()) child.build(buffer, oneChild ? 0 : tab+1);
if(!oneChild){ if(!oneChild){
super.build(writer, tab); super.build(buffer, tab);
writer.write("}\n"); buffer.append((s) -> s+="}");
buffer.add("");
} }
} }
@ -87,12 +93,13 @@ public class ConditionalOperation extends OperationContainer{
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
String spacement = ""; String spacement = "";
for(int i = 0; i < tab; i++) spacement+="\t"; for(int i = 0; i < tab; i++) spacement+="\t";
final String modSpace = spacement;
buffer.append((s) -> s+=modSpace+"if"+super.condition);
writer.write(spacement+"if"+super.condition); super.build(buffer, tab);
super.build(writer, tab+1);
} }
} }
@ -105,12 +112,13 @@ public class ConditionalOperation extends OperationContainer{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
String spacement = ""; String spacement = "";
for(int i = 0; i < tab; i++) spacement+="\t"; for(int i = 0; i < tab; i++) spacement+="\t";
final String modSpace = spacement;
buffer.append((s) -> s+=modSpace+"for"+super.condition);
writer.write(spacement+"for"+super.condition); super.build(buffer, tab);
super.build(writer, tab+1);
} }
} }
@ -123,12 +131,13 @@ public class ConditionalOperation extends OperationContainer{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
String spacement = ""; String spacement = "";
for(int i = 0; i < tab; i++) spacement+="\t"; for(int i = 0; i < tab; i++) spacement+="\t";
final String modSpace = spacement;
buffer.append((s) -> s+=modSpace+"while"+super.condition);
writer.write(spacement+"while"+super.condition); super.build(buffer, tab);
super.build(writer, tab+1);
} }
} }
} }

View file

@ -4,6 +4,7 @@ import java.io.BufferedWriter;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import be.jeffcheasey88.peeratcode.parser.java.ArrayBuffer;
import be.jeffcheasey88.peeratcode.parser.java.CleanerPool; import be.jeffcheasey88.peeratcode.parser.java.CleanerPool;
import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaElement;
@ -37,14 +38,16 @@ public class DoOperation extends OperationContainer{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
super.build(writer, tab); super.build(buffer, tab);
writer.write("do{\n"); buffer.append((s) -> s+="do{");
buffer.add("");
for(JavaElement child : getChilds()) child.build(writer, tab+1); for(JavaElement child : getChilds()) child.build(buffer, tab+1);
super.build(writer, tab); super.build(buffer, tab);
writer.write("}\n"); buffer.append((s) -> s+="}");
buffer.add("");
} }
} }

View file

@ -4,6 +4,7 @@ import java.io.BufferedWriter;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import be.jeffcheasey88.peeratcode.parser.java.ArrayBuffer;
import be.jeffcheasey88.peeratcode.parser.java.CleanerPool; import be.jeffcheasey88.peeratcode.parser.java.CleanerPool;
import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaElement;
@ -42,21 +43,23 @@ public class ElseOperation extends OperationContainer{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
super.build(writer, tab); super.build(buffer, tab);
writer.write("else "); buffer.append((s) -> s+="else ");
boolean oneOperation = getChilds().size() == 1; boolean oneOperation = getChilds().size() == 1;
if(oneOperation){ if(oneOperation){
getChilds().get(0).build(writer, 0); getChilds().get(0).build(buffer, 0);
return; return;
} }
writer.write("{\n"); buffer.append((s) -> s+="{");
for(JavaElement child : getChilds()) child.build(writer, tab+1); buffer.add("");
for(JavaElement child : getChilds()) child.build(buffer, tab+1);
super.build(writer, tab); super.build(buffer, tab);
writer.write("}\n"); buffer.append((s) -> s+="}");
buffer.add("");
} }
} }

View file

@ -6,6 +6,7 @@ import java.util.function.BiFunction;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import be.jeffcheasey88.peeratcode.parser.java.ArrayBuffer;
import be.jeffcheasey88.peeratcode.parser.java.CleanerPool; import be.jeffcheasey88.peeratcode.parser.java.CleanerPool;
import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaElement;
@ -46,9 +47,10 @@ public class LoopAffectOperation extends JavaElement{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception { public void build(ArrayBuffer<String> buffer, int tab) throws Exception {
super.build(writer, tab); super.build(buffer, tab);
writer.write("continue;\n"); buffer.append((s) -> s+="continue;");
buffer.add("");
} }
} }
@ -62,9 +64,10 @@ public class LoopAffectOperation extends JavaElement{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception { public void build(ArrayBuffer<String> buffer, int tab) throws Exception {
super.build(writer, tab); super.build(buffer, tab);
writer.write("break;\n"); buffer.append((s) -> s+="break;");
buffer.add("");
} }
} }
} }

View file

@ -6,6 +6,7 @@ import java.util.function.BiFunction;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import be.jeffcheasey88.peeratcode.parser.java.ArrayBuffer;
import be.jeffcheasey88.peeratcode.parser.java.CleanerPool; import be.jeffcheasey88.peeratcode.parser.java.CleanerPool;
import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaElement;
@ -34,9 +35,10 @@ public class MethodCallOperation extends JavaElement{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
super.build(writer, tab); super.build(buffer, tab);
writer.write(value+";\n"); buffer.append((s) -> s+=value+";");
buffer.add("");
} }
@Override @Override

View file

@ -6,6 +6,7 @@ import java.util.function.BiFunction;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import be.jeffcheasey88.peeratcode.parser.java.ArrayBuffer;
import be.jeffcheasey88.peeratcode.parser.java.CleanerPool; import be.jeffcheasey88.peeratcode.parser.java.CleanerPool;
import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaElement;
@ -38,15 +39,16 @@ public class ReturnOperation extends JavaElement{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
super.build(writer, tab); super.build(buffer, tab);
if(value != null){ if(value != null){
writer.write("return"); buffer.append((s) -> s+="return ");
value.build(writer, 0); value.build(buffer, 0);
writer.write(";\n"); buffer.add("");
return; return;
} }
writer.write("return "+toChange+";\n"); buffer.append((s) -> s+="return "+toChange+";");
buffer.add("");
} }

View file

@ -4,6 +4,7 @@ import java.io.BufferedWriter;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import be.jeffcheasey88.peeratcode.parser.java.ArrayBuffer;
import be.jeffcheasey88.peeratcode.parser.java.CleanerPool; import be.jeffcheasey88.peeratcode.parser.java.CleanerPool;
import be.jeffcheasey88.peeratcode.parser.java.JavaElement; import be.jeffcheasey88.peeratcode.parser.java.JavaElement;
@ -39,14 +40,16 @@ public class SynchronizedOperation extends OperationContainer{
} }
@Override @Override
public void build(BufferedWriter writer, int tab) throws Exception{ public void build(ArrayBuffer<String> buffer, int tab) throws Exception{
super.build(writer, tab); super.build(buffer, tab);
writer.write("synchronized"+this.include+"{\n"); buffer.append((s) -> s+="synchronized"+this.include+"{");
buffer.add("");
for(JavaElement child : getChilds()) child.build(writer, tab+1); for(JavaElement child : getChilds()) child.build(buffer, tab+1);
super.build(writer, tab); super.build(buffer, tab);
writer.write("}\n"); buffer.append((s) -> s+="}");
buffer.add("");
} }
} }

View file

@ -32,8 +32,8 @@ class OperationTest{
} }
}; };
JavaParser parser = new JavaParser(reader); JavaParser parser = new JavaParser();
parser.parse(); parser.parse(reader);
return parser; return parser;
} }

View file

@ -31,8 +31,8 @@ class SearchTest{
} }
}; };
JavaParser parser = new JavaParser(reader); JavaParser parser = new JavaParser();
parser.parse(); parser.parse(reader);
return parser; return parser;
} }