Compare commits

..

2 commits

Author SHA1 Message Date
jeffcheasey88
ce15d7e435 [Base] Printer + One Visitor per Value type (base) 2025-04-27 11:53:33 +02:00
jeffcheasey88
f4cf250de0 Remove ElementBuilder -> will become a Printer in a different package later. 2025-04-24 16:44:03 +02:00
81 changed files with 1154 additions and 486 deletions

View file

@ -1,48 +0,0 @@
package dev.peerat.parser;
import java.io.BufferedWriter;
import java.util.LinkedList;
import java.util.List;
public interface ElementBuilder{
void build(Builder builder) throws Exception;
public static class Builder{
private List<Token> tokens;
public Builder(){
this.tokens = new LinkedList<>();
this.tokens.add(new Token(1,1,"", TokenType.GROUP));
}
public void append(Token token){
if(token == null) throw new NullPointerException();
this.tokens.add(token);
}
public void append(String value){
Token last = tokens.get(tokens.size()-1);
append(new Token(last.getLineNumber(), last.getCharacterNumber()+last.getValue().length(), value, TokenType.GROUP));
}
public void build(BufferedWriter writer) throws Exception{
int character = 1;
int line = 1;
for(Token token : tokens){
while(line < token.getLineNumber()){
writer.write("\n");
line++;
}
while(character < token.getCharacterNumber()){
writer.write(" ");
character++;
}
writer.write(token.getValue());
character+=token.getValue().length();
}
}
}
}

View file

@ -2,12 +2,13 @@ package dev.peerat.parser.java;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.BiFunction;
import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class Annotation extends JavaElement{
@ -50,15 +51,6 @@ public class Annotation extends JavaElement{
return false;
}
@Override
public void build(Builder builder) throws Exception{
if(annotations != null){
for(Annotation annotation : this.annotations){
annotation.build(builder);
}
}
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
if(annotations != null){
@ -100,24 +92,6 @@ public class Annotation extends JavaElement{
return this.values;
}
@Override
public void build(Builder builder) throws Exception{
System.out.println("build annotation "+name+" | "+values);
builder.append(name);
if(values != null && values.size() > 0){
builder.append("(");
for(Entry<Token,Value> entry : values.entrySet()){
if(entry.getKey() != null){
builder.append(entry.getKey());
builder.append("=");
}
entry.getValue().build(builder);
builder.append(","); //replace by iterator splitter method
}
builder.append(")");
}
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
if(this.values != null){
@ -139,7 +113,7 @@ public class Annotation extends JavaElement{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
@ -150,4 +124,5 @@ public class Annotation extends JavaElement{
return bag;
}
}

View file

@ -5,6 +5,7 @@ import java.util.List;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class AnnotationClass extends ClassBase{
@ -41,25 +42,6 @@ public class AnnotationClass extends ClassBase{
return this.elements;
}
@Override
public void build(Builder builder) throws Exception{
super.build(builder);
builder.append("@interface");
builder.append(getName());
if(extend != null){
builder.append(" extends ");
builder.append(extend);
}
builder.append("{");
if(elements != null){
for(JavaElement element : this.elements){
element.build(builder);
}
}
builder.append("}");
}
@Override
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
E annotation = super.find(finder);
@ -85,7 +67,7 @@ public class AnnotationClass extends ClassBase{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();

View file

@ -5,6 +5,7 @@ import java.util.List;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class Class extends ClassBase{
@ -52,29 +53,6 @@ public class Class extends ClassBase{
return this.elements;
}
@Override
public void build(Builder builder) throws Exception{
super.build(builder);
builder.append("class ");
builder.append(getName());
if(extend != null){
builder.append(" extends ");
builder.append(extend);
}
if(implement != null){
builder.append(" implements ");
builder.append(implement);
}
builder.append("{");
if(elements != null){
for(JavaElement element : this.elements){
element.build(builder);
}
}
builder.append("}");
}
@Override
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
E annotation = super.find(finder);
@ -100,13 +78,15 @@ public class Class extends ClassBase{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
System.out.println("VISIT CLASS "+visitor);
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(super.visit(visitor));
for(JavaElement element : this.elements){
System.out.println("VISIT CLASS "+visitor+" -> "+element);
bag.merge(element.visit(visitor));
}

View file

@ -9,6 +9,7 @@ import dev.peerat.parser.java.Annotation.AnnotableBuffer;
import dev.peerat.parser.java.Function.FunctionContainer;
import dev.peerat.parser.java.Variable.VariableContainer;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
@ -47,7 +48,7 @@ public abstract class ClassBase extends Annotable implements AnnotableBuffer, Cl
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor){
public VisitorBag visit(Visitor<JavaElement> visitor){
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
List<Annotation> annotations = getAnnotations();

View file

@ -5,6 +5,7 @@ import java.util.List;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class Enumeration extends ClassBase{
@ -46,25 +47,6 @@ public class Enumeration extends ClassBase{
return this.elements;
}
@Override
public void build(Builder builder) throws Exception{
super.build(builder);
builder.append("enum");
builder.append(getName());
if(extend != null){
builder.append(" extends ");
builder.append(extend);
}
builder.append("{");
if(elements != null){
for(JavaElement element : this.elements){
element.build(builder);
}
}
builder.append("}");
}
@Override
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
E annotation = super.find(finder);
@ -90,7 +72,7 @@ public class Enumeration extends ClassBase{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();

View file

@ -7,11 +7,13 @@ import java.util.List;
import dev.peerat.parser.Token;
import dev.peerat.parser.TokenType;
import dev.peerat.parser.java.Annotation.Annotable;
import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.Variable.VariableContainer;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.operation.Operation.OperationContainer;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.value.Value.ValueContainer;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class Function extends Annotable implements VariableContainer, OperationContainer, ValueContainer{
@ -97,41 +99,6 @@ public class Function extends Annotable implements VariableContainer, OperationC
return this.elements;
}
@Override
public void build(Builder builder) throws Exception{
super.build(builder);
String mod = Modifier.toString(this.mod);
builder.append(new Token(type.getLineNumber(), type.getCharacterNumber()-(mod.length()+1), mod, TokenType.GROUP));
builder.append(" ");
if(generic != null){
builder.append(generic);
builder.append(" ");
}
builder.append(type);
builder.append(" ");
builder.append(name);
builder.append("(");
if(parameters != null){
for(Variable param : this.parameters){
param.build(builder);
}
}
builder.append(")");
if(throwables != null){
builder.append("throws");
for(Token token : throwables){
builder.append(token);
}
}
builder.append("{");
if(elements != null){
for(JavaElement content : this.elements){
content.build(builder);
}
}
builder.append("}");
}
@Override
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
E annotation = super.find(finder);
@ -168,7 +135,7 @@ public class Function extends Annotable implements VariableContainer, OperationC
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor){
public VisitorBag visit(Visitor<JavaElement> visitor){
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();

View file

@ -5,6 +5,7 @@ import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class Import extends JavaElement{
@ -25,11 +26,6 @@ public class Import extends JavaElement{
return this.value;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -41,7 +37,7 @@ public class Import extends JavaElement{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return null;
}

View file

@ -5,6 +5,7 @@ import java.util.List;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class Interface extends ClassBase{
@ -46,25 +47,6 @@ public class Interface extends ClassBase{
return this.elements;
}
@Override
public void build(Builder builder) throws Exception{
super.build(builder);
builder.append("interface");
builder.append(getName());
if(extend != null){
builder.append(" extends ");
builder.append(extend);
}
builder.append("{");
if(elements != null){
for(JavaElement element : this.elements){
element.build(builder);
}
}
builder.append("}");
}
@Override
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
E annotation = super.find(finder);
@ -90,7 +72,7 @@ public class Interface extends ClassBase{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor){
public VisitorBag visit(Visitor<JavaElement> visitor){
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();

View file

@ -3,15 +3,14 @@ package dev.peerat.parser.java;
import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.ElementBuilder;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public abstract class JavaElement implements ElementBuilder{
public abstract class JavaElement{
public abstract <E extends JavaElement> E find(Function<JavaElement, Boolean> finder);
public abstract <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list);
public abstract VisitorBag visit(JavaVisitor<?> visitor);
public abstract VisitorBag visit(Visitor<JavaElement> visitor);
}

View file

@ -4,10 +4,10 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.Bag;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.Annotation.AnnotableBuffer;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaFile extends JavaElement implements ClassContainer, AnnotableBuffer{
@ -66,24 +66,6 @@ public class JavaFile extends JavaElement implements ClassContainer, AnnotableBu
return list;
}
@Override
public void build(Builder builder) throws Exception {
builder.append("package ");
builder.append(pack);
builder.append(";");
for(Import imp : imports){
builder.append("import ");
if(imp.isStatic()) builder.append("static ");
builder.append(imp.getValue());
}
mainClazz.build(builder);
for(ClassBase clazz : subClazz){
clazz.build(builder);
}
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
if(finder.apply(mainClazz)) return (E) mainClazz;
@ -104,7 +86,7 @@ public class JavaFile extends JavaElement implements ClassContainer, AnnotableBu
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor){
public VisitorBag visit(Visitor<JavaElement> visitor){
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();

View file

@ -1,14 +1,12 @@
package dev.peerat.parser.java;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.TokenType;
import dev.peerat.parser.java.Annotation.Annotable;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class Variable extends Annotable{
@ -67,23 +65,6 @@ public class Variable extends Annotable{
return this.value;
}
@Override
public void build(Builder builder) throws Exception{
super.build(builder);
String mod = Modifier.toString(this.mod);
builder.append(new Token(type.getLineNumber(), type.getCharacterNumber()-(mod.length()+1), mod, TokenType.GROUP));
builder.append(" ");
builder.append(type);
if(elips) builder.append("...");
builder.append(" ");
builder.append(name);
if(value != null){
builder.append("=");
value.build(builder);
}
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
E annotation = super.find(finder);
@ -102,7 +83,7 @@ public class Variable extends Annotable{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor){
public VisitorBag visit(Visitor<JavaElement> visitor){
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();

View file

@ -1,7 +1,7 @@
package dev.peerat.parser.java.builder;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.value.Value;
public abstract class JavaBuilder<T extends JavaElement>{

View file

@ -105,8 +105,8 @@ public class JavaFunctionBuilder extends JavaModifiableBuilder<JavaFunctionBuild
Function result = new Function(
this.annotations,
this.mod,
new Token(0,0, this.generic, null),
new Token(0,0, this.type, null),
this.generic == null ? null : new Token(0,0, this.generic, null),
this.type == null ? null : new Token(0,0, this.type, null),
new Token(0,0, this.name, null),
this.parameters,
this.throwables

View file

@ -6,10 +6,11 @@ import java.util.function.Function;
import dev.peerat.parser.Parser;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.JavaParser;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.operation.Operation.OperationContainer;
import dev.peerat.parser.java.tree.JavaTreeType;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaOperationBuilder extends JavaBuilder<Operation>{
@ -34,11 +35,6 @@ public class JavaOperationBuilder extends JavaBuilder<Operation>{
JavaOperationBuilder.this.operation = operation;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -50,7 +46,7 @@ public class JavaOperationBuilder extends JavaBuilder<Operation>{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
return null;
}

View file

@ -24,6 +24,7 @@ import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.value.VariableAccessValue;
import dev.peerat.parser.java.value.Value.ValueContainer;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaValueBuilder extends JavaBuilder<Value>{
@ -127,11 +128,6 @@ public class JavaValueBuilder extends JavaBuilder<Value>{
JavaValueBuilder.this.value = value;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -143,7 +139,7 @@ public class JavaValueBuilder extends JavaBuilder<Value>{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
return null;
}

View file

@ -4,9 +4,9 @@ import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class AssignOperation extends Operation{
@ -27,13 +27,6 @@ public class AssignOperation extends Operation{
return right;
}
@Override
public void build(Builder builder) throws Exception{
left.build(builder);
builder.append("=");
right.build(builder);
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
return finder.apply(left) ? (E)left : finder.apply(right) ? (E)right : null;
@ -48,7 +41,7 @@ public class AssignOperation extends Operation{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(left.visit(visitor));

View file

@ -4,19 +4,14 @@ import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class BreakOperation extends Operation{
public BreakOperation(){}
@Override
public void build(Builder builder) throws Exception{
builder.append("break;");
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
return null;
@ -26,7 +21,7 @@ public class BreakOperation extends Operation{
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return null;
}

View file

@ -3,7 +3,9 @@ package dev.peerat.parser.java.operation;
import java.util.List;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class CatchOperation extends OperationBag{
@ -26,12 +28,7 @@ public class CatchOperation extends OperationBag{
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return super.visit(visitor);
}

View file

@ -4,17 +4,12 @@ import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ContinueOperation extends Operation{
@Override
public void build(Builder builder) throws Exception{
builder.append("continue;");
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
return null;
@ -24,7 +19,7 @@ public class ContinueOperation extends Operation{
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return null;
}

View file

@ -1,17 +1,14 @@
package dev.peerat.parser.java.operation;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class DoOperation extends OperationBag{
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return super.visit(visitor);
}

View file

@ -1,17 +1,14 @@
package dev.peerat.parser.java.operation;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ElseOperation extends OperationBag{
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return super.visit(visitor);
}

View file

@ -1,17 +1,14 @@
package dev.peerat.parser.java.operation;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class FinallyOperation extends OperationBag{
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return super.visit(visitor);
}

View file

@ -7,6 +7,7 @@ import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ForOperation extends OperationBag{
@ -90,12 +91,7 @@ public class ForOperation extends OperationBag{
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
if(init_vars != null)

View file

@ -7,6 +7,7 @@ import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ForeachOperation extends OperationBag{
@ -49,12 +50,7 @@ public class ForeachOperation extends OperationBag{
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(this.iterator.visit(visitor));

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class IfOperation extends OperationBag{
@ -35,12 +36,7 @@ public class IfOperation extends OperationBag{
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(condition.visit(visitor));

View file

@ -1,4 +1,6 @@
package dev.peerat.parser.java;
package dev.peerat.parser.java.operation;
import dev.peerat.parser.java.JavaElement;
public abstract class Operation extends JavaElement{
@ -10,5 +12,4 @@ public abstract class Operation extends JavaElement{
public Operation(){}
}

View file

@ -5,13 +5,13 @@ import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.Variable.VariableContainer;
import dev.peerat.parser.java.operation.Operation.OperationContainer;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.value.Value.ValueContainer;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public abstract class OperationBag extends Operation implements VariableContainer, OperationContainer, ValueContainer{
@ -62,7 +62,7 @@ public abstract class OperationBag extends Operation implements VariableContaine
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor){
public VisitorBag visit(Visitor<JavaElement> visitor){
VisitorBag bag = new VisitorBag();
for(JavaElement element : this.elements){
bag.merge(element.visit(visitor));

View file

@ -4,9 +4,9 @@ import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ReturnOperation extends Operation{
@ -21,11 +21,6 @@ public class ReturnOperation extends Operation{
return this.value;
}
@Override
public void build(Builder builder) throws Exception {
value.build(builder);
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
return value != null ? finder.apply(value) ? (E)value : null : null;
@ -40,7 +35,7 @@ public class ReturnOperation extends Operation{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
if(this.value != null) bag.merge(this.value.visit(visitor));

View file

@ -4,18 +4,14 @@ import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class SwitchOperation extends Operation{
//+ AND OBJECT FOR CONTAINING EVERY CASE OP
@Override
public void build(Builder builder) throws Exception{
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -25,7 +21,7 @@ public class SwitchOperation extends Operation{
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return null;
}

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class SynchronizedOperation extends OperationBag{
@ -35,12 +36,7 @@ public class SynchronizedOperation extends OperationBag{
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(this.value.visit(visitor));

View file

@ -4,9 +4,9 @@ import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ThrowOperation extends Operation{
@ -21,12 +21,6 @@ public class ThrowOperation extends Operation{
return this.value;
}
@Override
public void build(Builder builder) throws Exception {
builder.append(" throw ");
value.build(builder);
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return finder.apply(value) ? (E)value : null;
@ -39,7 +33,7 @@ public class ThrowOperation extends Operation{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(this.value.visit(visitor));

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class TryOperation extends OperationBag{
@ -40,12 +41,7 @@ public class TryOperation extends OperationBag{
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
if(this.resource != null) bag.merge(this.resource.visit(visitor));

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class WhileOperation extends OperationBag{
@ -34,12 +35,7 @@ public class WhileOperation extends OperationBag{
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(this.condition.visit(visitor));

View file

@ -0,0 +1,35 @@
package dev.peerat.parser.java.printer;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.Annotation;
import dev.peerat.parser.java.value.Value;
public class JavaAnnotationPrinter extends JavaPrinter<Annotation>{
@Override
public void print(Annotation element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer);
writer.write("@");
writer.write(element.getName());
Map<Token, Value> map = element.getParameters();
if(map != null && !map.isEmpty()){
writer.write("(");
Iterator<Entry<Token, Value>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Entry<Token, Value> entry = iterator.next();
writer.write(entry.getKey());
writer.write("=");
Value value = entry.getValue();
provider.getPrinter(value).print(value, writer, buffer, provider);
if(iterator.hasNext()) writer.write(",");
}
writer.write(")");
}
writer.write("\n");
}
}

View file

@ -0,0 +1,32 @@
package dev.peerat.parser.java.printer;
import java.lang.reflect.Modifier;
import dev.peerat.parser.java.Class;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Variable;
public class JavaClassPrinter extends JavaPrinter<dev.peerat.parser.java.Class>{
@Override
public void print(Class element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer+Modifier.toString(element.getModifier())+" class ");
writer.write(element.getName());
if(element.getExtension() != null){
writer.write(" extends ");
writer.write(element.getExtension());
}
if(element.getImplementations() != null){
writer.write(" implements ");
writer.write(element.getImplementations());
}
writer.write("{\n");
for(JavaElement content : element.getElements()){
provider.getPrinter(content).print(content, writer, buffer+"\t", provider);
if(content instanceof Variable) writer.write(";");
writer.write("\n");
}
writer.write("}\n");
}
}

View file

@ -0,0 +1,29 @@
package dev.peerat.parser.java.printer;
import dev.peerat.parser.java.ClassBase;
import dev.peerat.parser.java.Import;
import dev.peerat.parser.java.JavaFile;
public class JavaFilePrinter extends JavaPrinter<JavaFile>{
@Override
public void print(JavaFile element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
if(element.getPackage() != null){
writer.write("package ");
writer.write(element.getPackage());
writer.write(";\n");
}
for(Import imp : element.getImports()){
provider.getPrinter(imp).print(imp, writer, buffer, provider);
writer.write("\n");
}
ClassBase clazz = element.getMainClass();
provider.getPrinter(clazz).print(clazz, writer, buffer, provider);
for(ClassBase classes : element.getSubClasses()){
provider.getPrinter(classes).print(classes, writer, buffer, provider);
}
}
}

View file

@ -0,0 +1,56 @@
package dev.peerat.parser.java.printer;
import java.lang.reflect.Modifier;
import java.util.Iterator;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.value.Value;
public class JavaFunctionPrinter extends JavaPrinter<Function>{
@Override
public void print(Function element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer+Modifier.toString(element.getModifier())+" ");
if(element.getGeneric() != null){
writer.write(element.getGeneric());
writer.write(" ");
}
if(element.getReturnType() != null){
writer.write(element.getReturnType());
writer.write(" ");
}
writer.write(element.getName());
writer.write("(");
if(element.getParameters() != null){
Iterator<Variable> parameters = element.getParameters().iterator();
while(parameters.hasNext()){
Variable parameter = parameters.next();
provider.getPrinter(parameter).print(parameter, writer, "", provider);
if(parameters.hasNext()) writer.write(", ");
}
}
writer.write(")");
if(element.getThrowables() != null){
Iterator<Token> throwables = element.getThrowables().iterator();
if(throwables.hasNext()){
writer.write(" throws ");
while(throwables.hasNext()){
Token token = throwables.next();
writer.write(token);
if(throwables.hasNext()) writer.write(",");
}
}
}
writer.write("{\n");
for(JavaElement content : element.getElements()){
provider.getPrinter(content).print(content, writer, buffer+"\t", provider);
if(content instanceof Value) writer.write(";");
writer.write("\n");
}
writer.write(buffer+"}");
}
}

View file

@ -0,0 +1,15 @@
package dev.peerat.parser.java.printer;
import dev.peerat.parser.java.Import;
public class JavaImportPrinter extends JavaPrinter<Import>{
@Override
public void print(Import element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write("import ");
if(element.isStatic()) writer.write("static ");
writer.write(element.getValue());
writer.write(";");
}
}

View file

@ -0,0 +1,25 @@
package dev.peerat.parser.java.printer;
import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.java.value.Value;
public class JavaOperationPrinter{
public static class JavaOperationReturnPrinter extends JavaPrinter<ReturnOperation>{
@Override
public void print(ReturnOperation element, Writer writer, String buffer, JavaPrintProvider provider)throws Exception {
writer.write(buffer+"return");
Value value = element.getValue();
if(value == null){
writer.write(";");
return;
}
writer.write(" ");
provider.getPrinter(value).print(value, writer, "", provider);
writer.write(";");
}
}
}

View file

@ -0,0 +1,105 @@
package dev.peerat.parser.java.printer;
import java.io.BufferedWriter;
import java.util.HashMap;
import java.util.Map;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.Annotation;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.Import;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.JavaFile;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.java.printer.JavaOperationPrinter.JavaOperationReturnPrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaArrayAccessValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaArrayValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaBiValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaCastValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaInstanceValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaLambdaValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaMethodCallValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaModifierValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaStaticValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaTriValuePrinter;
import dev.peerat.parser.java.printer.JavaValuePrinter.JavaVariableAccessValuePrinter;
import dev.peerat.parser.java.value.ArrayAccessValue;
import dev.peerat.parser.java.value.ArrayValue;
import dev.peerat.parser.java.value.BiValue;
import dev.peerat.parser.java.value.CastValue;
import dev.peerat.parser.java.value.InstanceValue;
import dev.peerat.parser.java.value.LambdaValue;
import dev.peerat.parser.java.value.MethodCallValue;
import dev.peerat.parser.java.value.ModifierValue;
import dev.peerat.parser.java.value.StaticValue;
import dev.peerat.parser.java.value.TriValue;
import dev.peerat.parser.java.value.VariableAccessValue;
public abstract class JavaPrinter<T extends JavaElement>{
public static JavaPrintProvider getProvider(){
JavaPrintProvider provider = new JavaPrintProvider();
provider.register(ArrayAccessValue.class, new JavaArrayAccessValuePrinter());
provider.register(ArrayValue.class, new JavaArrayValuePrinter());
provider.register(BiValue.class, new JavaBiValuePrinter());
provider.register(CastValue.class, new JavaCastValuePrinter());
provider.register(InstanceValue.class, new JavaInstanceValuePrinter());
provider.register(LambdaValue.class, new JavaLambdaValuePrinter());
provider.register(MethodCallValue.class, new JavaMethodCallValuePrinter());
provider.register(ModifierValue.class, new JavaModifierValuePrinter());
provider.register(StaticValue.class, new JavaStaticValuePrinter());
provider.register(TriValue.class, new JavaTriValuePrinter());
provider.register(VariableAccessValue.class, new JavaVariableAccessValuePrinter());
provider.register(ReturnOperation.class, new JavaOperationReturnPrinter());
provider.register(Import.class, new JavaImportPrinter());
provider.register(Annotation.class, new JavaAnnotationPrinter());
provider.register(Variable.class, new JavaVariablePrinter());
provider.register(Function.class, new JavaFunctionPrinter());
provider.register(dev.peerat.parser.java.Class.class, new JavaClassPrinter());
provider.register(JavaFile.class, new JavaFilePrinter());
return provider;
}
public abstract void print(T element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception;
public static class JavaPrintProvider{
private Map<Class<?>, JavaPrinter<?>> map;
public JavaPrintProvider(){
this.map = new HashMap<>();
}
public void register(Class<?> type, JavaPrinter<?> printer){
this.map.put(type, printer);
}
public <T extends JavaElement> JavaPrinter<T> getPrinter(T type){
return (JavaPrinter<T>) getPrinter(type.getClass());
}
public <T extends JavaElement> JavaPrinter<T> getPrinter(Class<T> type){
return (JavaPrinter<T>) this.map.get(type);
}
}
public static class Writer{
private BufferedWriter writer;
public Writer(BufferedWriter writer){
this.writer = writer;
}
public void write(String value) throws Exception{
this.writer.write(value);
}
public void write(Token token) throws Exception{
write(token.getValue());
}
}
}

View file

@ -0,0 +1,208 @@
package dev.peerat.parser.java.printer;
import java.util.Iterator;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.value.ArrayAccessValue;
import dev.peerat.parser.java.value.ArrayValue;
import dev.peerat.parser.java.value.BiValue;
import dev.peerat.parser.java.value.CastValue;
import dev.peerat.parser.java.value.InstanceValue;
import dev.peerat.parser.java.value.LambdaValue;
import dev.peerat.parser.java.value.LambdaValue.LambdaParameter;
import dev.peerat.parser.java.value.MethodCallValue;
import dev.peerat.parser.java.value.ModifierValue;
import dev.peerat.parser.java.value.StaticValue;
import dev.peerat.parser.java.value.TriValue;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.value.VariableAccessValue;
public class JavaValuePrinter{
public static class JavaStaticValuePrinter extends JavaPrinter<StaticValue>{
public void print(StaticValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer);
writer.write(element.getToken());
}
}
public static class JavaBiValuePrinter extends JavaPrinter<BiValue>{
public void print(BiValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception{
writer.write(buffer);
Value left = element.left();
provider.getPrinter(left).print(left, writer, "", provider);
writer.write(element.getAction());
Value right = element.right();
provider.getPrinter(right).print(right, writer, "", provider);
}
}
public static class JavaTriValuePrinter extends JavaPrinter<TriValue>{
public void print(TriValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception{
writer.write(buffer);
Value value = element.getChecker();
provider.getPrinter(value).print(value, writer, "", provider);
writer.write(" ? ");
value = element.success();
provider.getPrinter(value).print(value, writer, "", provider);
writer.write(" : ");
value = element.fail();
provider.getPrinter(value).print(value, writer, "", provider);
}
}
public static class JavaArrayAccessValuePrinter extends JavaPrinter<ArrayAccessValue>{
public void print(ArrayAccessValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception{
writer.write(buffer);
Value value = element.base();
provider.getPrinter(value).print(value, writer, "", provider);
writer.write("[");
value = element.getAccessor();
provider.getPrinter(value).print(value, writer, "", provider);
writer.write("]");
}
}
public static class JavaArrayValuePrinter extends JavaPrinter<ArrayValue>{
public void print(ArrayValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception{
writer.write(buffer+"{");
Value[] values = element.getValues();
for(int i = 0; i < values.length; i++){
Value value = values[i];
provider.getPrinter(value).print(value, writer, "", provider);
if(i < values.length-1) writer.write(", ");
}
writer.write("}");
}
}
public static class JavaCastValuePrinter extends JavaPrinter<CastValue>{
public void print(CastValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer+"(");
writer.write("(");
writer.write(element.getType());
writer.write(")");
Value value = element.getValue();
provider.getPrinter(value).print(value, writer, "", provider);
writer.write(")");
}
}
public static class JavaInstanceValuePrinter extends JavaPrinter<InstanceValue>{
public void print(InstanceValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer+"new ");
writer.write(element.getToken());
writer.write("(");
Iterator<Value> parameters = element.getParameters().iterator();
while(parameters.hasNext()){
Value value = parameters.next();
provider.getPrinter(value).print(value, writer, "", provider);
if(parameters.hasNext()) writer.write(", ");
}
writer.write(")");
}
}
public static class JavaLambdaValuePrinter extends JavaPrinter<LambdaValue>{
public void print(LambdaValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer+"(");
Iterator<LambdaParameter> parameters = element.getParameters().iterator();
while(parameters.hasNext()){
LambdaParameter parameter = parameters.next();
if(parameter.getType() != null){
writer.write(parameter.getType());
writer.write(" ");
}
writer.write(parameter.getName());
if(parameters.hasNext()) writer.write(", ");
}
writer.write(") -> ");
if(element.getOperations().size() == 1){
JavaElement value = element.getOperations().get(0);
provider.getPrinter(value).print(value, writer, "", provider);
}else{
writer.write("{\n");
Iterator<JavaElement> operations = element.getOperations().iterator();
while(operations.hasNext()){
JavaElement operation = operations.next();
provider.getPrinter(operation).print(operation, writer, buffer+"\t", provider);
if(operation instanceof Value) writer.write(";");
writer.write("\n");
}
writer.write("}");
}
}
}
public static class JavaMethodCallValuePrinter extends JavaPrinter<MethodCallValue>{
public void print(MethodCallValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer);
Value base = element.base();
if(base != null){
provider.getPrinter(base).print(base, writer, "", provider);
writer.write(".");
}
if(element.getGeneric() != null){
writer.write("<");
writer.write(element.getGeneric());
writer.write(">");
}
writer.write(element.getToken());
writer.write("(");
Iterator<Value> parameters = element.getParameters().iterator();
while(parameters.hasNext()){
Value value = parameters.next();
provider.getPrinter(value).print(value, writer, "", provider);
if(parameters.hasNext()) writer.write(", ");
}
writer.write(")");
}
}
public static class JavaModifierValuePrinter extends JavaPrinter<ModifierValue>{
public void print(ModifierValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception{
writer.write(buffer+element.getModifier());
Value value = element.getValue();
provider.getPrinter(value).print(value, writer, "", provider);
}
}
public static class JavaVariableAccessValuePrinter extends JavaPrinter<VariableAccessValue>{
public void print(VariableAccessValue element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception{
writer.write(buffer);
Value value = element.base();
provider.getPrinter(value).print(value, writer, "", provider);
writer.write(".");
writer.write(element.getVariable());
}
}
}

View file

@ -0,0 +1,24 @@
package dev.peerat.parser.java.printer;
import java.lang.reflect.Modifier;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.value.Value;
public class JavaVariablePrinter extends JavaPrinter<Variable>{
@Override
public void print(Variable element, Writer writer, String buffer, JavaPrintProvider provider) throws Exception {
writer.write(buffer+Modifier.toString(element.getModifier())+" ");
writer.write(element.getType());
writer.write(" ");
writer.write(element.getName());
if(element.getValue() != null){
writer.write(" = ");
Value value = element.getValue();
provider.getPrinter(value).print(value, writer, "", provider);
writer.write(";");
}
}
}

View file

@ -1,5 +1,6 @@
package dev.peerat.parser.java.tree;
import dev.peerat.parser.Bag;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.Annotation.AnnotableBuffer;
import dev.peerat.parser.java.Class;
@ -30,7 +31,7 @@ public class ClassTree extends SyntaxTree<JavaElement> {
.then(new RedirectStateTree<>(type, (global, local) -> global.set("name", local.get())));
clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.<JavaElement>end((parent, bag) -> {
Class current = new Class((((AnnotableBuffer) parent).getAnnotationBuffer()), bag.get("modifier") == null ? 0 : bag.get("modifier"),bag.get("name"));
Class current = new Class((((AnnotableBuffer) parent).getAnnotationBuffer()), bag.get("modifier") == null ? 0 : bag.<Bag>get("modifier").get(),bag.get("name"));
if (parent instanceof ClassContainer)
((ClassContainer) parent).addClass(current);
return current;
@ -53,7 +54,7 @@ public class ClassTree extends SyntaxTree<JavaElement> {
clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.<JavaElement>end((parent, bag) -> {
Class current = new Class((((AnnotableBuffer) parent).getAnnotationBuffer()),
bag.get("modifier") == null ? 0 : bag.get("modifier"),
bag.get("modifier") == null ? 0 : bag.<Bag>get("modifier").get(),
bag.get("name"),
bag.get("extend"), bag.get("implement"));
if (parent instanceof ClassContainer)
@ -67,7 +68,7 @@ public class ClassTree extends SyntaxTree<JavaElement> {
clazz_extend.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.<JavaElement>end((parent, bag) -> {
Class current = new Class((((AnnotableBuffer) parent).getAnnotationBuffer()),
bag.get("modifier") == null ? 0 : bag.get("modifier"),
bag.get("modifier") == null ? 0 : bag.<Bag>get("modifier").get(),
bag.get("name"),
bag.get("extend"), bag.get("implement"));
if (parent instanceof ClassContainer)

View file

@ -2,7 +2,6 @@ package dev.peerat.parser.java.tree;
import dev.peerat.parser.TokenType;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.operation.AssignOperation;
import dev.peerat.parser.java.operation.BreakOperation;
import dev.peerat.parser.java.operation.ContinueOperation;
@ -12,6 +11,7 @@ import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.java.operation.SynchronizedOperation;
import dev.peerat.parser.java.operation.ThrowOperation;
import dev.peerat.parser.java.operation.WhileOperation;
import dev.peerat.parser.java.operation.Operation.OperationContainer;
import dev.peerat.parser.java.value.BiValue;
import dev.peerat.parser.java.value.MethodCallValue;
import dev.peerat.parser.java.value.Value;

View file

@ -132,6 +132,7 @@ public class ValueTree extends SyntaxTree<JavaElement> { //TODO order tree by mo
.end(ValueChainBuilder.build((builder) -> builder.buildStatic(), false));
value_operation.equals(">", action(">")).then(redirectRight).end(ValueChainBuilder.build((builder) -> builder.buildOperation(), false));
value_operation.equals("=", action("=")).then(redirectRight).end(ValueChainBuilder.build((builder) -> builder.buildOperation(), false));
value_operation.equals("<",action("<")).then(redirectRight).end(ValueChainBuilder.build((builder) -> builder.buildOperation(), false));
value_operation.equals("<",action("<")).equals("<","action","<<").then(redirectRight).end(ValueChainBuilder.build((builder) -> builder.buildOperation(), false));
value_operation.equals("+",action("+")).then(redirectRight).end(ValueChainBuilder.build((builder) -> builder.buildOperation(), false));

View file

@ -5,6 +5,7 @@ import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ArrayAccessValue extends Value{
@ -25,11 +26,6 @@ public class ArrayAccessValue extends Value{
return this.access;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -41,8 +37,10 @@ public class ArrayAccessValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
return null;
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
return bag;
}
}

View file

@ -5,6 +5,7 @@ import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ArrayValue extends Value{
@ -19,11 +20,6 @@ public class ArrayValue extends Value{
return this.values;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -35,12 +31,9 @@ public class ArrayValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
for(Value value : this.values){
bag.merge(value.visit(visitor));
}
return bag;
}

View file

@ -5,6 +5,7 @@ import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class BiValue extends Value{
@ -31,11 +32,6 @@ public class BiValue extends Value{
return right;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -52,11 +48,9 @@ public class BiValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(left.visit(visitor));
bag.merge(right.visit(visitor));
return bag;
}
}

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class CastValue extends Value{
@ -26,11 +27,6 @@ public class CastValue extends Value{
return this.value;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -42,8 +38,10 @@ public class CastValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
return null;
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
return bag;
}

View file

@ -12,6 +12,7 @@ import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.Variable.VariableContainer;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class InstanceValue extends Value implements VariableContainer, FunctionContainer, AnnotableBuffer{ //TODO LIKE A CLASS, CAN CONTAINS CLASS
@ -62,11 +63,6 @@ public class InstanceValue extends Value implements VariableContainer, FunctionC
return list;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -78,13 +74,9 @@ public class InstanceValue extends Value implements VariableContainer, FunctionC
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
if(this.parameters != null)
for(Value value : this.parameters){
bag.merge(value.visit(visitor));
}
return bag;
}

View file

@ -6,12 +6,13 @@ import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.Variable;
import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.Variable.VariableContainer;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.operation.Operation.OperationContainer;
import dev.peerat.parser.java.value.Value.ValueContainer;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class LambdaValue extends Value implements OperationContainer, VariableContainer, ValueContainer{
@ -52,11 +53,6 @@ public class LambdaValue extends Value implements OperationContainer, VariableCo
this.operations.add(value);
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -73,7 +69,7 @@ public class LambdaValue extends Value implements OperationContainer, VariableCo
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
for(JavaElement element : this.operations){

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class MethodCallValue extends Value{
@ -38,11 +39,6 @@ public class MethodCallValue extends Value{
return this.parameters;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -54,14 +50,9 @@ public class MethodCallValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor){
public VisitorBag visit(Visitor<JavaElement> visitor){
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(this.base.visit(visitor));
if(this.parameters != null)
for(Value value : this.parameters){
bag.merge(value.visit(visitor));
}
return bag;
}

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class ModifierValue extends Value{
@ -26,11 +27,6 @@ public class ModifierValue extends Value{
return this.value;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -47,10 +43,9 @@ public class ModifierValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(value.visit(visitor));
return bag;
}
}

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class StaticValue extends Value{
@ -20,11 +21,6 @@ public class StaticValue extends Value{
return this.token;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -42,8 +38,9 @@ public class StaticValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
return null;
VisitorBag bag = new VisitorBag();
return bag;
}
}

View file

@ -5,6 +5,7 @@ import java.util.function.Function;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class TriValue extends Value{
@ -31,11 +32,6 @@ public class TriValue extends Value{
return fail;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -52,14 +48,9 @@ public class TriValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(this.check.visit(visitor));
bag.merge(this.success.visit(visitor));
bag.merge(this.fail.visit(visitor));
return bag;
}

View file

@ -6,6 +6,7 @@ import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class VariableAccessValue extends Value{
@ -26,11 +27,6 @@ public class VariableAccessValue extends Value{
return this.variable;
}
@Override
public void build(Builder builder) throws Exception {
}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
return null;
@ -42,10 +38,9 @@ public class VariableAccessValue extends Value{
}
@Override
public VisitorBag visit(JavaVisitor<?> visitor) {
public VisitorBag visit(Visitor<JavaElement> visitor) {
if(visitor.canVisit(getClass())) return visitor.visit(this);
VisitorBag bag = new VisitorBag();
bag.merge(this.base.visit(visitor));
return bag;
}

View file

@ -1,17 +1,51 @@
package dev.peerat.parser.java.visitor;
import java.util.function.Predicate;
import dev.peerat.parser.java.Import;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaImportVisitor extends JavaVisitor<Import>{
//TODO CONCAT PREDICATE
private Predicate<String> namePredicate;
private boolean staticPredicate;
private boolean nonStaticPredicate;
public JavaImportVisitor(){
super(Import.class);
}
public JavaImportVisitor named(Predicate<String> predicate){
this.namePredicate = predicate;
return this;
}
public JavaImportVisitor isStatic(){
this.staticPredicate = true;
this.nonStaticPredicate = false;
return this;
}
public JavaImportVisitor isNotStatic(){
this.staticPredicate = false;
this.nonStaticPredicate = true;
return this;
}
@Override
public VisitorBag visitElement(Import element){
return null;
VisitorBag bag = new VisitorBag();
if(this.namePredicate != null){
if(!this.namePredicate.test(element.getValue().getValue())) return bag;
}
if((staticPredicate && !element.isStatic()) || (nonStaticPredicate && element.isStatic())) return bag;
bag.compute(element);
return bag;
}
}

View file

@ -2,7 +2,18 @@ package dev.peerat.parser.java.visitor;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.visitor.operation.JavaOperationVisitor;
import dev.peerat.parser.java.visitor.value.JavaArrayAccessValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaArrayValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaBiValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaCastValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaInstanceValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaLambdaValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaMethodCallValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaModifierValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaStaticValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaTriValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaValueVisitor;
import dev.peerat.parser.java.visitor.value.JavaVariableAccessValueVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
@ -75,6 +86,50 @@ public abstract class JavaVisitor<T extends JavaElement> extends Visitor<JavaEle
return new JavaValueVisitor();
}
public static JavaArrayAccessValueVisitor allArrayAccessValue(){
return new JavaArrayAccessValueVisitor();
}
public static JavaArrayValueVisitor allArrayValue(){
return new JavaArrayValueVisitor();
}
public static JavaBiValueVisitor allBiValue(){
return new JavaBiValueVisitor();
}
public static JavaCastValueVisitor allCastValue(){
return new JavaCastValueVisitor();
}
public static JavaInstanceValueVisitor allInstanceValue(){
return new JavaInstanceValueVisitor();
}
public static JavaLambdaValueVisitor allLambdaValue(){
return new JavaLambdaValueVisitor();
}
public static JavaMethodCallValueVisitor allMethodCallValue(){
return new JavaMethodCallValueVisitor();
}
public static JavaModifierValueVisitor allModifierValue(){
return new JavaModifierValueVisitor();
}
public static JavaStaticValueVisitor allStaticValue(){
return new JavaStaticValueVisitor();
}
public static JavaTriValueVisitor allTriValue(){
return new JavaTriValueVisitor();
}
public static JavaVariableAccessValueVisitor allVariableAccessValue(){
return new JavaVariableAccessValueVisitor();
}
public static JavaOperationVisitor allOperation(){
return new JavaOperationVisitor();
}

View file

@ -1,6 +1,6 @@
package dev.peerat.parser.java.visitor.operation;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.VisitorBag;

View file

@ -0,0 +1,50 @@
package dev.peerat.parser.java.visitor.value;
import dev.peerat.parser.java.value.ArrayAccessValue;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaArrayAccessValueVisitor extends JavaVisitor<ArrayAccessValue>{
private Visitor<Value> basePredicate;
private Visitor<Value> accessPredicate;
public JavaArrayAccessValueVisitor(){
super(ArrayAccessValue.class);
}
public JavaArrayAccessValueVisitor checkBase(Visitor<Value> visitor){
this.basePredicate = visitor;
return this;
}
public JavaArrayAccessValueVisitor accessor(Visitor<Value> visitor){
this.accessPredicate = visitor;
return this;
}
@Override
public VisitorBag visitElement(ArrayAccessValue element){
VisitorBag bag = new VisitorBag();
if(this.basePredicate != null){
VisitorBag visited = this.basePredicate.visit(element.base());
bag.merge(visited);
if(!visited.isValidated()) return bag;
}
if(this.accessPredicate != null){
VisitorBag visited = this.accessPredicate.visit(element.getAccessor());
bag.merge(visited);
if(!visited.isValidated()) return bag;
}
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,19 @@
package dev.peerat.parser.java.visitor.value;
import dev.peerat.parser.java.value.ArrayValue;
import dev.peerat.parser.visitor.VisitorBag;
import dev.peerat.parser.java.visitor.JavaVisitor;
public class JavaArrayValueVisitor extends JavaVisitor<ArrayValue> {
public JavaArrayValueVisitor() {
super(ArrayValue.class);
}
@Override
public VisitorBag visitElement(ArrayValue element) {
VisitorBag bag = new VisitorBag();
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,62 @@
package dev.peerat.parser.java.visitor.value;
import java.util.function.Predicate;
import dev.peerat.parser.Bag;
import dev.peerat.parser.java.value.BiValue;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaBiValueVisitor extends JavaVisitor<BiValue> {
private Visitor<Value> leftPredicate;
private Predicate<String> actionPredicate;
private Visitor<Value> rightPredicate;
public JavaBiValueVisitor() {
super(BiValue.class);
}
public JavaBiValueVisitor left(Visitor<Value> visitor) {
leftPredicate = visitor;
return this;
}
public JavaBiValueVisitor action(Predicate<String> checker) {
actionPredicate = checker;
return this;
}
public JavaBiValueVisitor right(Visitor<Value> visitor) {
rightPredicate = visitor;
return this;
}
@Override
public VisitorBag visitElement(BiValue element){
VisitorBag bag = new VisitorBag();
if(leftPredicate != null){
if(!leftPredicate.canVisit(element.left().getClass())) return bag;
VisitorBag visited = leftPredicate.visit(element.left());
if(!visited.isValidated()) return bag;
bag.merge(visited);
}
if(actionPredicate != null){
if(!actionPredicate.test(element.getAction())) return bag;
}
if(rightPredicate != null){
if(!rightPredicate.canVisit(element.left().getClass())) return bag;
VisitorBag visited = rightPredicate.visit(element.right());
if(!visited.isValidated()) return bag;
bag.merge(visited);
}
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,46 @@
package dev.peerat.parser.java.visitor.value;
import dev.peerat.parser.java.value.CastValue;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.java.value.Value;
import java.util.function.Predicate;
public class JavaCastValueVisitor extends JavaVisitor<CastValue> {
private Predicate<String> typePredicate;
private Visitor<Value> valuePredicate;
public JavaCastValueVisitor() {
super(CastValue.class);
}
public JavaCastValueVisitor type(Predicate<String> checker) {
typePredicate = checker;
return this;
}
public JavaCastValueVisitor value(Visitor<Value> visitor) {
valuePredicate = visitor;
return this;
}
@Override
public VisitorBag visitElement(CastValue element) {
VisitorBag bag = new VisitorBag();
if(typePredicate != null){
if(!typePredicate.test(element.getType().getValue())) return bag;
}
if(valuePredicate != null){
if(!valuePredicate.canVisit(element.getValue().getClass())) return bag;
VisitorBag visited = valuePredicate.visit(element.getValue());
if(!visited.isValidated()) return bag;
bag.merge(visited);
}
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,33 @@
package dev.peerat.parser.java.visitor.value;
import java.util.function.Predicate;
import dev.peerat.parser.java.value.InstanceValue;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaInstanceValueVisitor extends JavaVisitor<InstanceValue> {
private Predicate<String> namePredicate;
public JavaInstanceValueVisitor(){
super(InstanceValue.class);
}
public JavaInstanceValueVisitor named(Predicate<String> predicate){
this.namePredicate = predicate;
return this;
}
@Override
public VisitorBag visitElement(InstanceValue element) {
VisitorBag bag = new VisitorBag();
if(namePredicate != null){
if(!namePredicate.test(element.getToken().getValue())) return bag;
}
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,17 @@
package dev.peerat.parser.java.visitor.value;
import dev.peerat.parser.java.value.LambdaValue;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaLambdaValueVisitor extends JavaVisitor<LambdaValue>{
public JavaLambdaValueVisitor(){
super(LambdaValue.class);
}
@Override
public VisitorBag visitElement( LambdaValue element){
VisitorBag bag = new VisitorBag();
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,20 @@
package dev.peerat.parser.java.visitor.value;
import dev.peerat.parser.java.value.MethodCallValue;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.Token;
import java.util.function.Predicate;
public class JavaMethodCallValueVisitor extends JavaVisitor<MethodCallValue>{
public JavaMethodCallValueVisitor(){
super(MethodCallValue.class);
}
@Override
public VisitorBag visitElement( MethodCallValue element){
VisitorBag bag = new VisitorBag();
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,46 @@
package dev.peerat.parser.java.visitor.value;
import dev.peerat.parser.java.value.ModifierValue;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.java.value.Value;
import java.util.function.Predicate;
public class JavaModifierValueVisitor extends JavaVisitor<ModifierValue> {
private Predicate<String> modifierPredicate;
private Visitor<Value> valuePredicate;
public JavaModifierValueVisitor() {
super(ModifierValue.class);
}
public JavaModifierValueVisitor modifier(Predicate<String> checker) {
modifierPredicate = checker;
return this;
}
public JavaModifierValueVisitor value(Visitor<Value> visitor) {
valuePredicate = visitor;
return this;
}
@Override
public VisitorBag visitElement(ModifierValue element) {
VisitorBag bag = new VisitorBag();
if(modifierPredicate != null){
if(!modifierPredicate.test(element.getModifier().getValue())) return bag;
}
if(valuePredicate != null){
if(!valuePredicate.canVisit(element.getValue().getClass())) return bag;
VisitorBag visited = valuePredicate.visit(element.getValue());
if(!visited.isValidated()) return bag;
bag.merge(visited);
}
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,32 @@
package dev.peerat.parser.java.visitor.value;
import java.util.function.Predicate;
import dev.peerat.parser.java.value.StaticValue;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaStaticValueVisitor extends JavaVisitor<StaticValue> {
private Predicate<String> tokenPredicate;
public JavaStaticValueVisitor() {
super(StaticValue.class);
}
public JavaStaticValueVisitor token(Predicate<String> checker) {
tokenPredicate = checker;
return this;
}
@Override
public VisitorBag visitElement(StaticValue element){
VisitorBag bag = new VisitorBag();
if(tokenPredicate != null){
if(!tokenPredicate.test(element.getToken().getValue())) return bag;
}
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,61 @@
package dev.peerat.parser.java.visitor.value;
import dev.peerat.parser.java.value.TriValue;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.java.value.Value;
public class JavaTriValueVisitor extends JavaVisitor<TriValue> {
private Visitor<Value> checkPredicate;
private Visitor<Value> successPredicate;
private Visitor<Value> failPredicate;
public JavaTriValueVisitor() {
super(TriValue.class);
}
public JavaTriValueVisitor check(Visitor<Value> visitor) {
checkPredicate = visitor;
return this;
}
public JavaTriValueVisitor success(Visitor<Value> visitor) {
successPredicate = visitor;
return this;
}
public JavaTriValueVisitor fail(Visitor<Value> visitor) {
failPredicate = visitor;
return this;
}
@Override
public VisitorBag visitElement(TriValue element) {
VisitorBag bag = new VisitorBag();
if(checkPredicate != null){
if(!checkPredicate.canVisit(element.getChecker().getClass())) return bag;
VisitorBag visited = checkPredicate.visit(element.getChecker());
if(!visited.isValidated()) return bag;
bag.merge(visited);
}
if(successPredicate != null){
if(!successPredicate.canVisit(element.success().getClass())) return bag;
VisitorBag visited = successPredicate.visit(element.success());
if(!visited.isValidated()) return bag;
bag.merge(visited);
}
if(failPredicate != null){
if(!failPredicate.canVisit(element.fail().getClass())) return bag;
VisitorBag visited = failPredicate.visit(element.fail());
if(!visited.isValidated()) return bag;
bag.merge(visited);
}
bag.compute(element);
return bag;
}
}

View file

@ -0,0 +1,18 @@
package dev.peerat.parser.java.visitor.value;
import dev.peerat.parser.java.value.VariableAccessValue;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.VisitorBag;
public class JavaVariableAccessValueVisitor extends JavaVisitor<VariableAccessValue> {
public JavaVariableAccessValueVisitor() {
super(VariableAccessValue.class);
}
@Override
public VisitorBag visitElement(VariableAccessValue element) {
VisitorBag bag = new VisitorBag();
bag.compute(element);
return bag;
}
}

View file

@ -7,6 +7,7 @@ import java.util.function.Predicate;
public class Operator{
//Success ? Fail ?
@SafeVarargs
public static <E> Visitor<E> and(Visitor<E>... visitors){
return new Visitor<E>(){
@Override
@ -37,6 +38,7 @@ public class Operator{
//Quid de si c'est empty ?
//Quid de si on a un collect dans les 2 ? ou dans 1 qui sourtout ne sera peux être pas appeler ?
@SafeVarargs
public static <E> Visitor<E> or(Visitor<E>... visitors){
return new Visitor<E>(){
@Override

View file

@ -15,7 +15,6 @@ import dev.peerat.parser.Parser;
import dev.peerat.parser.Token;
import dev.peerat.parser.TokenType;
import dev.peerat.parser.TokenValidator;
import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.operation.AssignOperation;
import dev.peerat.parser.java.operation.BreakOperation;
import dev.peerat.parser.java.operation.CatchOperation;
@ -30,6 +29,7 @@ import dev.peerat.parser.java.operation.SynchronizedOperation;
import dev.peerat.parser.java.operation.ThrowOperation;
import dev.peerat.parser.java.operation.TryOperation;
import dev.peerat.parser.java.operation.WhileOperation;
import dev.peerat.parser.java.operation.Operation.OperationContainer;
import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.state.RedirectStateTree;
import dev.peerat.parser.state.StateTree;

View file

@ -27,6 +27,7 @@ import dev.peerat.parser.java.value.Value;
import dev.peerat.parser.java.value.Value.ValueContainer;
import dev.peerat.parser.java.value.VariableAccessValue;
import dev.peerat.parser.java.visitor.JavaVisitor;
import dev.peerat.parser.visitor.Visitor;
import dev.peerat.parser.visitor.VisitorBag;
@TestInstance(Lifecycle.PER_CLASS)
@ -58,9 +59,6 @@ public class ValueTypesTests {
return this.value;
}
@Override
public void build(Builder builder) throws Exception {}
@Override
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){return null;}
@ -68,7 +66,7 @@ public class ValueTypesTests {
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
@Override
public VisitorBag visit(JavaVisitor<?> visitor){return null;}
public VisitorBag visit(Visitor<JavaElement> visitor){return null;}
}

View file

@ -21,8 +21,8 @@ import dev.peerat.parser.java.Interface;
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.Variable;
import dev.peerat.parser.java.operation.Operation;
public class BaseElementTests{

View file

@ -4,9 +4,9 @@ import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.element.BaseElementTests;
import dev.peerat.parser.java.operation.AssignOperation;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.value.StaticValue;
public class AssignOperationTest extends BaseElementTests{

View file

@ -4,11 +4,11 @@ import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.element.BaseElementTests;
import dev.peerat.parser.java.operation.BreakOperation;
import dev.peerat.parser.java.operation.ContinueOperation;
import dev.peerat.parser.java.operation.ForOperation;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.java.operation.WhileOperation;

View file

@ -4,10 +4,10 @@ import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.element.BaseElementTests;
import dev.peerat.parser.java.operation.BreakOperation;
import dev.peerat.parser.java.operation.ForOperation;
import dev.peerat.parser.java.operation.Operation;
public class TryCatchFinallyOperationTest extends BaseElementTests{

View file

@ -6,9 +6,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.JavaFile;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.element.BaseElementTests;
import dev.peerat.parser.java.operation.IfOperation;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.value.BiValue;
import dev.peerat.parser.java.value.StaticValue;
import dev.peerat.parser.java.value.Value;

View file

@ -4,9 +4,9 @@ import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.element.BaseElementTests;
import dev.peerat.parser.java.operation.IfOperation;
import dev.peerat.parser.java.operation.Operation;
import dev.peerat.parser.java.value.BiValue;
import dev.peerat.parser.java.value.StaticValue;