diff --git a/edu.cuny.hunter.streamrefactoring.core/src/edu/cuny/hunter/streamrefactoring/core/analysis/StreamAnalyzer.java b/edu.cuny.hunter.streamrefactoring.core/src/edu/cuny/hunter/streamrefactoring/core/analysis/StreamAnalyzer.java index 58a00913..cbe5b0d2 100644 --- a/edu.cuny.hunter.streamrefactoring.core/src/edu/cuny/hunter/streamrefactoring/core/analysis/StreamAnalyzer.java +++ b/edu.cuny.hunter.streamrefactoring.core/src/edu/cuny/hunter/streamrefactoring/core/analysis/StreamAnalyzer.java @@ -26,8 +26,10 @@ import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.dom.ASTVisitor; +import org.eclipse.jdt.core.dom.FieldDeclaration; import org.eclipse.jdt.core.dom.IMethodBinding; import org.eclipse.jdt.core.dom.ITypeBinding; +import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.MethodInvocation; import org.eclipse.jdt.internal.corext.util.JdtFlags; @@ -61,6 +63,12 @@ public class StreamAnalyzer extends ASTVisitor { private static final int N_FOR_STREAMS_DEFAULT = 2; + private int numberOfMethodForStreamReturnType; + + private int numberOfMethodForStreamParameter; + + private int numberOfFieldForStream; + private static void addImplicitEntryPoints(Collection target, Iterable source) { for (Entrypoint implicitEntryPoint : source) if (target.add(implicitEntryPoint)) @@ -511,4 +519,49 @@ public boolean visit(MethodInvocation node) { return super.visit(node); } + + @Override + public boolean visit(MethodDeclaration methodDeclaration) { + IMethodBinding methodBinding = methodDeclaration.resolveBinding(); + ITypeBinding returnType = methodBinding.getReturnType(); + boolean returnTypeImplementsBaseStream = Util.implementsBaseStream(returnType); + if (returnTypeImplementsBaseStream) { + numberOfMethodForStreamReturnType++; + super.visit(methodDeclaration); + } + ITypeBinding parameterTypes[] = methodBinding.getParameterTypes(); + if (parameterTypes.length < 1) + return false; + else { + for (ITypeBinding parameterBinding : parameterTypes) { + if (Util.implementsBaseStream(parameterBinding)) { + numberOfMethodForStreamParameter++; + break; + } + } + } + return super.visit(methodDeclaration); + } + + @Override + public boolean visit(FieldDeclaration fieldDeclaration) { + ITypeBinding fieldBinding = fieldDeclaration.getType().resolveBinding(); + if (Util.implementsBaseStream(fieldBinding)) { + numberOfFieldForStream++; + } + return super.visit(fieldDeclaration); + } + + public int getNumberOfMethodForStreamReturnType() { + return this.numberOfMethodForStreamReturnType; + } + + public int getNumberOfMethodForStreamParameter() { + return this.numberOfMethodForStreamParameter; + } + + public int getNumberOfFieldForStream() { + return this.numberOfFieldForStream; + } + } diff --git a/edu.cuny.hunter.streamrefactoring.core/src/edu/cuny/hunter/streamrefactoring/core/refactorings/OptimizeStreamsRefactoringProcessor.java b/edu.cuny.hunter.streamrefactoring.core/src/edu/cuny/hunter/streamrefactoring/core/refactorings/OptimizeStreamsRefactoringProcessor.java index 02eeb7e9..6641cacc 100644 --- a/edu.cuny.hunter.streamrefactoring.core/src/edu/cuny/hunter/streamrefactoring/core/refactorings/OptimizeStreamsRefactoringProcessor.java +++ b/edu.cuny.hunter.streamrefactoring.core/src/edu/cuny/hunter/streamrefactoring/core/refactorings/OptimizeStreamsRefactoringProcessor.java @@ -150,6 +150,12 @@ public static void setLoggingLevel(int level) { private boolean useImplicitTestEntrypoints = false; + private int numberOfMethodForStreamReturnType; + + private int numberOfMethodForStreamParameter; + + private int numberOfFieldForStream; + public OptimizeStreamsRefactoringProcessor() throws JavaModelException { this(null, null, false, true, false, false, false, Optional.empty()); } @@ -212,6 +218,12 @@ private RefactoringStatus checkExistence(IMember member, PreconditionFailure fai return new RefactoringStatus(); } + private void setStatistics(int methodForStreamReturnType, int methodForStreamParameter, int fieldForStream) { + this.numberOfMethodForStreamReturnType = methodForStreamReturnType; + this.numberOfMethodForStreamParameter = methodForStreamParameter; + this.numberOfFieldForStream = fieldForStream; + } + @Override public RefactoringStatus checkFinalConditions(final IProgressMonitor monitor, final CheckConditionsContext context) throws CoreException, OperationCanceledException { @@ -254,6 +266,9 @@ public RefactoringStatus checkFinalConditions(final IProgressMonitor monitor, fi subMonitor.split(IProgressMonitor.UNKNOWN, SubMonitor.SUPPRESS_NONE)); subMonitor.worked(1); + this.setStatistics(analyzer.getNumberOfMethodForStreamReturnType(), + analyzer.getNumberOfMethodForStreamParameter(), analyzer.getNumberOfFieldForStream()); + // set statistics for stream instances. this.setNumberOfProcessedStreamInstances(analyzer.getNumberOfProcessedStreamInstances()); this.setNumberOfSkippedStreamInstances(analyzer.getNumberOfSkippedStreamInstances()); @@ -580,4 +595,16 @@ public void setUseImplicitJavaFXEntrypoints(boolean useImplicitJavaFXEntrypoints public void setUseImplicitTestEntrypoints(boolean useImplicitTestEntrypoints) { this.useImplicitTestEntrypoints = useImplicitTestEntrypoints; } + + public int getNumberOfMethodForStreamReturnType() { + return this.numberOfMethodForStreamReturnType; + } + + public int getNumberOfMethodForStreamParameter() { + return this.numberOfMethodForStreamParameter; + } + + public int getNumberOfFieldForStream() { + return this.numberOfFieldForStream; + } } diff --git a/edu.cuny.hunter.streamrefactoring.eval/src/edu/cuny/hunter/streamrefactoring/eval/handlers/EvaluateConvertToParallelStreamRefactoringHandler.java b/edu.cuny.hunter.streamrefactoring.eval/src/edu/cuny/hunter/streamrefactoring/eval/handlers/EvaluateConvertToParallelStreamRefactoringHandler.java index eef51a54..da913e3c 100644 --- a/edu.cuny.hunter.streamrefactoring.eval/src/edu/cuny/hunter/streamrefactoring/eval/handlers/EvaluateConvertToParallelStreamRefactoringHandler.java +++ b/edu.cuny.hunter.streamrefactoring.eval/src/edu/cuny/hunter/streamrefactoring/eval/handlers/EvaluateConvertToParallelStreamRefactoringHandler.java @@ -339,6 +339,8 @@ public Object execute(ExecutionEvent event) throws ExecutionException { resultsHeader.add(action.toString()); resultsHeader.add("time (s)"); + resultsHeader.addAll(Arrays.asList("#methods for stream return type", "#methods for stream parameter", + "#number of fields for stream")); resultsPrinter = createCSVPrinter("results.csv", resultsHeader.toArray(new String[resultsHeader.size()])); @@ -585,6 +587,10 @@ public Object execute(ExecutionEvent event) throws ExecutionException { resultsPrinter.print((resultsTimeCollector.getCollectedTime() - processor.getExcludedTimeCollector().getCollectedTime()) / 1000.0); + resultsPrinter.print(processor.getNumberOfMethodForStreamReturnType()); + resultsPrinter.print(processor.getNumberOfMethodForStreamParameter()); + resultsPrinter.print(processor.getNumberOfFieldForStream()); + // end the record. resultsPrinter.println();