Util -> Find -> Fix trace
This commit is contained in:
parent
da87230afc
commit
a937f119ae
8 changed files with 47 additions and 2 deletions
|
@ -113,22 +113,26 @@ public class Class extends JavaElement{
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
||||||
if(search.apply(this)) return (E)this;
|
if(search.apply(this)) return (E)this;
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(!deep.apply(trace)) return null;
|
if(!deep.apply(trace)) return null;
|
||||||
for(JavaElement element : this.childs){
|
for(JavaElement element : this.childs){
|
||||||
E result = element.find(search, deep, trace);
|
E result = element.find(search, deep, trace);
|
||||||
if(result != null) return result;
|
if(result != null) return result;
|
||||||
}
|
}
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(search.apply(this, trace)) return (E)this;
|
if(search.apply(this, trace)) return (E)this;
|
||||||
for(JavaElement element : this.childs){
|
for(JavaElement element : this.childs){
|
||||||
E result = element.find(search, trace);
|
E result = element.find(search, trace);
|
||||||
if(result != null) return result;
|
if(result != null) return result;
|
||||||
}
|
}
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,16 +136,20 @@ public class Variable extends JavaElement{
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
||||||
if(search.apply(this)) return (E)this;
|
if(search.apply(this)) return (E)this;
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(!deep.apply(trace)) return null;
|
if(!deep.apply(trace)) return null;
|
||||||
//Value of the variable
|
//Value of the variable
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(search.apply(this, trace)) return (E)this;
|
if(search.apply(this, trace)) return (E)this;
|
||||||
//value
|
//value
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,16 +39,20 @@ public class AssigmentOperation extends JavaElement{
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
||||||
if(search.apply(this)) return (E)this;
|
if(search.apply(this)) return (E)this;
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(!deep.apply(trace)) return null;
|
if(!deep.apply(trace)) return null;
|
||||||
//value
|
//value
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(search.apply(this, trace)) return (E)this;
|
if(search.apply(this, trace)) return (E)this;
|
||||||
//value
|
//value
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class LoopAffectOperation extends JavaElement{
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
return search.apply(this, trace) ? (E)this : null;
|
return search.apply(this, trace) || trace.remove(trace.size()-1) == null ? (E)this : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ContinueOperation extends LoopAffectOperation{
|
public static class ContinueOperation extends LoopAffectOperation{
|
||||||
|
|
|
@ -47,6 +47,6 @@ public class MethodCallOperation extends JavaElement{
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
return search.apply(this, trace) ? (E)this : null;
|
return search.apply(this, trace) || trace.remove(trace.size()-1) == null ? (E)this : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,22 +71,26 @@ public abstract class OperationContainer extends JavaElement{
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
||||||
if(search.apply(this)) return (E)this;
|
if(search.apply(this)) return (E)this;
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(!deep.apply(trace)) return null;
|
if(!deep.apply(trace)) return null;
|
||||||
for(JavaElement element : this.childs){
|
for(JavaElement element : this.childs){
|
||||||
E result = element.find(search, deep, trace);
|
E result = element.find(search, deep, trace);
|
||||||
if(result != null) return result;
|
if(result != null) return result;
|
||||||
}
|
}
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(search.apply(this, trace)) return (E)this;
|
if(search.apply(this, trace)) return (E)this;
|
||||||
for(JavaElement element : this.childs){
|
for(JavaElement element : this.childs){
|
||||||
E result = element.find(search, trace);
|
E result = element.find(search, trace);
|
||||||
if(result != null) return result;
|
if(result != null) return result;
|
||||||
}
|
}
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,18 +53,22 @@ public class ReturnOperation extends JavaElement{
|
||||||
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
public <E extends JavaElement> E find(java.util.function.Function<JavaElement, Boolean> search, java.util.function.Function<List<JavaElement>, Boolean> deep, List<JavaElement> trace){
|
||||||
if(search.apply(this)) return (E)this;
|
if(search.apply(this)) return (E)this;
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(!deep.apply(trace)) return null;
|
if(!deep.apply(trace)) return null;
|
||||||
E result = value.find(search, deep, trace);
|
E result = value.find(search, deep, trace);
|
||||||
if(result != null) return result;
|
if(result != null) return result;
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
public <E extends JavaElement> E find(BiFunction<JavaElement, List<JavaElement>, Boolean> search, List<JavaElement> trace){
|
||||||
trace.add(this);
|
trace.add(this);
|
||||||
|
int index = trace.size()-1;
|
||||||
if(search.apply(this, trace)) return (E)this;
|
if(search.apply(this, trace)) return (E)this;
|
||||||
E result = value.find(search, trace);
|
E result = value.find(search, trace);
|
||||||
if(result != null) return result;
|
if(result != null) return result;
|
||||||
|
trace.remove(index);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package be.jeffcheasey88.peeratcode.parser.java;
|
package be.jeffcheasey88.peeratcode.parser.java;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.TestInstance;
|
import org.junit.jupiter.api.TestInstance;
|
||||||
|
@ -85,4 +87,27 @@ class SearchTest{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void verifyPath(){
|
||||||
|
try {
|
||||||
|
JavaParser parser = parse("package be.jeffcheasey88.peeratcode.parser.java; class Test{ void function(){ int i = 0; if(i == 0){ this.none();this.yes();this.none(); } valid(); } }");
|
||||||
|
|
||||||
|
java.lang.Class[] exceptedStack = { Class.class, Function.class, IfOperation.class, MethodCallOperation.class };
|
||||||
|
MethodCallOperation element = parser.find(
|
||||||
|
(e, trace) -> {
|
||||||
|
if((e instanceof MethodCallOperation) && ((MethodCallOperation)e).getValue().equals("this.yes()")){
|
||||||
|
java.lang.Class[] stack = (java.lang.Class[]) trace.stream().map((current) -> current.getClass()).toArray((i) -> new java.lang.Class[i]);
|
||||||
|
assertArrayEquals(exceptedStack, stack);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
assertNotNull(element);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue