diff --git a/src/test/java/spoon/reflect/ast/AstCheckerTest.java b/src/test/java/spoon/reflect/ast/AstCheckerTest.java index e0e129c688f..fb7979ffd2f 100644 --- a/src/test/java/spoon/reflect/ast/AstCheckerTest.java +++ b/src/test/java/spoon/reflect/ast/AstCheckerTest.java @@ -4,6 +4,7 @@ import spoon.Launcher; import spoon.experimental.modelobs.FineModelChangeListener; import spoon.reflect.code.CtBlock; +import spoon.reflect.code.CtFieldRead; import spoon.reflect.code.CtIf; import spoon.reflect.code.CtInvocation; import spoon.reflect.code.CtReturn; @@ -19,6 +20,8 @@ import spoon.support.DerivedProperty; import spoon.support.UnsettableProperty; import spoon.support.comparator.CtLineElementComparator; +import spoon.support.util.ModelList; +import spoon.support.util.ModelSet; import java.util.Arrays; import java.util.Collection; @@ -146,6 +149,7 @@ private boolean isToBeProcessed(CtMethod candidate) { && !isSurcharged(candidate) // && !isDelegateMethod(candidate) // && !isUnsupported(candidate.getBody()) // + && !isCallModelCollection(candidate.getBody()) // && !hasPushToStackInvocation(candidate.getBody()); } @@ -214,6 +218,28 @@ private boolean isUnsupported(CtBlock body) { && body.getStatements().get(0) instanceof CtThrow // && "UnsupportedOperationException".equals(((CtThrow) body.getStatements().get(0)).getThrownExpression().getType().getSimpleName()); } + + private boolean isCallModelCollection(CtBlock body) { + + return body.filterChildren((CtInvocation inv) -> { + if (inv.getTarget() instanceof CtFieldRead) { + CtFieldRead fielRead = (CtFieldRead) inv.getTarget(); + if (isModelCollection(fielRead.getType()) ) { + //it is invocation on ModelList, ModelSet or ModelMap + return true; + } + } + return false; + }).first() != null; + } + + private boolean isModelCollection(CtTypeReference typeRef) { + Factory f = typeRef.getFactory(); + if (typeRef.isSubtypeOf(f.Type().createReference(ModelList.class))) return true; + if (typeRef.isSubtypeOf(f.Type().createReference(ModelSet.class))) return true; +// if (typeRef.isSubtypeOf(f.Type().createReference(ModelMap.class))) return true; + return false; + } private boolean hasPushToStackInvocation(CtBlock body) { return body.getElements(new TypeFilter>(CtInvocation.class) {