@Override public <T> void visitCtVariableRead(CtVariableRead<T> variableRead) { enterCtExpression(variableRead); printer.writeIdentifier(variableRead.getVariable().getSimpleName()); exitCtExpression(variableRead); }
@java.lang.Override public <T> void visitCtVariableRead(final spoon.reflect.code.CtVariableRead<T> variableRead) { spoon.reflect.code.CtVariableRead other = ((spoon.reflect.code.CtVariableRead) (this.stack.peek())); enter(variableRead); biScan(spoon.reflect.path.CtRole.ANNOTATION, variableRead.getAnnotations(), other.getAnnotations()); biScan(spoon.reflect.path.CtRole.CAST, variableRead.getTypeCasts(), other.getTypeCasts()); biScan(spoon.reflect.path.CtRole.VARIABLE, variableRead.getVariable(), other.getVariable()); biScan(spoon.reflect.path.CtRole.COMMENT, variableRead.getComments(), other.getComments()); exit(variableRead); }
@Override public <T> void visitCtVariableRead(final CtVariableRead<T> variableRead) { enter(variableRead); scan(CtRole.ANNOTATION, variableRead.getAnnotations()); scan(CtRole.CAST, variableRead.getTypeCasts()); scan(CtRole.VARIABLE, variableRead.getVariable()); scan(CtRole.COMMENT, variableRead.getComments()); exit(variableRead); }
@java.lang.Override public <T> void visitCtVariableRead(final spoon.reflect.code.CtVariableRead<T> variableRead) { replaceInListIfExist(variableRead.getAnnotations(), new spoon.support.visitor.replace.ReplacementVisitor.CtElementAnnotationsReplaceListener(variableRead)); replaceInListIfExist(variableRead.getTypeCasts(), new spoon.support.visitor.replace.ReplacementVisitor.CtExpressionTypeCastsReplaceListener(variableRead)); replaceElementIfExist(variableRead.getVariable(), new spoon.support.visitor.replace.ReplacementVisitor.CtVariableAccessVariableReplaceListener(variableRead)); replaceInListIfExist(variableRead.getComments(), new spoon.support.visitor.replace.ReplacementVisitor.CtElementCommentsReplaceListener(variableRead)); }
@Override public boolean matches(CtVariableRead element) { return localVariableReference.equals(element.getVariable()); } }
@Override public boolean matches(CtVariableRead element) { return localVariableReference.equals(element.getVariable()); } }
@java.lang.Override public <T> void visitCtVariableRead(final spoon.reflect.code.CtVariableRead<T> variableRead) { spoon.reflect.code.CtVariableRead<T> aCtVariableRead = variableRead.getFactory().Core().createVariableRead(); this.builder.copy(variableRead, aCtVariableRead); aCtVariableRead.setAnnotations(this.cloneHelper.clone(variableRead.getAnnotations())); aCtVariableRead.setTypeCasts(this.cloneHelper.clone(variableRead.getTypeCasts())); aCtVariableRead.setVariable(this.cloneHelper.clone(variableRead.getVariable())); aCtVariableRead.setComments(this.cloneHelper.clone(variableRead.getComments())); this.cloneHelper.tailor(variableRead, aCtVariableRead); this.other = aCtVariableRead; }
private void inlineLocalVariable(CtMethod<?> amplifiedTestToBeMinimized) { final List<CtLocalVariable> localVariables = amplifiedTestToBeMinimized.getElements(new TypeFilter<>(CtLocalVariable.class)); final List<CtVariableRead> variableReads = localVariables.stream().map(LOCAL_VARIABLE_READ_FILTER::new) .flatMap(filter -> amplifiedTestToBeMinimized.getElements(filter).stream()) .collect(Collectors.toList()); // we can inline all local variables that are used one time and that have been generated by DSpot final List<CtLocalVariable> oneTimeUsedLocalVariable = localVariables.stream() .filter(localVariable -> variableReads.stream() .map(CtVariableRead::getVariable) .filter(variableRead -> variableRead.equals(localVariable.getReference())) .count() == 1 ).collect(Collectors.toList()); oneTimeUsedLocalVariable.stream().map(localVariable -> { DSpotUtils.printProgress(oneTimeUsedLocalVariable.indexOf(localVariable), oneTimeUsedLocalVariable.size()); variableReads.stream() .filter(variableRead -> variableRead.getVariable().equals(localVariable.getReference()) ).findFirst() .get() .replace(localVariable.getAssignment().clone()); return localVariable; }).forEach(amplifiedTestToBeMinimized.getBody()::removeStatement); //TODO we can inline all local variables that are used only in assertion }
private void inlineLocalVariable(CtMethod<?> amplifiedTestToBeMinimized) { final List<CtLocalVariable> localVariables = amplifiedTestToBeMinimized.getElements(new TypeFilter<>(CtLocalVariable.class)); final List<CtVariableRead> variableReads = localVariables.stream().map(LOCAL_VARIABLE_READ_FILTER::new) .flatMap(filter -> amplifiedTestToBeMinimized.getElements(filter).stream()) .collect(Collectors.toList()); // we can inline all local variables that are used one time and that have been generated by DSpot final List<CtLocalVariable> oneTimeUsedLocalVariable = localVariables.stream() .filter(localVariable -> variableReads.stream() .map(CtVariableRead::getVariable) .filter(variableRead -> variableRead.equals(localVariable.getReference())) .count() == 1 ).collect(Collectors.toList()); oneTimeUsedLocalVariable.stream().map(localVariable -> { DSpotUtils.printProgress(oneTimeUsedLocalVariable.indexOf(localVariable), oneTimeUsedLocalVariable.size()); variableReads.stream() .filter(variableRead -> variableRead.getVariable().equals(localVariable.getReference()) ).findFirst() .get() .replace(localVariable.getAssignment().clone()); return localVariable; }).forEach(amplifiedTestToBeMinimized.getBody()::removeStatement); //TODO we can inline all local variables that are used only in assertion }
private void removeUselessDuplicateAssertions(CtBlock<?> block, CtInvocation<?> duplicatesAssertion, List<CtStatement> statements) { final CtVariableReference variable = ((CtVariableRead<?>) duplicatesAssertion .filterChildren(new TypeFilter<CtVariableRead<?>>(CtVariableRead.class)) .first()) .getVariable(); boolean canBeRemoved = true; for (int i = statements.indexOf(duplicatesAssertion) + 1; i < statements.lastIndexOf(duplicatesAssertion); i++) { if (!TestFramework.get().isAssert(statements.get(i))) { final CtVariableRead<?> first = statements.get(i) .filterChildren(new TypeFilter<CtVariableRead<?>>(CtVariableRead.class) { @Override public boolean matches(CtVariableRead<?> element) { return element.getVariable().equals(variable); } }).first(); if (first != null) { canBeRemoved = false; break; } } } if (canBeRemoved) { block.getStatements().remove(statements.lastIndexOf(duplicatesAssertion)); } }
private void removeUselessDuplicateAssertions(CtBlock<?> block, CtInvocation<?> duplicatesAssertion, List<CtStatement> statements) { final CtVariableReference variable = ((CtVariableRead<?>) duplicatesAssertion .filterChildren(new TypeFilter<CtVariableRead<?>>(CtVariableRead.class)) .first()) .getVariable(); boolean canBeRemoved = true; for (int i = statements.indexOf(duplicatesAssertion) + 1; i < statements.lastIndexOf(duplicatesAssertion); i++) { if (!TestFramework.get().isAssert(statements.get(i))) { final CtVariableRead<?> first = statements.get(i) .filterChildren(new TypeFilter<CtVariableRead<?>>(CtVariableRead.class) { @Override public boolean matches(CtVariableRead<?> element) { return element.getVariable().equals(variable); } }).first(); if (first != null) { canBeRemoved = false; break; } } } if (canBeRemoved) { block.getStatements().remove(statements.lastIndexOf(duplicatesAssertion)); } }
String simpleNameVar = aVar.getVariable().getType().getSimpleName(); if (aVar.getVariable().getModifiers().contains(ModifierKind.STATIC) || "String".equals(simpleNameVar))
invocation.getParent(CtStatementList.class).insertBefore(statementTypeFilter, localVariable); } else if (clone instanceof CtVariableRead && !(clone instanceof CtFieldRead)) { final CtVariableReference variable = ((CtVariableRead) clone).getVariable(); final List<CtLocalVariable> assertedVariables = invocation.getParent(CtBlock.class).getElements( localVariable -> localVariable.getSimpleName().equals(variable.getSimpleName())