Compare commits
2 commits
e98ad587c1
...
ce15d7e435
Author | SHA1 | Date | |
---|---|---|---|
|
ce15d7e435 | ||
|
f4cf250de0 |
81 changed files with 1154 additions and 486 deletions
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,12 +2,13 @@ package dev.peerat.parser.java;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.function.BiFunction;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class Annotation extends JavaElement{
|
public class Annotation extends JavaElement{
|
||||||
|
@ -50,15 +51,6 @@ public class Annotation extends JavaElement{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception{
|
|
||||||
if(annotations != null){
|
|
||||||
for(Annotation annotation : this.annotations){
|
|
||||||
annotation.build(builder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
||||||
if(annotations != null){
|
if(annotations != null){
|
||||||
|
@ -100,24 +92,6 @@ public class Annotation extends JavaElement{
|
||||||
return this.values;
|
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
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
||||||
if(this.values != null){
|
if(this.values != null){
|
||||||
|
@ -139,7 +113,7 @@ public class Annotation extends JavaElement{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
|
@ -150,4 +124,5 @@ public class Annotation extends JavaElement{
|
||||||
|
|
||||||
return bag;
|
return bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.List;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class AnnotationClass extends ClassBase{
|
public class AnnotationClass extends ClassBase{
|
||||||
|
@ -41,25 +42,6 @@ public class AnnotationClass extends ClassBase{
|
||||||
return this.elements;
|
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
|
@Override
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
||||||
E annotation = super.find(finder);
|
E annotation = super.find(finder);
|
||||||
|
@ -85,7 +67,7 @@ public class AnnotationClass extends ClassBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.List;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class Class extends ClassBase{
|
public class Class extends ClassBase{
|
||||||
|
@ -52,29 +53,6 @@ public class Class extends ClassBase{
|
||||||
return this.elements;
|
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
|
@Override
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
||||||
E annotation = super.find(finder);
|
E annotation = super.find(finder);
|
||||||
|
@ -100,13 +78,15 @@ public class Class extends ClassBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
bag.merge(super.visit(visitor));
|
bag.merge(super.visit(visitor));
|
||||||
|
|
||||||
for(JavaElement element : this.elements){
|
for(JavaElement element : this.elements){
|
||||||
|
System.out.println("VISIT CLASS "+visitor+" -> "+element);
|
||||||
bag.merge(element.visit(visitor));
|
bag.merge(element.visit(visitor));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import dev.peerat.parser.java.Annotation.AnnotableBuffer;
|
||||||
import dev.peerat.parser.java.Function.FunctionContainer;
|
import dev.peerat.parser.java.Function.FunctionContainer;
|
||||||
import dev.peerat.parser.java.Variable.VariableContainer;
|
import dev.peerat.parser.java.Variable.VariableContainer;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +48,7 @@ public abstract class ClassBase extends Annotable implements AnnotableBuffer, Cl
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor){
|
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
List<Annotation> annotations = getAnnotations();
|
List<Annotation> annotations = getAnnotations();
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.List;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class Enumeration extends ClassBase{
|
public class Enumeration extends ClassBase{
|
||||||
|
@ -46,25 +47,6 @@ public class Enumeration extends ClassBase{
|
||||||
return this.elements;
|
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
|
@Override
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
||||||
E annotation = super.find(finder);
|
E annotation = super.find(finder);
|
||||||
|
@ -90,7 +72,7 @@ public class Enumeration extends ClassBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,13 @@ import java.util.List;
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.TokenType;
|
import dev.peerat.parser.TokenType;
|
||||||
import dev.peerat.parser.java.Annotation.Annotable;
|
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.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;
|
||||||
import dev.peerat.parser.java.value.Value.ValueContainer;
|
import dev.peerat.parser.java.value.Value.ValueContainer;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class Function extends Annotable implements VariableContainer, OperationContainer, ValueContainer{
|
public class Function extends Annotable implements VariableContainer, OperationContainer, ValueContainer{
|
||||||
|
@ -97,41 +99,6 @@ public class Function extends Annotable implements VariableContainer, OperationC
|
||||||
return this.elements;
|
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
|
@Override
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
||||||
E annotation = super.find(finder);
|
E annotation = super.find(finder);
|
||||||
|
@ -168,7 +135,7 @@ public class Function extends Annotable implements VariableContainer, OperationC
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor){
|
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class Import extends JavaElement{
|
public class Import extends JavaElement{
|
||||||
|
@ -25,11 +26,6 @@ public class Import extends JavaElement{
|
||||||
return this.value;
|
return this.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -41,7 +37,7 @@ public class Import extends JavaElement{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.List;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class Interface extends ClassBase{
|
public class Interface extends ClassBase{
|
||||||
|
@ -46,25 +47,6 @@ public class Interface extends ClassBase{
|
||||||
return this.elements;
|
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
|
@Override
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> finder){
|
||||||
E annotation = super.find(finder);
|
E annotation = super.find(finder);
|
||||||
|
@ -90,7 +72,7 @@ public class Interface extends ClassBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor){
|
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
|
|
|
@ -3,15 +3,14 @@ package dev.peerat.parser.java;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.ElementBuilder;
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
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> E find(Function<JavaElement, Boolean> finder);
|
||||||
|
|
||||||
public abstract <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list);
|
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);
|
||||||
}
|
}
|
|
@ -4,10 +4,10 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.Bag;
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.Annotation.AnnotableBuffer;
|
import dev.peerat.parser.java.Annotation.AnnotableBuffer;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class JavaFile extends JavaElement implements ClassContainer, AnnotableBuffer{
|
public class JavaFile extends JavaElement implements ClassContainer, AnnotableBuffer{
|
||||||
|
@ -66,24 +66,6 @@ public class JavaFile extends JavaElement implements ClassContainer, AnnotableBu
|
||||||
return list;
|
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
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
||||||
if(finder.apply(mainClazz)) return (E) mainClazz;
|
if(finder.apply(mainClazz)) return (E) mainClazz;
|
||||||
|
@ -104,7 +86,7 @@ public class JavaFile extends JavaElement implements ClassContainer, AnnotableBu
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor){
|
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
package dev.peerat.parser.java;
|
package dev.peerat.parser.java;
|
||||||
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.TokenType;
|
|
||||||
import dev.peerat.parser.java.Annotation.Annotable;
|
import dev.peerat.parser.java.Annotation.Annotable;
|
||||||
import dev.peerat.parser.java.value.Value;
|
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;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class Variable extends Annotable{
|
public class Variable extends Annotable{
|
||||||
|
@ -66,24 +64,7 @@ public class Variable extends Annotable{
|
||||||
public Value getValue(){
|
public Value getValue(){
|
||||||
return this.value;
|
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
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
||||||
E annotation = super.find(finder);
|
E annotation = super.find(finder);
|
||||||
|
@ -102,7 +83,7 @@ public class Variable extends Annotable{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor){
|
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package dev.peerat.parser.java.builder;
|
package dev.peerat.parser.java.builder;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
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;
|
import dev.peerat.parser.java.value.Value;
|
||||||
|
|
||||||
public abstract class JavaBuilder<T extends JavaElement>{
|
public abstract class JavaBuilder<T extends JavaElement>{
|
||||||
|
|
|
@ -105,8 +105,8 @@ public class JavaFunctionBuilder extends JavaModifiableBuilder<JavaFunctionBuild
|
||||||
Function result = new Function(
|
Function result = new Function(
|
||||||
this.annotations,
|
this.annotations,
|
||||||
this.mod,
|
this.mod,
|
||||||
new Token(0,0, this.generic, null),
|
this.generic == null ? null : new Token(0,0, this.generic, null),
|
||||||
new Token(0,0, this.type, null),
|
this.type == null ? null : new Token(0,0, this.type, null),
|
||||||
new Token(0,0, this.name, null),
|
new Token(0,0, this.name, null),
|
||||||
this.parameters,
|
this.parameters,
|
||||||
this.throwables
|
this.throwables
|
||||||
|
|
|
@ -6,10 +6,11 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.Parser;
|
import dev.peerat.parser.Parser;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.JavaParser;
|
import dev.peerat.parser.java.JavaParser;
|
||||||
import dev.peerat.parser.java.Operation;
|
import dev.peerat.parser.java.operation.Operation;
|
||||||
import dev.peerat.parser.java.Operation.OperationContainer;
|
import dev.peerat.parser.java.operation.Operation.OperationContainer;
|
||||||
import dev.peerat.parser.java.tree.JavaTreeType;
|
import dev.peerat.parser.java.tree.JavaTreeType;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class JavaOperationBuilder extends JavaBuilder<Operation>{
|
public class JavaOperationBuilder extends JavaBuilder<Operation>{
|
||||||
|
@ -34,11 +35,6 @@ public class JavaOperationBuilder extends JavaBuilder<Operation>{
|
||||||
JavaOperationBuilder.this.operation = operation;
|
JavaOperationBuilder.this.operation = operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -50,7 +46,7 @@ public class JavaOperationBuilder extends JavaBuilder<Operation>{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.value.VariableAccessValue;
|
import dev.peerat.parser.java.value.VariableAccessValue;
|
||||||
import dev.peerat.parser.java.value.Value.ValueContainer;
|
import dev.peerat.parser.java.value.Value.ValueContainer;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class JavaValueBuilder extends JavaBuilder<Value>{
|
public class JavaValueBuilder extends JavaBuilder<Value>{
|
||||||
|
@ -127,11 +128,6 @@ public class JavaValueBuilder extends JavaBuilder<Value>{
|
||||||
JavaValueBuilder.this.value = value;
|
JavaValueBuilder.this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -143,7 +139,7 @@ public class JavaValueBuilder extends JavaBuilder<Value>{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,9 @@ import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class AssignOperation extends Operation{
|
public class AssignOperation extends Operation{
|
||||||
|
@ -27,13 +27,6 @@ public class AssignOperation extends Operation{
|
||||||
return right;
|
return right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception{
|
|
||||||
left.build(builder);
|
|
||||||
builder.append("=");
|
|
||||||
right.build(builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
||||||
return finder.apply(left) ? (E)left : finder.apply(right) ? (E)right : null;
|
return finder.apply(left) ? (E)left : finder.apply(right) ? (E)right : null;
|
||||||
|
@ -48,7 +41,7 @@ public class AssignOperation extends Operation{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(left.visit(visitor));
|
bag.merge(left.visit(visitor));
|
||||||
|
|
|
@ -4,19 +4,14 @@ import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class BreakOperation extends Operation{
|
public class BreakOperation extends Operation{
|
||||||
|
|
||||||
public BreakOperation(){}
|
public BreakOperation(){}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception{
|
|
||||||
builder.append("break;");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
||||||
return null;
|
return null;
|
||||||
|
@ -26,7 +21,7 @@ public class BreakOperation extends Operation{
|
||||||
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
|
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,9 @@ package dev.peerat.parser.java.operation;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class CatchOperation extends OperationBag{
|
public class CatchOperation extends OperationBag{
|
||||||
|
@ -26,12 +28,7 @@ public class CatchOperation extends OperationBag{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return super.visit(visitor);
|
return super.visit(visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,17 +4,12 @@ import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ContinueOperation extends Operation{
|
public class ContinueOperation extends Operation{
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception{
|
|
||||||
builder.append("continue;");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
||||||
return null;
|
return null;
|
||||||
|
@ -24,7 +19,7 @@ public class ContinueOperation extends Operation{
|
||||||
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
|
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
package dev.peerat.parser.java.operation;
|
package dev.peerat.parser.java.operation;
|
||||||
|
|
||||||
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class DoOperation extends OperationBag{
|
public class DoOperation extends OperationBag{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return super.visit(visitor);
|
return super.visit(visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
package dev.peerat.parser.java.operation;
|
package dev.peerat.parser.java.operation;
|
||||||
|
|
||||||
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ElseOperation extends OperationBag{
|
public class ElseOperation extends OperationBag{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return super.visit(visitor);
|
return super.visit(visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
package dev.peerat.parser.java.operation;
|
package dev.peerat.parser.java.operation;
|
||||||
|
|
||||||
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class FinallyOperation extends OperationBag{
|
public class FinallyOperation extends OperationBag{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return super.visit(visitor);
|
return super.visit(visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Variable;
|
import dev.peerat.parser.java.Variable;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ForOperation extends OperationBag{
|
public class ForOperation extends OperationBag{
|
||||||
|
@ -90,12 +91,7 @@ public class ForOperation extends OperationBag{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
if(init_vars != null)
|
if(init_vars != null)
|
||||||
|
|
|
@ -7,6 +7,7 @@ import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ForeachOperation extends OperationBag{
|
public class ForeachOperation extends OperationBag{
|
||||||
|
@ -49,12 +50,7 @@ public class ForeachOperation extends OperationBag{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(this.iterator.visit(visitor));
|
bag.merge(this.iterator.visit(visitor));
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class IfOperation extends OperationBag{
|
public class IfOperation extends OperationBag{
|
||||||
|
@ -35,12 +36,7 @@ public class IfOperation extends OperationBag{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(condition.visit(visitor));
|
bag.merge(condition.visit(visitor));
|
||||||
|
|
|
@ -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{
|
public abstract class Operation extends JavaElement{
|
||||||
|
|
||||||
|
@ -9,6 +11,5 @@ public abstract class Operation extends JavaElement{
|
||||||
}
|
}
|
||||||
|
|
||||||
public Operation(){}
|
public Operation(){}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -5,13 +5,13 @@ import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.Variable;
|
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.Variable.VariableContainer;
|
||||||
|
import dev.peerat.parser.java.operation.Operation.OperationContainer;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.value.Value.ValueContainer;
|
import dev.peerat.parser.java.value.Value.ValueContainer;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public abstract class OperationBag extends Operation implements VariableContainer, OperationContainer, ValueContainer{
|
public abstract class OperationBag extends Operation implements VariableContainer, OperationContainer, ValueContainer{
|
||||||
|
@ -62,7 +62,7 @@ public abstract class OperationBag extends Operation implements VariableContaine
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor){
|
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
for(JavaElement element : this.elements){
|
for(JavaElement element : this.elements){
|
||||||
bag.merge(element.visit(visitor));
|
bag.merge(element.visit(visitor));
|
||||||
|
|
|
@ -4,9 +4,9 @@ import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ReturnOperation extends Operation{
|
public class ReturnOperation extends Operation{
|
||||||
|
@ -21,11 +21,6 @@ public class ReturnOperation extends Operation{
|
||||||
return this.value;
|
return this.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
value.build(builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){
|
||||||
return value != null ? finder.apply(value) ? (E)value : null : null;
|
return value != null ? finder.apply(value) ? (E)value : null : null;
|
||||||
|
@ -40,7 +35,7 @@ public class ReturnOperation extends Operation{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
if(this.value != null) bag.merge(this.value.visit(visitor));
|
if(this.value != null) bag.merge(this.value.visit(visitor));
|
||||||
|
|
|
@ -4,18 +4,14 @@ import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class SwitchOperation extends Operation{
|
public class SwitchOperation extends Operation{
|
||||||
|
|
||||||
//+ AND OBJECT FOR CONTAINING EVERY CASE OP
|
//+ AND OBJECT FOR CONTAINING EVERY CASE OP
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -25,7 +21,7 @@ public class SwitchOperation extends Operation{
|
||||||
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
|
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class SynchronizedOperation extends OperationBag{
|
public class SynchronizedOperation extends OperationBag{
|
||||||
|
@ -35,12 +36,7 @@ public class SynchronizedOperation extends OperationBag{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(this.value.visit(visitor));
|
bag.merge(this.value.visit(visitor));
|
||||||
|
|
|
@ -4,9 +4,9 @@ import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ThrowOperation extends Operation{
|
public class ThrowOperation extends Operation{
|
||||||
|
@ -20,12 +20,6 @@ public class ThrowOperation extends Operation{
|
||||||
public Value getValue(){
|
public Value getValue(){
|
||||||
return this.value;
|
return this.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
builder.append(" throw ");
|
|
||||||
value.build(builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
|
@ -39,7 +33,7 @@ public class ThrowOperation extends Operation{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(this.value.visit(visitor));
|
bag.merge(this.value.visit(visitor));
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Variable;
|
import dev.peerat.parser.java.Variable;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class TryOperation extends OperationBag{
|
public class TryOperation extends OperationBag{
|
||||||
|
@ -40,12 +41,7 @@ public class TryOperation extends OperationBag{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
if(this.resource != null) bag.merge(this.resource.visit(visitor));
|
if(this.resource != null) bag.merge(this.resource.visit(visitor));
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class WhileOperation extends OperationBag{
|
public class WhileOperation extends OperationBag{
|
||||||
|
@ -34,12 +35,7 @@ public class WhileOperation extends OperationBag{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Builder builder) throws Exception {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(this.condition.visit(visitor));
|
bag.merge(this.condition.visit(visitor));
|
||||||
|
|
|
@ -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");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
32
src/dev/peerat/parser/java/printer/JavaClassPrinter.java
Normal file
32
src/dev/peerat/parser/java/printer/JavaClassPrinter.java
Normal 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");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
29
src/dev/peerat/parser/java/printer/JavaFilePrinter.java
Normal file
29
src/dev/peerat/parser/java/printer/JavaFilePrinter.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
56
src/dev/peerat/parser/java/printer/JavaFunctionPrinter.java
Normal file
56
src/dev/peerat/parser/java/printer/JavaFunctionPrinter.java
Normal 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+"}");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
15
src/dev/peerat/parser/java/printer/JavaImportPrinter.java
Normal file
15
src/dev/peerat/parser/java/printer/JavaImportPrinter.java
Normal 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(";");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
25
src/dev/peerat/parser/java/printer/JavaOperationPrinter.java
Normal file
25
src/dev/peerat/parser/java/printer/JavaOperationPrinter.java
Normal 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(";");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
105
src/dev/peerat/parser/java/printer/JavaPrinter.java
Normal file
105
src/dev/peerat/parser/java/printer/JavaPrinter.java
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
208
src/dev/peerat/parser/java/printer/JavaValuePrinter.java
Normal file
208
src/dev/peerat/parser/java/printer/JavaValuePrinter.java
Normal 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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
src/dev/peerat/parser/java/printer/JavaVariablePrinter.java
Normal file
24
src/dev/peerat/parser/java/printer/JavaVariablePrinter.java
Normal 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(";");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package dev.peerat.parser.java.tree;
|
package dev.peerat.parser.java.tree;
|
||||||
|
|
||||||
|
import dev.peerat.parser.Bag;
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.Annotation.AnnotableBuffer;
|
import dev.peerat.parser.java.Annotation.AnnotableBuffer;
|
||||||
import dev.peerat.parser.java.Class;
|
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())));
|
.then(new RedirectStateTree<>(type, (global, local) -> global.set("name", local.get())));
|
||||||
clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.<JavaElement>end((parent, bag) -> {
|
.<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)
|
if (parent instanceof ClassContainer)
|
||||||
((ClassContainer) parent).addClass(current);
|
((ClassContainer) parent).addClass(current);
|
||||||
return current;
|
return current;
|
||||||
|
@ -53,7 +54,7 @@ public class ClassTree extends SyntaxTree<JavaElement> {
|
||||||
clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.<JavaElement>end((parent, bag) -> {
|
.<JavaElement>end((parent, bag) -> {
|
||||||
Class current = new Class((((AnnotableBuffer) parent).getAnnotationBuffer()),
|
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("name"),
|
||||||
bag.get("extend"), bag.get("implement"));
|
bag.get("extend"), bag.get("implement"));
|
||||||
if (parent instanceof ClassContainer)
|
if (parent instanceof ClassContainer)
|
||||||
|
@ -67,7 +68,7 @@ public class ClassTree extends SyntaxTree<JavaElement> {
|
||||||
clazz_extend.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
clazz_extend.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.<JavaElement>end((parent, bag) -> {
|
.<JavaElement>end((parent, bag) -> {
|
||||||
Class current = new Class((((AnnotableBuffer) parent).getAnnotationBuffer()),
|
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("name"),
|
||||||
bag.get("extend"), bag.get("implement"));
|
bag.get("extend"), bag.get("implement"));
|
||||||
if (parent instanceof ClassContainer)
|
if (parent instanceof ClassContainer)
|
||||||
|
|
|
@ -2,7 +2,6 @@ package dev.peerat.parser.java.tree;
|
||||||
|
|
||||||
import dev.peerat.parser.TokenType;
|
import dev.peerat.parser.TokenType;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
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.AssignOperation;
|
||||||
import dev.peerat.parser.java.operation.BreakOperation;
|
import dev.peerat.parser.java.operation.BreakOperation;
|
||||||
import dev.peerat.parser.java.operation.ContinueOperation;
|
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.SynchronizedOperation;
|
||||||
import dev.peerat.parser.java.operation.ThrowOperation;
|
import dev.peerat.parser.java.operation.ThrowOperation;
|
||||||
import dev.peerat.parser.java.operation.WhileOperation;
|
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.BiValue;
|
||||||
import dev.peerat.parser.java.value.MethodCallValue;
|
import dev.peerat.parser.java.value.MethodCallValue;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
|
|
|
@ -132,6 +132,7 @@ public class ValueTree extends SyntaxTree<JavaElement> { //TODO order tree by mo
|
||||||
.end(ValueChainBuilder.build((builder) -> builder.buildStatic(), false));
|
.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("<")).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("<")).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));
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ArrayAccessValue extends Value{
|
public class ArrayAccessValue extends Value{
|
||||||
|
@ -25,11 +26,6 @@ public class ArrayAccessValue extends Value{
|
||||||
return this.access;
|
return this.access;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -41,8 +37,10 @@ public class ArrayAccessValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
return null;
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
|
VisitorBag bag = new VisitorBag();
|
||||||
|
return bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ArrayValue extends Value{
|
public class ArrayValue extends Value{
|
||||||
|
@ -19,11 +20,6 @@ public class ArrayValue extends Value{
|
||||||
return this.values;
|
return this.values;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -35,12 +31,9 @@ public class ArrayValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
for(Value value : this.values){
|
|
||||||
bag.merge(value.visit(visitor));
|
|
||||||
}
|
|
||||||
return bag;
|
return bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class BiValue extends Value{
|
public class BiValue extends Value{
|
||||||
|
@ -31,11 +32,6 @@ public class BiValue extends Value{
|
||||||
return right;
|
return right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -52,11 +48,9 @@ public class BiValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(left.visit(visitor));
|
|
||||||
bag.merge(right.visit(visitor));
|
|
||||||
return bag;
|
return bag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class CastValue extends Value{
|
public class CastValue extends Value{
|
||||||
|
@ -26,11 +27,6 @@ public class CastValue extends Value{
|
||||||
return this.value;
|
return this.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -42,8 +38,10 @@ public class CastValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
return null;
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
|
VisitorBag bag = new VisitorBag();
|
||||||
|
return bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Variable;
|
import dev.peerat.parser.java.Variable;
|
||||||
import dev.peerat.parser.java.Variable.VariableContainer;
|
import dev.peerat.parser.java.Variable.VariableContainer;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class InstanceValue extends Value implements VariableContainer, FunctionContainer, AnnotableBuffer{ //TODO LIKE A CLASS, CAN CONTAINS CLASS
|
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;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -78,13 +74,9 @@ public class InstanceValue extends Value implements VariableContainer, FunctionC
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
if(this.parameters != null)
|
|
||||||
for(Value value : this.parameters){
|
|
||||||
bag.merge(value.visit(visitor));
|
|
||||||
}
|
|
||||||
return bag;
|
return bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,13 @@ import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.Variable;
|
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.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.value.Value.ValueContainer;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class LambdaValue extends Value implements OperationContainer, VariableContainer, ValueContainer{
|
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);
|
this.operations.add(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -73,7 +69,7 @@ public class LambdaValue extends Value implements OperationContainer, VariableCo
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
for(JavaElement element : this.operations){
|
for(JavaElement element : this.operations){
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class MethodCallValue extends Value{
|
public class MethodCallValue extends Value{
|
||||||
|
@ -38,11 +39,6 @@ public class MethodCallValue extends Value{
|
||||||
return this.parameters;
|
return this.parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -54,14 +50,9 @@ public class MethodCallValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor){
|
public VisitorBag visit(Visitor<JavaElement> visitor){
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
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;
|
return bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class ModifierValue extends Value{
|
public class ModifierValue extends Value{
|
||||||
|
@ -26,11 +27,6 @@ public class ModifierValue extends Value{
|
||||||
return this.value;
|
return this.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -47,10 +43,9 @@ public class ModifierValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(value.visit(visitor));
|
|
||||||
return bag;
|
return bag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class StaticValue extends Value{
|
public class StaticValue extends Value{
|
||||||
|
@ -20,11 +21,6 @@ public class StaticValue extends Value{
|
||||||
return this.token;
|
return this.token;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -42,8 +38,9 @@ public class StaticValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
return null;
|
VisitorBag bag = new VisitorBag();
|
||||||
|
return bag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.function.Function;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class TriValue extends Value{
|
public class TriValue extends Value{
|
||||||
|
@ -31,11 +32,6 @@ public class TriValue extends Value{
|
||||||
return fail;
|
return fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -52,14 +48,9 @@ public class TriValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
|
|
||||||
bag.merge(this.check.visit(visitor));
|
|
||||||
bag.merge(this.success.visit(visitor));
|
|
||||||
bag.merge(this.fail.visit(visitor));
|
|
||||||
|
|
||||||
return bag;
|
return bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Function;
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class VariableAccessValue extends Value{
|
public class VariableAccessValue extends Value{
|
||||||
|
@ -26,11 +27,6 @@ public class VariableAccessValue extends Value{
|
||||||
return this.variable;
|
return this.variable;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -42,10 +38,9 @@ public class VariableAccessValue extends Value{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor) {
|
public VisitorBag visit(Visitor<JavaElement> visitor) {
|
||||||
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
if(visitor.canVisit(getClass())) return visitor.visit(this);
|
||||||
VisitorBag bag = new VisitorBag();
|
VisitorBag bag = new VisitorBag();
|
||||||
bag.merge(this.base.visit(visitor));
|
|
||||||
return bag;
|
return bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,51 @@
|
||||||
package dev.peerat.parser.java.visitor;
|
package dev.peerat.parser.java.visitor;
|
||||||
|
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import dev.peerat.parser.java.Import;
|
import dev.peerat.parser.java.Import;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
public class JavaImportVisitor extends JavaVisitor<Import>{
|
public class JavaImportVisitor extends JavaVisitor<Import>{
|
||||||
|
|
||||||
|
//TODO CONCAT PREDICATE
|
||||||
|
|
||||||
|
private Predicate<String> namePredicate;
|
||||||
|
private boolean staticPredicate;
|
||||||
|
private boolean nonStaticPredicate;
|
||||||
|
|
||||||
public JavaImportVisitor(){
|
public JavaImportVisitor(){
|
||||||
super(Import.class);
|
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
|
@Override
|
||||||
public VisitorBag visitElement(Import element){
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,18 @@ package dev.peerat.parser.java.visitor;
|
||||||
|
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.visitor.operation.JavaOperationVisitor;
|
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.JavaValueVisitor;
|
||||||
|
import dev.peerat.parser.java.visitor.value.JavaVariableAccessValueVisitor;
|
||||||
import dev.peerat.parser.visitor.Visitor;
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
|
@ -75,6 +86,50 @@ public abstract class JavaVisitor<T extends JavaElement> extends Visitor<JavaEle
|
||||||
return new JavaValueVisitor();
|
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(){
|
public static JavaOperationVisitor allOperation(){
|
||||||
return new JavaOperationVisitor();
|
return new JavaOperationVisitor();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package dev.peerat.parser.java.visitor.operation;
|
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.java.visitor.JavaVisitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,4 +14,4 @@ public class JavaValueVisitor extends JavaVisitor<Value>{
|
||||||
public VisitorBag visitElement(Value element){
|
public VisitorBag visitElement(Value element){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import java.util.function.Predicate;
|
||||||
public class Operator{
|
public class Operator{
|
||||||
|
|
||||||
//Success ? Fail ?
|
//Success ? Fail ?
|
||||||
|
@SafeVarargs
|
||||||
public static <E> Visitor<E> and(Visitor<E>... visitors){
|
public static <E> Visitor<E> and(Visitor<E>... visitors){
|
||||||
return new Visitor<E>(){
|
return new Visitor<E>(){
|
||||||
@Override
|
@Override
|
||||||
|
@ -37,6 +38,7 @@ public class Operator{
|
||||||
|
|
||||||
//Quid de si c'est empty ?
|
//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 ?
|
//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){
|
public static <E> Visitor<E> or(Visitor<E>... visitors){
|
||||||
return new Visitor<E>(){
|
return new Visitor<E>(){
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -15,7 +15,6 @@ import dev.peerat.parser.Parser;
|
||||||
import dev.peerat.parser.Token;
|
import dev.peerat.parser.Token;
|
||||||
import dev.peerat.parser.TokenType;
|
import dev.peerat.parser.TokenType;
|
||||||
import dev.peerat.parser.TokenValidator;
|
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.AssignOperation;
|
||||||
import dev.peerat.parser.java.operation.BreakOperation;
|
import dev.peerat.parser.java.operation.BreakOperation;
|
||||||
import dev.peerat.parser.java.operation.CatchOperation;
|
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.ThrowOperation;
|
||||||
import dev.peerat.parser.java.operation.TryOperation;
|
import dev.peerat.parser.java.operation.TryOperation;
|
||||||
import dev.peerat.parser.java.operation.WhileOperation;
|
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.java.value.Value;
|
||||||
import dev.peerat.parser.state.RedirectStateTree;
|
import dev.peerat.parser.state.RedirectStateTree;
|
||||||
import dev.peerat.parser.state.StateTree;
|
import dev.peerat.parser.state.StateTree;
|
||||||
|
|
|
@ -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.Value.ValueContainer;
|
||||||
import dev.peerat.parser.java.value.VariableAccessValue;
|
import dev.peerat.parser.java.value.VariableAccessValue;
|
||||||
import dev.peerat.parser.java.visitor.JavaVisitor;
|
import dev.peerat.parser.java.visitor.JavaVisitor;
|
||||||
|
import dev.peerat.parser.visitor.Visitor;
|
||||||
import dev.peerat.parser.visitor.VisitorBag;
|
import dev.peerat.parser.visitor.VisitorBag;
|
||||||
|
|
||||||
@TestInstance(Lifecycle.PER_CLASS)
|
@TestInstance(Lifecycle.PER_CLASS)
|
||||||
|
@ -58,9 +59,6 @@ public class ValueTypesTests {
|
||||||
return this.value;
|
return this.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void build(Builder builder) throws Exception {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(Function<JavaElement, Boolean> finder){return null;}
|
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){}
|
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisitorBag visit(JavaVisitor<?> visitor){return null;}
|
public VisitorBag visit(Visitor<JavaElement> visitor){return null;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,8 @@ import dev.peerat.parser.java.Interface;
|
||||||
import dev.peerat.parser.java.JavaElement;
|
import dev.peerat.parser.java.JavaElement;
|
||||||
import dev.peerat.parser.java.JavaFile;
|
import dev.peerat.parser.java.JavaFile;
|
||||||
import dev.peerat.parser.java.JavaParser;
|
import dev.peerat.parser.java.JavaParser;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.Variable;
|
import dev.peerat.parser.java.Variable;
|
||||||
|
import dev.peerat.parser.java.operation.Operation;
|
||||||
|
|
||||||
public class BaseElementTests{
|
public class BaseElementTests{
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,9 @@ import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
import dev.peerat.parser.java.Function;
|
import dev.peerat.parser.java.Function;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.element.BaseElementTests;
|
import dev.peerat.parser.java.element.BaseElementTests;
|
||||||
import dev.peerat.parser.java.operation.AssignOperation;
|
import dev.peerat.parser.java.operation.AssignOperation;
|
||||||
|
import dev.peerat.parser.java.operation.Operation;
|
||||||
import dev.peerat.parser.java.value.StaticValue;
|
import dev.peerat.parser.java.value.StaticValue;
|
||||||
|
|
||||||
public class AssignOperationTest extends BaseElementTests{
|
public class AssignOperationTest extends BaseElementTests{
|
||||||
|
|
|
@ -4,11 +4,11 @@ import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
import dev.peerat.parser.java.Function;
|
import dev.peerat.parser.java.Function;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.element.BaseElementTests;
|
import dev.peerat.parser.java.element.BaseElementTests;
|
||||||
import dev.peerat.parser.java.operation.BreakOperation;
|
import dev.peerat.parser.java.operation.BreakOperation;
|
||||||
import dev.peerat.parser.java.operation.ContinueOperation;
|
import dev.peerat.parser.java.operation.ContinueOperation;
|
||||||
import dev.peerat.parser.java.operation.ForOperation;
|
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.ReturnOperation;
|
||||||
import dev.peerat.parser.java.operation.WhileOperation;
|
import dev.peerat.parser.java.operation.WhileOperation;
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,10 @@ import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
import dev.peerat.parser.java.Function;
|
import dev.peerat.parser.java.Function;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.element.BaseElementTests;
|
import dev.peerat.parser.java.element.BaseElementTests;
|
||||||
import dev.peerat.parser.java.operation.BreakOperation;
|
import dev.peerat.parser.java.operation.BreakOperation;
|
||||||
import dev.peerat.parser.java.operation.ForOperation;
|
import dev.peerat.parser.java.operation.ForOperation;
|
||||||
|
import dev.peerat.parser.java.operation.Operation;
|
||||||
|
|
||||||
public class TryCatchFinallyOperationTest extends BaseElementTests{
|
public class TryCatchFinallyOperationTest extends BaseElementTests{
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
import dev.peerat.parser.java.Function;
|
import dev.peerat.parser.java.Function;
|
||||||
import dev.peerat.parser.java.JavaFile;
|
import dev.peerat.parser.java.JavaFile;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.element.BaseElementTests;
|
import dev.peerat.parser.java.element.BaseElementTests;
|
||||||
import dev.peerat.parser.java.operation.IfOperation;
|
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.BiValue;
|
||||||
import dev.peerat.parser.java.value.StaticValue;
|
import dev.peerat.parser.java.value.StaticValue;
|
||||||
import dev.peerat.parser.java.value.Value;
|
import dev.peerat.parser.java.value.Value;
|
||||||
|
|
|
@ -4,9 +4,9 @@ import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
import dev.peerat.parser.java.Function;
|
import dev.peerat.parser.java.Function;
|
||||||
import dev.peerat.parser.java.Operation;
|
|
||||||
import dev.peerat.parser.java.element.BaseElementTests;
|
import dev.peerat.parser.java.element.BaseElementTests;
|
||||||
import dev.peerat.parser.java.operation.IfOperation;
|
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.BiValue;
|
||||||
import dev.peerat.parser.java.value.StaticValue;
|
import dev.peerat.parser.java.value.StaticValue;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue