From 763015c9f15670d30a6fbc24bda0846657a31472 Mon Sep 17 00:00:00 2001 From: Rodrigo Bonifacio Date: Mon, 29 May 2017 09:36:22 -0300 Subject: [PATCH 1/2] introduction of the ExistPatternToLambda --- src/Driver.rsc | 4 +++- ...erPatternToLambda.rsc => ExistPatternToLambda.rsc} | 11 ++++++++--- testes/BasicTest.java | 4 +++- 3 files changed, 14 insertions(+), 5 deletions(-) rename src/lang/java/refactoring/{FilterPatternToLambda.rsc => ExistPatternToLambda.rsc} (54%) diff --git a/src/Driver.rsc b/src/Driver.rsc index db06f86..c7be16a 100644 --- a/src/Driver.rsc +++ b/src/Driver.rsc @@ -16,7 +16,8 @@ import lang::java::refactoring::SwitchString; import lang::java::refactoring::VarArgs; import lang::java::refactoring::Diamond; import lang::java::refactoring::AnonymousToLambda; -import lang::java::refactoring::FilterPatternToLambda; +import lang::java::refactoring::ExistPatternToLambda; +import lang::java::refactoring::FilterPattern; import lang::java::util::ManageCompilationUnit; import lang::java::m3::M3Util; @@ -53,6 +54,7 @@ public void refactorProjects(loc input, bool verbose = true) { case /VA/: executeTransformations(projectFiles, toInt(projectDescriptor[3]), verbose, refactorVarArgs, "varargs"); case /DI/: executeTransformations(projectFiles, toInt(projectDescriptor[3]), verbose, refactorDiamond, "diamond"); case /AC/: executeTransformations(projectFiles, toInt(projectDescriptor[3]), verbose, refactorAnonymousInnerClass, "aic"); + case /EP/: executeTransformations(projectFiles, toInt(projectDescriptor[3]), verbose, refactorExistPattern, "exist pattern"); case /FP/: executeTransformations(projectFiles, toInt(projectDescriptor[3]), verbose, refactorFilterPattern, "filter pattern"); default: logMessage(" ... nothing to be done"); } diff --git a/src/lang/java/refactoring/FilterPatternToLambda.rsc b/src/lang/java/refactoring/ExistPatternToLambda.rsc similarity index 54% rename from src/lang/java/refactoring/FilterPatternToLambda.rsc rename to src/lang/java/refactoring/ExistPatternToLambda.rsc index d8cb4a6..22d8c5c 100644 --- a/src/lang/java/refactoring/FilterPatternToLambda.rsc +++ b/src/lang/java/refactoring/ExistPatternToLambda.rsc @@ -1,14 +1,19 @@ -module lang::java::refactoring::FilterPatternToLambda +module lang::java::refactoring::ExistPatternToLambda import ParseTree; import lang::java::\syntax::Java18; -public tuple[int, CompilationUnit] refactorFilterPattern(CompilationUnit cu) { +/** + * Refactor a compilation unit to replace + * foreach statements, according to the + * exist pattern, into a lambda expression. + */ +public tuple[int, CompilationUnit] refactorExistPattern(CompilationUnit cu) { int total = 0; CompilationUnit unit = visit(cu) { case(BlockStatements)`for( : ) { if() { return true; } } return false;` : { total += 1; - insert (BlockStatements)`return .stream().anyMatches( -\> );`; + insert (BlockStatements)`return .stream().anyMatch( -\> );`; } }; return ; diff --git a/testes/BasicTest.java b/testes/BasicTest.java index 1482147..b2dc833 100644 --- a/testes/BasicTest.java +++ b/testes/BasicTest.java @@ -31,7 +31,9 @@ public static void whileWithIteratorStatement() { } for(int s : list) { if(s.length()) { return true; } - } + } return false; + + //for(int s: list) { if(s.lenght()) { return true; } } } public static void ifElseStatement(String string, int number, boolean bool) { From 5d98bc4544bd35d4194fd114a76dd77a09f1f584 Mon Sep 17 00:00:00 2001 From: Rodrigo Bonifacio Date: Mon, 29 May 2017 09:36:56 -0300 Subject: [PATCH 2/2] introduction of the FilterPattern --- src/lang/java/refactoring/FilterPattern.rsc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/lang/java/refactoring/FilterPattern.rsc diff --git a/src/lang/java/refactoring/FilterPattern.rsc b/src/lang/java/refactoring/FilterPattern.rsc new file mode 100644 index 0000000..215e6b6 --- /dev/null +++ b/src/lang/java/refactoring/FilterPattern.rsc @@ -0,0 +1,20 @@ +module lang::java::refactoring::FilterPattern + +import ParseTree; +import lang::java::\syntax::Java18; + +/** + * Refactor a compilation unit to replace + * foreach statements, according to the + * exist pattern, into a lambda expression. + */ +public tuple[int, CompilationUnit] refactorFilterPattern(CompilationUnit cu) { + int total = 0; + CompilationUnit unit = visit(cu) { + case(BlockStatements)`for( : ) { if() { return true; }}` : { + total += 1; + insert (BlockStatements)`c = exp.stream().filter(var -\> e).list();`; + } + }; + return ; +} \ No newline at end of file