From 262645886a74dbee0743016934617d1b835d1aee Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Tue, 24 Mar 2020 21:42:42 +0100 Subject: [PATCH 01/14] Upload --- .../control/utils/SelectionNodeFinder.xtend | 2 +- .../control/wizards/RefJavaWizard.xtend | 11 +- .../control/wizards/RefJavaWizardPage.xtend | 2 +- hu.elte.refjava.examples/.classpath | 6 +- .../src/hu/elte/refjava/examples/Target.java | 24 +- .../refjava/examples/refactorings.refjava | 54 +++- hu.elte.refjava.lang.ide/.classpath | 6 +- hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF | 7 +- .../refjava/lang/ide/RefJavaIdeSetup.xtend | 2 +- hu.elte.refjava.lang.ui/.classpath | 8 +- hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF | 8 +- hu.elte.refjava.lang/.classpath | 6 +- ...a (refjava) Language Infrastructure.launch | 31 +-- .../.launch/Launch Runtime Eclipse.launch | 64 ++--- hu.elte.refjava.lang/META-INF/MANIFEST.MF | 17 +- hu.elte.refjava.lang/plugin.xml_gen | 10 + .../elte/refjava/api/BlockRefactoring.xtend | 123 +++++++++ .../src/hu/elte/refjava/api/Check.xtend | 51 +++- .../elte/refjava/api/ClassRefactoring.xtend | 9 + .../elte/refjava/api/LambdaRefactoring.xtend | 166 ++++++++++++ .../elte/refjava/api/LocalRefactoring.xtend | 18 +- .../src/hu/elte/refjava/api/Refactoring.xtend | 6 +- .../refjava/api/patterns/ASTBuilder.xtend | 194 +++++++++++++- .../refjava/api/patterns/PatternMatcher.xtend | 250 ++++++++++++++++-- .../refjava/api/patterns/PatternParser.xtend | 41 ++- .../hu/elte/refjava/api/patterns/Utils.xtend | 43 +++ .../src/hu/elte/refjava/lang/RefJava.xtext | 62 ++++- .../lang/compiler/RefJavaCompiler.xtend | 53 +++- .../jvmmodel/RefJavaJvmModelInferrer.xtend | 96 ++++++- .../RefJavaImplicitlyImportedFeatures.xtend | 1 - .../lang/typesystem/RefJavaTypeComputer.xtend | 38 +++ .../lang/validation/RefJavaValidator.xtend | 38 +++ 32 files changed, 1303 insertions(+), 144 deletions(-) create mode 100644 hu.elte.refjava.lang/plugin.xml_gen create mode 100644 hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend create mode 100644 hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend create mode 100644 hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend create mode 100644 hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend diff --git a/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/SelectionNodeFinder.xtend b/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/SelectionNodeFinder.xtend index 13f6270..2eae168 100644 --- a/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/SelectionNodeFinder.xtend +++ b/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/SelectionNodeFinder.xtend @@ -17,7 +17,7 @@ class SelectionNodeFinder { if (coveringNode == finder.coveredNode) { return #[coveringNode] } - + val selectionRange = Range.closed(selection.offset, selection.offset + selection.length) return coveringNode.children.filter [ val nodeRange = Range.closed(startPosition, startPosition + length) diff --git a/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend b/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend index e1d464f..d997df6 100644 --- a/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend +++ b/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend @@ -49,18 +49,18 @@ class RefJavaWizard extends Wizard { val typeRoot = JavaUI.getEditorInputTypeRoot(editor.editorInput) val iCompUnit = typeRoot.getAdapter(ICompilationUnit) - val parser = ASTParser.newParser(AST.JLS10) + val parser = ASTParser.newParser(AST.JLS12) parser.setResolveBindings(true) parser.source = iCompUnit val compUnit = parser.createAST(null) as CompilationUnit - + val selectedNodes = SelectionNodeFinder.selectedNodes(selection, compUnit) val provider = editor.documentProvider val document = provider.getDocument(editor.editorInput) - - refactoringInstance.init(selectedNodes, document) - val status = refactoringInstance.apply + + refactoringInstance.init(selectedNodes, document, iCompUnit) + val status = refactoringInstance.apply switch status { case SUCCESS: MessageDialog.openInformation(dialog.shell, "Success", @@ -71,7 +71,6 @@ class RefJavaWizard extends Wizard { } } } - return true; } diff --git a/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizardPage.xtend b/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizardPage.xtend index 3864fa3..283cd83 100644 --- a/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizardPage.xtend +++ b/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizardPage.xtend @@ -46,7 +46,7 @@ class RefJavaWizardPage extends WizardPage { .flatMap[compilationUnits.toList] .map [ // do not optimize - val parser = ASTParser.newParser(AST.JLS10) + val parser = ASTParser.newParser(AST.JLS12) parser.setResolveBindings(true) parser.source = it parser.createAST(null) as CompilationUnit diff --git a/hu.elte.refjava.examples/.classpath b/hu.elte.refjava.examples/.classpath index 7142ac0..bfbab76 100644 --- a/hu.elte.refjava.examples/.classpath +++ b/hu.elte.refjava.examples/.classpath @@ -2,7 +2,11 @@ - + + + + + diff --git a/hu.elte.refjava.examples/src/hu/elte/refjava/examples/Target.java b/hu.elte.refjava.examples/src/hu/elte/refjava/examples/Target.java index a3e7a32..1583101 100644 --- a/hu.elte.refjava.examples/src/hu/elte/refjava/examples/Target.java +++ b/hu.elte.refjava.examples/src/hu/elte/refjava/examples/Target.java @@ -9,10 +9,24 @@ public class Target { * Change the 4th 'a' reference to 'this.a' * and try again the last step. */ - void f() { - int a = 5; - int b = a; - System.out.println(a + b); - System.out.println(a); + void f() + { + int x; + int a; + { + System.out.println("asd"); + int k; + } + int b; + } } + + +/*new F() { +public void apply() { + System.out.println("ASD"); +} +}.apply();*/ + +//interface F { void apply(); } \ No newline at end of file diff --git a/hu.elte.refjava.examples/src/hu/elte/refjava/examples/refactorings.refjava b/hu.elte.refjava.examples/src/hu/elte/refjava/examples/refactorings.refjava index cab1059..294a85f 100644 --- a/hu.elte.refjava.examples/src/hu/elte/refjava/examples/refactorings.refjava +++ b/hu.elte.refjava.examples/src/hu/elte/refjava/examples/refactorings.refjava @@ -1,20 +1,56 @@ package hu.elte.refjava.examples; -local refactoring identity() - #s.. - ~~~~ - #s.. +block refactoring identity() + { target } + ~~~~~~~~~~~~ + target ; + local refactoring insertEmptyBlockAfter() - #s.. + #s ; #s2 ~~~~~~~~~ - #s.. ; {} + #s ; {} +when + isInsideBlock(#s) + + +local refactoring test() + #s1 ; #s ; #s2.. + ~~~~~~~~~ + #s1 + local refactoring moveIntoNextBlock() - #s1 ; { #s2.. } ; #s3 + #s1.. ; { #s2.. } ; #s3 ; { #s4.. } ; #s5 ~~~~~~~~~~~~~~~~~~~~~ - { #s1 ; #s2.. } ; #s3 -when + { #s1.. ; #s2.. } ; #s3 ; { #s5 ; #s4.. } +/*when !isVariableDeclaration(#s1) || !isReferencedIn(asVariableDeclaration(#s1), + blockRemainder(#s3))*/ + + +block refactoring blockIdentity() + #s1 ; target ; #s2 + ~~~~~~~~ + #s1 ; target ; #s2 + + +block refactoring blocktest() + target ; { #s2.. } ; #s3 + ~~~~~~~~~~~~~~~~~~~~~ + { target ; #s2.. } ; #s3 +/*when + !isVariableDeclaration(target) || + !isReferencedIn(asVariableDeclaration(target), blockRemainder(#s3)) +*/ +lambda refactoring l() + #s2 + ~~~~~~ + #s2 + + + + + diff --git a/hu.elte.refjava.lang.ide/.classpath b/hu.elte.refjava.lang.ide/.classpath index 8018385..ecd589b 100644 --- a/hu.elte.refjava.lang.ide/.classpath +++ b/hu.elte.refjava.lang.ide/.classpath @@ -3,7 +3,11 @@ - + + + + + diff --git a/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF index eea8fc8..c0d4294 100644 --- a/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF @@ -9,8 +9,11 @@ Bundle-ActivationPolicy: lazy Require-Bundle: hu.elte.refjava, org.eclipse.xtext.ide, org.eclipse.xtext.xbase.ide, - org.antlr.runtime;bundle-version="[3.2.0,3.2.1)" + org.antlr.runtime;bundle-version="[3.2.0,3.2.1)", + com.google.guava, + org.eclipse.xtext.xbase.lib, + org.eclipse.xtend.lib, + org.eclipse.xtend.lib.macro Bundle-RequiredExecutionEnvironment: JavaSE-10 Export-Package: hu.elte.refjava.lang.ide.contentassist.antlr, hu.elte.refjava.lang.ide.contentassist.antlr.internal - diff --git a/hu.elte.refjava.lang.ide/src/hu/elte/refjava/lang/ide/RefJavaIdeSetup.xtend b/hu.elte.refjava.lang.ide/src/hu/elte/refjava/lang/ide/RefJavaIdeSetup.xtend index 4899d68..37d34b9 100644 --- a/hu.elte.refjava.lang.ide/src/hu/elte/refjava/lang/ide/RefJavaIdeSetup.xtend +++ b/hu.elte.refjava.lang.ide/src/hu/elte/refjava/lang/ide/RefJavaIdeSetup.xtend @@ -15,6 +15,6 @@ class RefJavaIdeSetup extends RefJavaStandaloneSetup { override createInjector() { Guice.createInjector(Modules2.mixin(new RefJavaRuntimeModule, new RefJavaIdeModule)) + //this.createInjectorAndDoEMFRegistration() } - } diff --git a/hu.elte.refjava.lang.ui/.classpath b/hu.elte.refjava.lang.ui/.classpath index 8018385..2b833b6 100644 --- a/hu.elte.refjava.lang.ui/.classpath +++ b/hu.elte.refjava.lang.ui/.classpath @@ -1,9 +1,13 @@ + + + + + + - - diff --git a/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF index 41c2685..826be51 100644 --- a/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF @@ -19,12 +19,12 @@ Require-Bundle: hu.elte.refjava, org.eclipse.xtext.xbase.ui, org.eclipse.compare, org.eclipse.xtext.builder, - org.eclipse.xtend.lib;resolution:=optional, + org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional, org.eclipse.jdt.debug.ui Import-Package: org.apache.log4j Bundle-RequiredExecutionEnvironment: JavaSE-10 -Export-Package: hu.elte.refjava.lang.ui.internal, +Export-Package: hu.elte.refjava.lang.ui.contentassist, hu.elte.refjava.lang.ui.quickfix, - hu.elte.refjava.lang.ui.editor, - hu.elte.refjava.lang.ui.contentassist + hu.elte.refjava.lang.ui.internal, + hu.elte.refjava.lang.ui.editor Bundle-Activator: hu.elte.refjava.lang.ui.internal.LangActivator diff --git a/hu.elte.refjava.lang/.classpath b/hu.elte.refjava.lang/.classpath index 8018385..ecd589b 100644 --- a/hu.elte.refjava.lang/.classpath +++ b/hu.elte.refjava.lang/.classpath @@ -3,7 +3,11 @@ - + + + + + diff --git a/hu.elte.refjava.lang/.launch/Generate RefJava (refjava) Language Infrastructure.launch b/hu.elte.refjava.lang/.launch/Generate RefJava (refjava) Language Infrastructure.launch index 6b8b3eb..f0a5e4b 100644 --- a/hu.elte.refjava.lang/.launch/Generate RefJava (refjava) Language Infrastructure.launch +++ b/hu.elte.refjava.lang/.launch/Generate RefJava (refjava) Language Infrastructure.launch @@ -1,18 +1,19 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/hu.elte.refjava.lang/.launch/Launch Runtime Eclipse.launch b/hu.elte.refjava.lang/.launch/Launch Runtime Eclipse.launch index f53c414..ec3e469 100644 --- a/hu.elte.refjava.lang/.launch/Launch Runtime Eclipse.launch +++ b/hu.elte.refjava.lang/.launch/Launch Runtime Eclipse.launch @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hu.elte.refjava.lang/META-INF/MANIFEST.MF b/hu.elte.refjava.lang/META-INF/MANIFEST.MF index 8f5a5c7..d2c2bf2 100644 --- a/hu.elte.refjava.lang/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang/META-INF/MANIFEST.MF @@ -19,18 +19,21 @@ Require-Bundle: org.eclipse.xtext, org.antlr.runtime;bundle-version="[3.2.0,3.2.1)", org.eclipse.jdt.core;bundle-version="3.15.0", org.eclipse.jface.text;bundle-version="3.14.0", - org.eclipse.xtext.testing;bundle-version="2.15.0" + org.eclipse.xtext.testing;bundle-version="2.15.0", + com.google.guava, + org.eclipse.xtend.lib.macro, + org.junit Bundle-RequiredExecutionEnvironment: JavaSE-10 Export-Package: hu.elte.refjava.api, hu.elte.refjava.lang, hu.elte.refjava.lang.jvmmodel, - hu.elte.refjava.lang.parser.antlr, - hu.elte.refjava.lang.parser.antlr.internal, + hu.elte.refjava.lang.scoping, + hu.elte.refjava.lang.validation, hu.elte.refjava.lang.refJava, hu.elte.refjava.lang.refJava.impl, - hu.elte.refjava.lang.refJava.util, - hu.elte.refjava.lang.scoping, + hu.elte.refjava.lang.parser.antlr, hu.elte.refjava.lang.serializer, - hu.elte.refjava.lang.services, - hu.elte.refjava.lang.validation + hu.elte.refjava.lang.refJava.util, + hu.elte.refjava.lang.parser.antlr.internal, + hu.elte.refjava.lang.services Import-Package: org.apache.log4j diff --git a/hu.elte.refjava.lang/plugin.xml_gen b/hu.elte.refjava.lang/plugin.xml_gen new file mode 100644 index 0000000..4de08d7 --- /dev/null +++ b/hu.elte.refjava.lang/plugin.xml_gen @@ -0,0 +1,10 @@ + + + + + + + diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend new file mode 100644 index 0000000..319dbc1 --- /dev/null +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend @@ -0,0 +1,123 @@ +package hu.elte.refjava.api + +import hu.elte.refjava.api.patterns.ASTBuilder +import hu.elte.refjava.api.patterns.PatternMatcher +import hu.elte.refjava.api.patterns.PatternParser +import java.lang.reflect.Type +import java.util.List +import java.util.Map +import org.eclipse.jdt.core.ICompilationUnit +import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jface.text.IDocument + +class BlockRefactoring implements Refactoring { + + List target + IDocument document + + val PatternMatcher matcher + val ASTBuilder builder + protected val Map> bindings = newHashMap + protected val Map nameBindings = newHashMap + protected val Map typeBindings = newHashMap + protected val Map>> parameterBindings = newHashMap + protected String typeReferenceString + List replacement + + protected new(String matchingPatternString, String replacementPatternString) { + matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) + builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) + } + + override init(List target, IDocument document, ICompilationUnit iCompUnit) { + this.target = target + this.document = document + } + + def setTarget(List newTarget) { + this.target = newTarget + } + + override apply() { + return if(!safeTargetCheck) { + Status.TARGET_MATCH_FAILED + } else if (!safeMatch) { + Status.MATCH_FAILED + } else if (!safeCheck) { + Status.CHECK_FAILED + } else if (!safeBuild) { + Status.BUILD_FAILED + } else if (!safeReplace) { + Status.REPLACEMENT_FAILED + } else { + Status.SUCCESS + } + } + + def private safeMatch() { + setMetaVariables() + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, typeReferenceString) ) { + return false + } + + target = matcher.modifiedTarget.toList + + bindings.putAll(matcher.bindings) + return true + } + + def protected void setMetaVariables() { + //empty + } + + def protected safeTargetCheck() { + return true + } + + def protected targetCheck(String targetPatternString) { + + return matcher.match(PatternParser.parse(targetPatternString), target) + } + + def private safeCheck() { + try { + check() + } catch (Exception e) { + false + } + } + + def protected check() { + Check.isInsideBlock(target) + } + + def private safeBuild() { + try { + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, typeReferenceString) + } catch (Exception e) { + System.out.println(e) + return false + } + + return true + } + + def private safeReplace() { + try { + val rewrite = builder.rewrite + target.tail.forEach[rewrite.remove(it, null)] + + val group = rewrite.createGroupNode( replacement ) + rewrite.replace( target.head, group, null) + val edits = rewrite.rewriteAST(document, null) + edits.apply(document) + + } catch (Exception e) { + return false + } + + return true + } + + +} \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend index 32e2f9f..2954efb 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend @@ -8,9 +8,23 @@ import org.eclipse.jdt.core.dom.SimpleName import org.eclipse.jdt.core.dom.Statement import org.eclipse.jdt.core.dom.VariableDeclarationFragment import org.eclipse.jdt.core.dom.VariableDeclarationStatement +import java.lang.reflect.Type class Check { + + def static getTypeOf(Type type) { + return type + } + + def static returnIntParameter() { + val List> asd = newArrayList + asd.add(new Pair(typeof(char), "x")) + asd.add(new Pair(typeof(char), "y")) + return asd + } + + //actual def static isInsideBlock(ASTNode node) { node.parent instanceof Block } @@ -19,15 +33,37 @@ class Check { nodes.forall[isInsideBlock] } - def static isVariableDeclaration(ASTNode node) { + def dispatch static isVariableDeclaration(ASTNode node) { node instanceof VariableDeclarationStatement } + + def dispatch static isVariableDeclaration(List nodes) { + for (node : nodes) { + if( !(node instanceof VariableDeclarationStatement) ) { + return false + } + } + return true + } - def static asVariableDeclaration(ASTNode node) { + def dispatch static asVariableDeclaration(ASTNode node) { if (node instanceof VariableDeclarationStatement) { node } } + + def dispatch static asVariableDeclaration(List nodes) { + var Boolean l + for (node : nodes) { + if ( !(node instanceof VariableDeclarationStatement) ) { + l = false + } + } + + if (l) { + return nodes + } + } def static blockRemainder(ASTNode node) { val parent = node.parent @@ -36,7 +72,7 @@ class Check { } } - def static isReferencedIn(VariableDeclarationStatement varDecl, List nodes) { + def dispatch static isReferencedIn(VariableDeclarationStatement varDecl, List nodes) { (varDecl.fragments as List).exists [ val varBinding = resolveBinding nodes.exists [ @@ -58,5 +94,12 @@ class Check { ] ] } - + + def dispatch static boolean isReferencedIn(List varDeclList, List nodes) { + varDeclList.forall[!isReferencedIn(nodes)] + } + + + + } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend new file mode 100644 index 0000000..9116036 --- /dev/null +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend @@ -0,0 +1,9 @@ +package hu.elte.refjava.api + +class ClassRefactoring implements Refactoring { + + override apply() { + + } + +} \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend new file mode 100644 index 0000000..e28e334 --- /dev/null +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend @@ -0,0 +1,166 @@ +package hu.elte.refjava.api + +import hu.elte.refjava.api.patterns.ASTBuilder +import hu.elte.refjava.api.patterns.PatternMatcher +import hu.elte.refjava.api.patterns.PatternParser +import java.lang.reflect.Type +import java.util.List +import java.util.Map +import org.eclipse.jdt.core.ICompilationUnit +import org.eclipse.jdt.core.dom.AST +import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.ASTParser +import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.dom.MethodDeclaration +import org.eclipse.jdt.core.dom.SingleVariableDeclaration +import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jface.text.IDocument +import hu.elte.refjava.api.patterns.Utils + +class LambdaRefactoring implements Refactoring { + + List target + IDocument document + ICompilationUnit iCompUnit + + val PatternMatcher matcher + val ASTBuilder builder + protected val Map> bindings = newHashMap + protected val Map nameBindings = newHashMap + protected val Map typeBindings = newHashMap + protected val Map>> parameterBindings = newHashMap + protected String typeReferenceString + List replacement + + protected new(String matchingPatternString, String replacementPatternString) { + matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) + builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) + } + + override init(List target, IDocument document, ICompilationUnit iCompUnit) { + this.target = target + this.document = document + this.iCompUnit = iCompUnit + } + + def setTarget(List newTarget) { + this.target = newTarget + } + + override apply() { + return if(!safeTargetCheck) { + Status.TARGET_MATCH_FAILED + } else if (!safeMatch) { + Status.MATCH_FAILED + } else if (!safeCheck) { + Status.CHECK_FAILED + } else if (!safeBuild) { + Status.BUILD_FAILED + } else if (!safeReplace) { + Status.REPLACEMENT_FAILED + } else { + Status.SUCCESS + } + } + + def private safeMatch() { + try { + setMetaVariables() + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, typeReferenceString)) { + return false + } + target = matcher.modifiedTarget.toList + bindings.putAll(matcher.bindings) + return true + } catch (Exception e) { + println(e) + return false + } + + } + + def protected void setMetaVariables() { + //empty + } + + def protected safeTargetCheck() { + return true + } + + def protected targetCheck(String targetPatternString) { + return matcher.match(PatternParser.parse(targetPatternString), target) + } + + def private safeCheck() { + try { + return check() + } catch (Exception e) { + println(e) + return false + } + } + + def protected check() { + Check.isInsideBlock(target) + } + + def private safeBuild() { + try { + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, typeReferenceString) + } catch (Exception e) { + println(e) + return false + } + return true + } + + def private safeReplace() { + try { + val rewrite = builder.rewrite + target.tail.forEach[rewrite.remove(it, null)] + + val group = rewrite.createGroupNode( replacement ) + rewrite.replace( target.head, group, null) + var edits = rewrite.rewriteAST(document, null) + edits.apply(document) + + //testing + val ASTParser parser = ASTParser.newParser(AST.JLS12); + parser.setSource(iCompUnit); + val CompilationUnit compUnit = parser.createAST(null) as CompilationUnit; + + if(!compUnit.types.exists[ (it as TypeDeclaration).name.identifier == builder.newInterface.name.identifier]) { + + compUnit.recordModifications + + val newInterface = compUnit.AST.newTypeDeclaration + newInterface.interface = true + newInterface.name.identifier = builder.newInterface.name.identifier + for(method : builder.newInterface.bodyDeclarations) { + val m = method as MethodDeclaration + val newMethodDeclaration = compUnit.AST.newMethodDeclaration + newMethodDeclaration.name.identifier = m.name.identifier + newMethodDeclaration.returnType2 = Utils.getTypeFromId(m.returnType2.toString, compUnit.AST) + newInterface.bodyDeclarations.add(newMethodDeclaration) + for(arg : m.parameters ) { + val a = arg as SingleVariableDeclaration + val methodParameterDeclaration = compUnit.AST.newSingleVariableDeclaration + methodParameterDeclaration.name.identifier = a.name.identifier + methodParameterDeclaration.type = Utils.getTypeFromId(a.type.toString, compUnit.AST) + newMethodDeclaration.parameters.add(methodParameterDeclaration) + } + } + + compUnit.types().add(newInterface) + val edits2 = compUnit.rewrite(document, iCompUnit.javaProject.getOptions(true) ) + edits2.apply(document); + val String newSource = document.get(); + iCompUnit.getBuffer().setContents(newSource); + } + } catch (Exception e) { + println(e) + return false + } + return true + } +} \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend index cb53f41..1d53e24 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend @@ -3,8 +3,10 @@ package hu.elte.refjava.api import hu.elte.refjava.api.patterns.ASTBuilder import hu.elte.refjava.api.patterns.PatternMatcher import hu.elte.refjava.api.patterns.PatternParser +import java.lang.reflect.Type import java.util.List import java.util.Map +import org.eclipse.jdt.core.ICompilationUnit import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jface.text.IDocument @@ -16,6 +18,10 @@ class LocalRefactoring implements Refactoring { val PatternMatcher matcher val ASTBuilder builder protected val Map> bindings = newHashMap + protected val Map nameBindings = newHashMap + protected val Map typeBindings = newHashMap + protected val Map>> parameterBindings = newHashMap + protected String typeReferenceString List replacement protected new(String matchingPatternString, String replacementPatternString) { @@ -23,7 +29,7 @@ class LocalRefactoring implements Refactoring { builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) } - override init(List target, IDocument document) { + override init(List target, IDocument document, ICompilationUnit iCompUnit) { this.target = target this.document = document } @@ -43,7 +49,8 @@ class LocalRefactoring implements Refactoring { } def private safeMatch() { - if (!matcher.match(target)) { + setMetaVariables() + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, typeReferenceString)) { return false } @@ -58,6 +65,10 @@ class LocalRefactoring implements Refactoring { false } } + + def protected void setMetaVariables() { + //empty + } def protected check() { Check.isInsideBlock(target) @@ -65,7 +76,7 @@ class LocalRefactoring implements Refactoring { def private safeBuild() { try { - replacement = builder.build(target.head.AST, bindings) + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, typeReferenceString) } catch (Exception e) { return false } @@ -89,5 +100,4 @@ class LocalRefactoring implements Refactoring { return true } - } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend index d5d6230..f284cb8 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend @@ -3,6 +3,7 @@ package hu.elte.refjava.api import java.util.List import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jface.text.IDocument +import org.eclipse.jdt.core.ICompilationUnit interface Refactoring { @@ -11,10 +12,11 @@ interface Refactoring { MATCH_FAILED, CHECK_FAILED, BUILD_FAILED, - REPLACEMENT_FAILED + REPLACEMENT_FAILED, + TARGET_MATCH_FAILED } - def void init(List target, IDocument document) {} + def void init(List target, IDocument document, ICompilationUnit iCompUnit) {} def Status apply() diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend index d321ee7..6c8d427 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend @@ -1,23 +1,39 @@ package hu.elte.refjava.api.patterns import hu.elte.refjava.lang.refJava.PBlockExpression +import hu.elte.refjava.lang.refJava.PConstructorCall import hu.elte.refjava.lang.refJava.PExpression +import hu.elte.refjava.lang.refJava.PMemberFeatureCall import hu.elte.refjava.lang.refJava.PMetaVariable +import hu.elte.refjava.lang.refJava.PMethodDeclaration +import hu.elte.refjava.lang.refJava.PNameMetaVariable +import hu.elte.refjava.lang.refJava.PTargetExpression +import hu.elte.refjava.lang.refJava.PTypeMetaVariable import hu.elte.refjava.lang.refJava.Pattern +import java.lang.reflect.Type import java.util.List import java.util.Map +import java.util.Queue import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.Expression +import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword +import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jdt.core.dom.rewrite.ASTRewrite +import hu.elte.refjava.lang.refJava.PParameterMetaVariable class ASTBuilder { val Pattern pattern - AST ast ASTRewrite rewrite Map> bindings - + Map nameBindings + Map typeBindings + Map>> parameterBindings + Queue typeReferenceQueue + TypeDeclaration newInterface + new(Pattern pattern) { this.pattern = pattern } @@ -25,15 +41,29 @@ class ASTBuilder { def getRewrite() { rewrite } + + def getNewInterface() { + newInterface + } - def build(AST ast, Map> bindings) { + def build(AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { this.ast = ast this.rewrite = ASTRewrite.create(ast) this.bindings = bindings - + this.nameBindings = nameBindings + this.typeBindings = typeBindings + this.parameterBindings = parameterBindings + this.newInterface = ast.newTypeDeclaration + this.newInterface.interface = true + + val tmp = typeRefString.split("\\|") + this.typeReferenceQueue = newLinkedList + this.typeReferenceQueue.addAll(tmp) + return pattern.patterns.doBuildPatterns } + //meta variable builder def private dispatch doBuild(PMetaVariable metaVar) { val binding = bindings.get(metaVar.name) if (!binding.empty) { @@ -41,8 +71,153 @@ class ASTBuilder { rewrite.createGroupNode(copies) } } - - def private dispatch ASTNode doBuild(PBlockExpression blockPattern) { + + //target expression builder + def private dispatch doBuild(PTargetExpression targetExpr) { + val binding = bindings.get("target") + if (!binding.empty) { + val copies = binding.map[ASTNode.copySubtree(ast, it)] + rewrite.createGroupNode(copies) + } + } + + //constructor call builder + def private dispatch doBuild(PConstructorCall constCall) { + val class = ast.newClassInstanceCreation + + //adding constructor call name + if (constCall.metaName !== null) { + val name = (constCall.metaName as PNameMetaVariable).name + class.type = ast.newSimpleType(ast.newName(nameBindings.get(name) ) ) + newInterface.name.identifier = nameBindings.get(name) + } else { + class.type = ast.newSimpleType(ast.newName(constCall.name) ) + newInterface.name.identifier = constCall.name + } + + //adding constructor call anonymous class declaration (body) + if(constCall.anonInstance) { + val anonClass = ast.newAnonymousClassDeclaration + + val buildDeclarations = constCall.elements.doBuildPatterns + anonClass.bodyDeclarations.addAll(buildDeclarations) + + class.anonymousClassDeclaration = anonClass + } + return class + + } + + //method builder + def private dispatch ASTNode doBuild(PMethodDeclaration methodDecl) { + val method = ast.newMethodDeclaration + val newInterfaceMethod = ast.newMethodDeclaration + + //adding method name + if (methodDecl.prefix.metaName !== null) { + val name = (methodDecl.prefix.metaName as PNameMetaVariable).name + method.name.identifier = nameBindings.get(name) + } else { + method.name.identifier = methodDecl.prefix.name + } + + //adding method visibility + if(methodDecl.prefix.visibility !== null) { + switch methodDecl.prefix.visibility { + case PUBLIC: method.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: method.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: method.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + default: {} + } + } + + //adding method return type + if(methodDecl.prefix.type !== null) { + method.returnType2 = Utils.getTypeFromId(typeReferenceQueue.remove, ast) + } else { + val name = (methodDecl.prefix.metaType as PTypeMetaVariable).name + method.returnType2 = Utils.getTypeFromId(typeBindings.get(name).typeName, ast) + } + + //adding method parameters + if (methodDecl.arguments.size > 0) { + for(argument : methodDecl.arguments) { + val typeName = typeReferenceQueue.remove + + val methodParameterDeclaration = ast.newSingleVariableDeclaration + methodParameterDeclaration.type = Utils.getTypeFromId(typeName, ast) + methodParameterDeclaration.name.identifier = argument.name + method.parameters.add(methodParameterDeclaration) + + val interfaceMethodParameterDeclatration = ast.newSingleVariableDeclaration + interfaceMethodParameterDeclatration.type = Utils.getTypeFromId(typeName, ast) + interfaceMethodParameterDeclatration.name.identifier = argument.name + newInterfaceMethod.parameters.add(interfaceMethodParameterDeclatration) + } + } else if (methodDecl.metaArguments !== null) { + val parameterList = parameterBindings.get((methodDecl.metaArguments as PParameterMetaVariable).name) + for (parameter : parameterList) { + val methodParameterDeclaration = ast.newSingleVariableDeclaration + methodParameterDeclaration.type = Utils.getTypeFromId(parameter.key.toString, ast) + methodParameterDeclaration.name.identifier = parameter.value + method.parameters.add(methodParameterDeclaration) + + val interfaceMethodParameterDeclatration = ast.newSingleVariableDeclaration + interfaceMethodParameterDeclatration.type = Utils.getTypeFromId(parameter.key.toString, ast) + interfaceMethodParameterDeclatration.name.identifier = parameter.value + newInterfaceMethod.parameters.add(interfaceMethodParameterDeclatration) + } + } + + //adding method body + if(methodDecl.body !== null) { + val block = ast.newBlock + val buildMethodBody = (methodDecl.body as PBlockExpression).expressions.doBuildPatterns + block.statements.addAll(buildMethodBody) + method.body = block + } else { + val block = ast.newBlock + val buildMethodMetaBody = (methodDecl.metaBody as PMetaVariable).doBuild + block.statements.add(buildMethodMetaBody) + method.body = block + } + + newInterfaceMethod.name.identifier = method.name.identifier + newInterfaceMethod.returnType2 = Utils.getTypeFromId(method.returnType2.toString, ast) + newInterface.bodyDeclarations.add(newInterfaceMethod) + return method + } + + //method invocation builder + def private dispatch ASTNode doBuild(PMemberFeatureCall featureCall) { + val methodInv = ast.newMethodInvocation + + //adding method invocation name + if (featureCall.feature !== null) { + methodInv.name.identifier = featureCall.feature + } else { + val name = (featureCall.metaFeature as PNameMetaVariable).name + methodInv.name.identifier = nameBindings.get(name) + } + + //adding method invocation parameters + if(featureCall.memberCallArguments !== null) { + val parameterList = parameterBindings.get((featureCall.memberCallArguments as PParameterMetaVariable).name) + for (parameter : parameterList) { + methodInv.arguments.add(ast.newSimpleName(parameter.value)) + } + } + + //adding method invocation expression + val buildInvocationExpression = featureCall.memberCallTarget.doBuild + methodInv.expression = buildInvocationExpression as Expression + + val statement = ast.newExpressionStatement(methodInv) + return statement + } + + //block builder + def private dispatch doBuild(PBlockExpression blockPattern) { val block = ast.newBlock val builtStatements = blockPattern.expressions.doBuildPatterns @@ -50,9 +225,10 @@ class ASTBuilder { return block } - - def private doBuildPatterns(List patterns) { + + + def private List doBuildPatterns(List patterns) { patterns.map[doBuild].filterNull.toList } - + } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend index 845f6b2..53bd46d 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend @@ -1,19 +1,37 @@ package hu.elte.refjava.api.patterns import hu.elte.refjava.lang.refJava.PBlockExpression +import hu.elte.refjava.lang.refJava.PConstructorCall import hu.elte.refjava.lang.refJava.PExpression +import hu.elte.refjava.lang.refJava.PMemberFeatureCall import hu.elte.refjava.lang.refJava.PMetaVariable +import hu.elte.refjava.lang.refJava.PMethodDeclaration +import hu.elte.refjava.lang.refJava.PTargetExpression import hu.elte.refjava.lang.refJava.Pattern +import java.lang.reflect.Type +import java.util.ArrayList import java.util.List import java.util.Map +import java.util.Queue import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.Block +import org.eclipse.jdt.core.dom.ClassInstanceCreation +import org.eclipse.jdt.core.dom.ExpressionStatement +import org.eclipse.jdt.core.dom.MethodDeclaration +import org.eclipse.jdt.core.dom.MethodInvocation +import org.eclipse.jdt.core.dom.Modifier +import org.eclipse.xtext.EcoreUtil2 class PatternMatcher { - + + ArrayList modifiedTarget val Pattern pattern Map> bindings = newHashMap - + Map nameBindings + Map typeBindings + Map>> parameterBindings + Queue typeReferenceQueue + new(Pattern pattern) { this.pattern = pattern } @@ -21,47 +39,231 @@ class PatternMatcher { def getBindings() { bindings } + + def getModifiedTarget() { + modifiedTarget + } + + def match(Pattern targetPattern, List target) { + bindings.clear + return doMatchChildren(targetPattern.patterns, target) + } - def match(List target) { + //this function gets called during the matching + def match(List target, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { + this.nameBindings = nameBindings + this.typeBindings = typeBindings + this.parameterBindings = parameterBindings + val tmp = typeRefString.split("\\|") + this.typeReferenceQueue = newLinkedList + this.typeReferenceQueue.addAll(tmp) + + bindings.clear - return doMatchChildren(pattern.patterns, target) + modifiedTarget = newArrayList + modifiedTarget.addAll(target) + + val patterns = pattern.patterns + val isTargetExists = EcoreUtil2.getAllContentsOfType(pattern, PTargetExpression).size > 0 + if (!isTargetExists) { + doMatchChildren(patterns, target) + } else { + doMatchChildrenWithTarget(patterns, target) + } } + /////////////////////// + // doMatch overloads // + /////////////////////// def private dispatch doMatch(PMetaVariable metaVar, ASTNode anyNode) { bindings.put(metaVar.name, #[anyNode]) - return true + true } - + + def private dispatch doMatch(PMetaVariable multiMetavar, List nodes) { + bindings.put(multiMetavar.name, nodes) + true + } + def private dispatch boolean doMatch(PBlockExpression blockPattern, Block block) { doMatchChildren(blockPattern.expressions, block.statements) } - - def private dispatch doMatch(PExpression anyOtherPattern, ASTNode anyOtherNode) { - false + + //constructor call matching + def private dispatch boolean doMatch(PConstructorCall constCall, ClassInstanceCreation classInstance) { + + //matching constructor call name + var boolean nameCheck + if (constCall.metaName !== null) { + //TODO + nameCheck = true + } else { + nameCheck = constCall.name == classInstance.type.toString + } + + //matching constructor call's methods + var boolean anonClassCheck + if (classInstance.anonymousClassDeclaration !== null && constCall.elements !== null) { + if (constCall.elements.size != classInstance.anonymousClassDeclaration.bodyDeclarations.size) { + return false + } else { + /* + val pIt = constCall.elements.iterator + val nIt = classInstance.anonymousClassDeclaration.bodyDeclarations.iterator + while(pIt.hasNext) { + if (!doMatch(pIt.next, nIt.next)) { + return false + } + } + anonClassCheck = true + */ + anonClassCheck = doMatchChildren(constCall.elements, classInstance.anonymousClassDeclaration.bodyDeclarations) + } + } else { + //TODO + anonClassCheck = true + } + + return nameCheck && anonClassCheck } - - def private doMatchChildren(List patterns, List nodes) { - if (patterns.size == 1 && patterns.head instanceof PMetaVariable) { - val metaVar = patterns.head as PMetaVariable - if (metaVar.isMulti) { - bindings.put(metaVar.name, nodes) - return true + + //method matching + def private dispatch boolean doMatch(PMethodDeclaration pMethodDecl, MethodDeclaration methodDecl) { + + //matching method name + var boolean nameCheck + if(pMethodDecl.prefix.metaName !== null) { + //TODO + nameCheck = true + } else { + nameCheck = pMethodDecl.prefix.name == methodDecl.name.identifier + } + + //matching method visibility + var boolean visibilityCheck + if(pMethodDecl.prefix.visibility !== null) { + switch pMethodDecl.prefix.visibility { + case PUBLIC: visibilityCheck = Modifier.isPublic(methodDecl.getModifiers()) + case PRIVATE: visibilityCheck = Modifier.isPrivate(methodDecl.getModifiers()) + case PROTECTED: visibilityCheck = Modifier.isProtected(methodDecl.getModifiers()) + default: {} } } + + //matching method return value + var boolean returnCheck + if(pMethodDecl.prefix.metaType !== null) { + //TODO + returnCheck = true + } else { + returnCheck = methodDecl.returnType2.toString == typeReferenceQueue.remove + } + + //matching method body + val boolean bodyCheck = doMatch(pMethodDecl.body, methodDecl.body) + + return nameCheck && visibilityCheck && returnCheck && bodyCheck + } + + //method invocation matching + def private dispatch boolean doMatch(PMemberFeatureCall featureCall, ExpressionStatement expStatement) { + if (expStatement.expression instanceof MethodInvocation) { + val methodInv = expStatement.expression as MethodInvocation + + //matching method invocation name + var boolean nameCheck + if (featureCall.feature !== null) { + nameCheck = featureCall.feature == methodInv.name.identifier + } else { + //TODO + nameCheck = true + } + + //matching method invocation parameters + var boolean parameterCheck + if(featureCall.memberCallArguments !== null) { + //TODO + parameterCheck = true + } + + //matching method invocation expression + val boolean expressionCheck = doMatch(featureCall.memberCallTarget, methodInv.expression) - if (patterns.size != nodes.size) { + return nameCheck && parameterCheck && expressionCheck + } else { return false } + } - val pIt = patterns.iterator + def private dispatch doMatch(PExpression anyOtherPattern, ASTNode anyOtherNode) { + false + } + + /////////////////////// + // children matching // + /////////////////////// + def private doMatchChildren(List patterns, List nodes) { + if (!patterns.exists[it instanceof PMetaVariable && (it as PMetaVariable).multi] && nodes.size != patterns.size) { + return false + } + val nIt = nodes.iterator - while (pIt.hasNext) { - if (!doMatch(pIt.next, nIt.next)) { - return false + for (var int i = 0; i < patterns.size; i++) { + if( (patterns.get(i) instanceof PMetaVariable && !(patterns.get(i) as PMetaVariable).multi) || !(patterns.get(i) instanceof PMetaVariable) ) { + if (!doMatch(patterns.get(i), nIt.next)) { + return false + } + } else { + val preMultiMetavar = patterns.take(i).size + val postMultiMetavar = patterns.drop(i + 1).size + var List matchingNodes = newArrayList + var int j = 0 + + while (j != nodes.size - (preMultiMetavar + postMultiMetavar) ) { + matchingNodes.add(nIt.next) + j++ + } + + if(!doMatch(patterns.get(i), matchingNodes)) { + return false + } } } - - return true + true + } + + + def private doMatchChildrenWithTarget(List patterns, List selectedNodes) { + var List preTargetExpression = patterns.clone.takeWhile[ !(it instanceof PTargetExpression) ].toList.reverse + var List postTargetExpression = patterns.clone.reverse.takeWhile[ !(it instanceof PTargetExpression) ].toList.reverse + + val List targetEnvironment = newArrayList + targetEnvironment.addAll( (selectedNodes.head.parent as Block).statements ) + + var List preSelectedNodes = (targetEnvironment as List).clone.takeWhile[ it != selectedNodes.head ].toList.reverse + var List postSelectedNodes = (targetEnvironment as List).clone.reverse.takeWhile[ it != selectedNodes.last ].toList.reverse + + var Boolean pre + var Boolean post + + if (!preTargetExpression.exists[ it instanceof PMetaVariable && (it as PMetaVariable).isMulti] ) { + val preSelectedNodesToMatch = preSelectedNodes.clone.take(preTargetExpression.size).toList + pre = doMatchChildren(preTargetExpression, preSelectedNodesToMatch) + modifiedTarget.addAll(0, preSelectedNodesToMatch) + } else { + pre = doMatchChildren(preTargetExpression, preSelectedNodes) + modifiedTarget.addAll(0, preSelectedNodes) + } + + if (!postTargetExpression.exists[ it instanceof PMetaVariable && (it as PMetaVariable).isMulti] ) { + val postSelectedNodesToMatch = postSelectedNodes.clone.take(postTargetExpression.size).toList + post = doMatchChildren(postTargetExpression, postSelectedNodesToMatch) + modifiedTarget.addAll(postSelectedNodesToMatch) + } else { + post = doMatchChildren(postTargetExpression, postSelectedNodes) + modifiedTarget.addAll(postSelectedNodes) + } + bindings.put("target", selectedNodes) + return pre && post } - } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend index c77d89b..08787d5 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend @@ -10,20 +10,53 @@ import org.eclipse.xtext.resource.XtextResource import org.eclipse.xtext.resource.XtextResourceSet class PatternParser { + @Inject static XtextResourceSet resourceSet + static Resource resource + static boolean initialized = false + def static parse(String patternString) { + if (!initialized) { + resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE) + resource = resourceSet.createResource(URI.createURI("dummy:/patterns.refjava")) + initialized = true + } + + if (resource.loaded) { + resource.unload + } + + val paddedPatternString = '''package p; local refactoring l() «patternString» ~ nothing''' + val inputStream = new ByteArrayInputStream(paddedPatternString.bytes) + resource.load(inputStream, resourceSet.loadOptions) + + val file = resource.contents.head as File + val refact = file.refactorings.head as SchemeInstanceRule + + return refact.matchingPattern + } +} + +/* + +class PatternParser { @Inject static XtextResourceSet resourceSet static Resource resource static boolean initialized = false def static parse(String patternString) { if (!initialized) { + resourceSet = (new RefJavaStandaloneSetup().createInjectorAndDoEMFRegistration()).getInstance(typeof(XtextResourceSet)) resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE) resource = resourceSet.createResource(URI.createURI("dummy:/patterns.refjava")) initialized = true + println("ASDASD22") } if (resource.loaded) { resource.unload + resource.delete(newHashMap) + + println("loaded") } val paddedPatternString = '''package p; local refactoring l() «patternString» ~ nothing''' @@ -32,8 +65,14 @@ class PatternParser { val file = resource.contents.head as File val refact = file.refactorings.head as SchemeInstanceRule + + println(refact.matchingPattern) + //resource.delete(newHashMap) return refact.matchingPattern } - } + +*/ + + diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend new file mode 100644 index 0000000..bde1eb1 --- /dev/null +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend @@ -0,0 +1,43 @@ +package hu.elte.refjava.api.patterns + +import org.eclipse.jdt.core.dom.PrimitiveType +import org.eclipse.jdt.core.dom.AST + +class Utils { + + def static getTypeFromId(String id, AST ast) { + + val primitiveTypes = newArrayList("byte", "short", "char", "int", "long", "float", "double", "boolean", "void") + + if(primitiveTypes.contains(id)) { + //primitive type + return ast.newPrimitiveType(PrimitiveType.toCode(id)) + } else if (id.contains("[") && id.contains("]")) { + //array type + val char openingSymbol = '[' + val char closingSymbol = ']' + var String type = "" + var int dimension = 0 + for(var int i = 0; i < id.length; i++) { + if( id.charAt(i).identityEquals(openingSymbol) ) { + dimension++ + } else if ( !id.charAt(i).identityEquals(openingSymbol) && !id.charAt(i).identityEquals(closingSymbol)) { + type += id.charAt(i) + } + } + if(primitiveTypes.contains(type)) { + //primitive array type + return ast.newArrayType(ast.newPrimitiveType(PrimitiveType.toCode(type)), dimension) + } else { + //simple array type + val simpleName = type.split("\\.") + return ast.newArrayType(ast.newSimpleType(ast.newSimpleName(simpleName.last)), dimension) + } + } else { + //simple type + val simpleName = id.split("\\.") + return ast.newSimpleType(ast.newSimpleName(simpleName.last)) + } + } + +} \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext index 190266a..7bd7bf8 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext @@ -31,9 +31,22 @@ SchemeInstanceRule: ('in' definitionLocation=InDefinitionLocation)? definitionPattern=Pattern)? ('when' - precondition=XExpression)? + ('assignment' + assignment=AssignmentList)? + ('precondition' + precondition=XExpression)? + )? +; + +AssignmentList: + assignment+=Assignment =>(';' assignment+=Assignment)* ';'? +; + +Assignment: + {Assignment} name=(PNameMetaVariable | PTypeMetaVariable | PParameterMetaVariable) '=' value=XExpression ; + enum SchemeType: LOCAL='local' | BLOCK='block' | LAMBDA='lambda' | CLASS='class' ; @@ -59,6 +72,18 @@ PMetaVariable returns PExpression: {PMetaVariable} '#' name=ID multi?='..'? ; +PTypeMetaVariable returns PExpression: + {PTypeMetaVariable} 'type#' name=ID +; + +PNameMetaVariable returns PExpression: + {PNameMetaVariable} 'name#' name=ID +; + +PParameterMetaVariable returns PExpression: + {PParameterMetaVariable} 'parameter#' name=ID multi?='..'? +; + Pattern: patterns+=PExpressionOrVarDeclaration =>(';' patterns+=PExpressionOrVarDeclaration)* ';'? // =>: local, distinguishes semicolons @@ -72,7 +97,7 @@ PExpressionOrVarDeclaration returns PExpression: PDeclaration returns PExpression: PVariableDeclaration ( {PMethodDeclaration.prefix=current} '(' ( - arguments+=FullJvmFormalParameter (',' arguments+=FullJvmFormalParameter)* | metaArguments=PMetaVariable + arguments+=FullJvmFormalParameter (',' arguments+=FullJvmFormalParameter)* | metaArguments=PParameterMetaVariable )? ')' (body=PBlockExpression | metaBody=PMetaVariable) )? ; @@ -80,8 +105,8 @@ PDeclaration returns PExpression: PVariableDeclaration returns PVariableDeclaration: =>({PVariableDeclaration} ( // =>: global, see PExpressionOrVarDeclaration->...->PFeatureCall (visibility=Visibility | metaVisibility=PMetaVariable)? // for methods - (type=JvmTypeReference | metaType=PMetaVariable) - (name=ValidID | metaName=PMetaVariable) + (type=JvmTypeReference | metaType=PTypeMetaVariable) + (name=ValidID | metaName=PNameMetaVariable) )) ('=' right=PExpression)? ; @@ -96,8 +121,8 @@ PExpression returns PExpression: PMemberFeatureCall returns PExpression: PPrimaryExpression ( =>({PMemberFeatureCall.memberCallTarget=current} ".") - (feature=IdOrSuper | metaFeature=PMetaVariable) ( - =>'(' (memberCallArguments+=PExpression (',' memberCallArguments+=PExpression)*)? ')' + (feature=IdOrSuper | metaFeature=PNameMetaVariable) ( + =>'(' memberCallArguments=PParameterMetaVariable? ')' )? )* ; @@ -110,11 +135,14 @@ PPrimaryExpression returns PExpression | PTargetExpression | PNothingExpression | PMetaVariable + | PTypeMetaVariable + | PNameMetaVariable + | PParameterMetaVariable // no explicit metavariables here to preserve structure ; PConstructorCall returns PExpression: - {PConstructorCall} 'new' constructor=[types::JvmConstructor|QualifiedName] + {PConstructorCall} 'new' (name=ValidID | metaName=PNameMetaVariable) //constructor=[types::JvmConstructor|QualifiedName] =>'(' (arguments+=PExpression (',' arguments+=PExpression)*)? ')' ( anonInstance?='{' (elements+=PDeclaration =>(';' elements+=PDeclaration)* ';'?)? '}' // =>: local, distinguishes semicolons @@ -174,12 +202,32 @@ XPrimaryExpression returns xbase::XExpression | XTryCatchFinallyExpression | XParenthesizedExpression | MetaVariable + | TargetExpression + | TypeMetaVariable + | NameMetaVariable + | ParameterMetaVariable ; MetaVariable returns xbase::XExpression: {MetaVariable} '#' name=ID multi?='..'? ; +TypeMetaVariable returns xbase::XExpression: + {TypeMetaVariable} 'type#' name=ID +; + +NameMetaVariable returns xbase::XExpression: + {NameMetaVariable} 'name#' name=ID +; + +ParameterMetaVariable returns xbase::XExpression: + {ParameterMetaVariable} 'parameter#' name=ID multi?='..'? +; + +TargetExpression returns xbase::XExpression: + {TargetExpression} 'target' +; + @Override XSetLiteral returns xbase::XSetLiteral: {xbase::XSetLiteral} '@' '{' (elements+=XExpression (',' elements+=XExpression )*)? '}' diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend index 768ce37..875eb86 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend @@ -1,6 +1,10 @@ package hu.elte.refjava.lang.compiler import hu.elte.refjava.lang.refJava.MetaVariable +import hu.elte.refjava.lang.refJava.NameMetaVariable +import hu.elte.refjava.lang.refJava.ParameterMetaVariable +import hu.elte.refjava.lang.refJava.TargetExpression +import hu.elte.refjava.lang.refJava.TypeMetaVariable import org.eclipse.xtext.xbase.XExpression import org.eclipse.xtext.xbase.compiler.XbaseCompiler import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable @@ -11,6 +15,14 @@ class RefJavaCompiler extends XbaseCompiler { switch expression { MetaVariable: expression.toJavaStatement(builder) + TargetExpression: + expression.toJavaStatement(builder) + NameMetaVariable: + expression.toJavaStatement(builder) + TypeMetaVariable: + expression.toJavaStatement(builder) + ParameterMetaVariable: + expression.toJavaStatement(builder) default: super.doInternalToJavaStatement(expression, builder, isReferenced) } @@ -19,11 +31,35 @@ class RefJavaCompiler extends XbaseCompiler { def void toJavaStatement(MetaVariable metaVar, ITreeAppendable it) { // do nothing, a metavariable is strictly an expression } + + def void toJavaStatement(NameMetaVariable metaVar, ITreeAppendable it) { + // do nothing, a metavariable is strictly an expression + } + + def void toJavaStatement(TypeMetaVariable metaVar, ITreeAppendable it) { + // do nothing, a metavariable is strictly an expression + } + + def void toJavaStatement(ParameterMetaVariable metaVar, ITreeAppendable it) { + // do nothing, a metavariable is strictly an expression + } + + def void toJavaStatement(TargetExpression targetExpr, ITreeAppendable it) { + // do nothing, a metavariable is strictly an expression + } override protected internalToConvertedExpression(XExpression expression, ITreeAppendable builder) { switch expression { MetaVariable: expression.toJavaExpression(builder) + TargetExpression: + expression.toJavaExpression(builder) + NameMetaVariable: + expression.toJavaExpression(builder) + TypeMetaVariable: + expression.toJavaExpression(builder) + ParameterMetaVariable: + expression.toJavaExpression(builder) default: super.internalToConvertedExpression(expression, builder) } @@ -34,6 +70,21 @@ class RefJavaCompiler extends XbaseCompiler { if (!metaVar.multi) { append(".get(0)") } + } + + def dispatch void toJavaExpression(NameMetaVariable metaVar, ITreeAppendable it) { + append('''nameBindings.get("«metaVar.name»")''') + } + + def dispatch void toJavaExpression(TypeMetaVariable metaVar, ITreeAppendable it) { + append('''typeBindings.get("«metaVar.name»")''') + } + + def dispatch void toJavaExpression(ParameterMetaVariable metaVar, ITreeAppendable it) { + append('''parameterBindings.get("«metaVar.name»")''') + } + + def dispatch void toJavaExpression(TargetExpression targetExpr, ITreeAppendable it) { + append('''bindings.get("target")''') } - } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend index 4aec72c..db17162 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend @@ -1,30 +1,107 @@ package hu.elte.refjava.lang.jvmmodel import com.google.inject.Inject +import hu.elte.refjava.api.BlockRefactoring +import hu.elte.refjava.api.ClassRefactoring +import hu.elte.refjava.api.LambdaRefactoring import hu.elte.refjava.api.LocalRefactoring +import hu.elte.refjava.lang.refJava.PMethodDeclaration +import hu.elte.refjava.lang.refJava.PNameMetaVariable +import hu.elte.refjava.lang.refJava.PParameterMetaVariable +import hu.elte.refjava.lang.refJava.PTypeMetaVariable import hu.elte.refjava.lang.refJava.SchemeInstanceRule import hu.elte.refjava.lang.refJava.SchemeType +import java.lang.reflect.Type +import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.common.types.JvmVisibility import org.eclipse.xtext.naming.IQualifiedNameProvider import org.eclipse.xtext.serializer.ISerializer import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder +import java.util.List class RefJavaJvmModelInferrer extends AbstractModelInferrer { @Inject extension IQualifiedNameProvider @Inject extension ISerializer @Inject extension JvmTypesBuilder + def dispatch infer(SchemeInstanceRule rule, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) { acceptor.accept(rule.toClass(rule.fullyQualifiedName)) [ superTypes += rule.type.toSuperType.typeRef - + + + //type parsing doesn't work.. + var String typeReferenceString = "" + val methodDeclarations = EcoreUtil2.getAllContentsOfType(rule.replacementPattern, PMethodDeclaration) + for(method : methodDeclarations) { + if(method.prefix.type !== null) { + typeReferenceString = typeReferenceString + method.prefix.type.identifier + "|" + } + for (args : method.arguments) { + if(args.parameterType.type !== null) { + typeReferenceString = typeReferenceString + args.parameterType.identifier + "|" + } + } + } + members += rule.toConstructor [ body = '''super("«rule.matchingPattern.serialize.trim»", "«rule.replacementPattern.serialize.trim»");''' ] - + + val endl = System.getProperty("line.separator"); + var String callings = "" + if(rule.assignment !== null) { + for (assignment : rule.assignment.assignment) { + if (assignment.name instanceof PNameMetaVariable) { + val name = (assignment.name as PNameMetaVariable).name + members += rule.toMethod("valueof_name_" + name, typeof(String).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = assignment.value + ] + callings = callings + "set_name_" + name + "();" + endl + members += rule.toMethod("set_name_" + name, typeof(void).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = '''nameBindings.put("«name»", valueof_name_«name»());''' + ] + } else if (assignment.name instanceof PTypeMetaVariable) { + val name = (assignment.name as PTypeMetaVariable).name + members += rule.toMethod("valueof_type_" + name, typeof(Type).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = assignment.value + ] + callings = callings + "set_type_" + name + "();" + endl + members += rule.toMethod("set_type_" + name, typeof(void).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = '''typeBindings.put("«name»", valueof_type_«name»());''' + ] + } else if (assignment.name instanceof PParameterMetaVariable) { + val name = (assignment.name as PParameterMetaVariable).name + members += rule.toMethod("valueof_parameter_" + name, typeof(List).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = assignment.value + ] + callings = callings + "set_parameter_" + name + "();" + endl + members += rule.toMethod("set_parameter_" + name, typeof(void).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = '''parameterBindings.put("«name»", valueof_parameter_«name»());''' + ] + } + } + } + + val finalTypesReferenceString = typeReferenceString + val finalCallings = callings + endl + if (finalTypesReferenceString.length > 0) { + members += rule.toMethod("setMetaVariables", typeof(void).typeRef) [ + annotations += annotationRef(Override) + visibility = JvmVisibility.PROTECTED + body = '''«finalCallings»super.typeReferenceString = "«finalTypesReferenceString»";''' + ] + } + if (rule.precondition !== null) { members += rule.toMethod("instanceCheck", Boolean.TYPE.typeRef) [ visibility = JvmVisibility.PRIVATE @@ -37,11 +114,24 @@ class RefJavaJvmModelInferrer extends AbstractModelInferrer { body = '''return super.check() && instanceCheck();''' ] } + + if (rule.targetPattern !== null) { + members += rule.toMethod("safeTargetCheck", Boolean.TYPE.typeRef) [ + annotations += annotationRef(Override) + visibility = JvmVisibility.PROTECTED + body = '''return super.targetCheck("«rule.targetPattern.serialize.trim»");''' + ] + } ] } def private toSuperType(SchemeType it) { - LocalRefactoring + switch it { + case LOCAL : return LocalRefactoring + case BLOCK : return BlockRefactoring + case LAMBDA : return LambdaRefactoring + case CLASS : return ClassRefactoring + } } } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/scoping/RefJavaImplicitlyImportedFeatures.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/scoping/RefJavaImplicitlyImportedFeatures.xtend index f1e1572..a3a38d8 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/scoping/RefJavaImplicitlyImportedFeatures.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/scoping/RefJavaImplicitlyImportedFeatures.xtend @@ -8,5 +8,4 @@ class RefJavaImplicitlyImportedFeatures extends ImplicitlyImportedFeatures { override protected getStaticImportClasses() { (super.getStaticImportClasses() + #[Check]).toList } - } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend index ac90341..4714e8b 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend @@ -1,6 +1,11 @@ package hu.elte.refjava.lang.typesystem import hu.elte.refjava.lang.refJava.MetaVariable +import hu.elte.refjava.lang.refJava.NameMetaVariable +import hu.elte.refjava.lang.refJava.ParameterMetaVariable +import hu.elte.refjava.lang.refJava.TargetExpression +import hu.elte.refjava.lang.refJava.TypeMetaVariable +import java.lang.reflect.Type import java.util.List import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.xtext.xbase.typesystem.computation.ITypeComputationState @@ -22,5 +27,38 @@ class RefJavaTypeComputer extends XbaseTypeComputer { state.acceptActualType(type) } + + def dispatch computeTypes(NameMetaVariable metaVar, ITypeComputationState state) { + val stringType = getTypeForName(String, state) + state.acceptActualType(stringType) + } + + def dispatch computeTypes(TypeMetaVariable metaVar, ITypeComputationState state) { + val typeType = getTypeForName(Type, state) + state.acceptActualType(typeType) + } + + def dispatch computeTypes(ParameterMetaVariable metaVar, ITypeComputationState state) { + val pairType = getTypeForName(Pair, state) as ParameterizedTypeReference + val typeType = getTypeForName(Type, state) + val stringType = getTypeForName(String, state) + pairType.addTypeArgument(typeType) + pairType.addTypeArgument(stringType) + + val type = if(!metaVar.multi) { + pairType + } else { + val listType = getTypeForName(List, state) as ParameterizedTypeReference + listType.addTypeArgument(pairType) + listType + } + state.acceptActualType(type) + } + def dispatch computeTypes(TargetExpression targetExpr, ITypeComputationState state) { + val astNodeType = getTypeForName(ASTNode, state) + state.acceptActualType(astNodeType) + } + + } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend index e55f28a..2f7c06a 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend @@ -1,7 +1,10 @@ package hu.elte.refjava.lang.validation import hu.elte.refjava.lang.refJava.MetaVariable +import hu.elte.refjava.lang.refJava.PExpression import hu.elte.refjava.lang.refJava.PMetaVariable +import hu.elte.refjava.lang.refJava.PBlockExpression +import hu.elte.refjava.lang.refJava.PTargetExpression import hu.elte.refjava.lang.refJava.RefJavaPackage import hu.elte.refjava.lang.refJava.SchemeInstanceRule import org.eclipse.emf.ecore.EAttribute @@ -11,6 +14,7 @@ import org.eclipse.xtext.validation.Check import static hu.elte.refjava.lang.refJava.RefJavaPackage.Literals.* + class RefJavaValidator extends AbstractRefJavaValidator { @Check @@ -44,5 +48,39 @@ class RefJavaValidator extends AbstractRefJavaValidator { metaVarChecker.apply(it, name, multi, META_VARIABLE__NAME, META_VARIABLE__MULTI) ] } + + @Check + def multiMetavariableCountValidation(SchemeInstanceRule schemeInstanceRule) { + val patterns = schemeInstanceRule.matchingPattern.patterns + val targetExpressions = EcoreUtil2.getAllContentsOfType(schemeInstanceRule.matchingPattern, PTargetExpression) + if(targetExpressions.size != 0) { + + if (targetExpressions.size > 1) { + targetExpressions.forEach[error("Two or more target expression within the same matching pattern doesn't make sense.", it, RefJavaPackage.Literals.PTARGET_EXPRESSION.getEStructuralFeature(0) )] + } + val preTargetExpressions = patterns.clone.takeWhile[ !(it instanceof PTargetExpression)] + val postTargetExpressions = patterns.clone.reverse.takeWhile[ !(it instanceof PTargetExpression)] + + multiMetavarCountChecker(preTargetExpressions) + multiMetavarCountChecker(postTargetExpressions) + + } else { + multiMetavarCountChecker(patterns) + } + } + + def void multiMetavarCountChecker(Iterable expressions) { + val multiMetavars = expressions.filter[it instanceof PMetaVariable && (it as PMetaVariable).multi] + val blocks = expressions.filter[it instanceof PBlockExpression] + + if (multiMetavars.size > 1) { + multiMetavars.forEach[error("Two or more metavariable with multiplicity in the same scope doesn't make sense. +If the matching pattern has a target expression, then there cannot be two or more +metavariable with multiplicity before, and after the target expression.", it, RefJavaPackage.Literals.PMETA_VARIABLE__MULTI)] + } + + blocks.forEach[multiMetavarCountChecker( (it as PBlockExpression).expressions )] + + } } From 48fecbc541d594e010f9bacb1e01b4ec1a182f7b Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Mon, 30 Mar 2020 11:40:53 +0200 Subject: [PATCH 02/14] class reafactoring without check & started checking --- .../elte/refjava/api/BlockRefactoring.xtend | 14 +- .../src/hu/elte/refjava/api/Check.xtend | 7 +- .../elte/refjava/api/ClassRefactoring.xtend | 239 +++++++++++++++++- .../elte/refjava/api/LambdaRefactoring.xtend | 15 +- .../elte/refjava/api/LocalRefactoring.xtend | 9 +- .../refjava/api/patterns/ASTBuilder.xtend | 107 ++++++-- .../refjava/api/patterns/PatternMatcher.xtend | 76 ++++-- .../hu/elte/refjava/api/patterns/Utils.xtend | 23 +- .../src/hu/elte/refjava/lang/RefJava.xtext | 6 +- .../jvmmodel/RefJavaJvmModelInferrer.xtend | 55 ++-- 10 files changed, 476 insertions(+), 75 deletions(-) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend index 319dbc1..d9e4a84 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend @@ -21,7 +21,10 @@ class BlockRefactoring implements Refactoring { protected val Map nameBindings = newHashMap protected val Map typeBindings = newHashMap protected val Map>> parameterBindings = newHashMap - protected String typeReferenceString + protected String matchingTypeReferenceString + protected String replacementTypeReferenceString + protected String targetTypeReferenceString + protected String definitionTypeReferenceString List replacement protected new(String matchingPatternString, String replacementPatternString) { @@ -56,7 +59,7 @@ class BlockRefactoring implements Refactoring { def private safeMatch() { setMetaVariables() - if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, typeReferenceString) ) { + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString) ) { return false } @@ -75,8 +78,7 @@ class BlockRefactoring implements Refactoring { } def protected targetCheck(String targetPatternString) { - - return matcher.match(PatternParser.parse(targetPatternString), target) + return matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString) } def private safeCheck() { @@ -93,7 +95,7 @@ class BlockRefactoring implements Refactoring { def private safeBuild() { try { - replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, typeReferenceString) + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) } catch (Exception e) { System.out.println(e) return false @@ -118,6 +120,4 @@ class BlockRefactoring implements Refactoring { return true } - - } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend index 2954efb..3205311 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend @@ -12,7 +12,7 @@ import java.lang.reflect.Type class Check { - + //for testing def static getTypeOf(Type type) { return type } @@ -88,7 +88,6 @@ class Check { return true } } - accept(visitor) return visitor.found ] @@ -99,6 +98,10 @@ class Check { varDeclList.forall[!isReferencedIn(nodes)] } + //class refact + def static references(ASTNode node) { + + } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend index 9116036..f4becea 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend @@ -1,9 +1,246 @@ package hu.elte.refjava.api +import hu.elte.refjava.api.patterns.ASTBuilder +import hu.elte.refjava.api.patterns.PatternMatcher +import hu.elte.refjava.api.patterns.PatternParser +import java.lang.reflect.Type +import java.util.List +import java.util.Map +import java.util.Queue +import org.eclipse.jdt.core.ICompilationUnit +import org.eclipse.jdt.core.dom.AST +import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.ASTParser +import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.dom.FieldDeclaration +import org.eclipse.jdt.core.dom.MethodDeclaration +import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jdt.core.dom.VariableDeclarationFragment +import org.eclipse.jface.text.IDocument +import hu.elte.refjava.api.patterns.Utils +import java.lang.reflect.Modifier + class ClassRefactoring implements Refactoring { + List target + IDocument document + ICompilationUnit iCompUnit + + val PatternMatcher matcher + val ASTBuilder builder + val String matchingString + val String replacementString + protected String definitionString + protected val Map> bindings = newHashMap + protected val Map nameBindings = newHashMap + protected val Map typeBindings = newHashMap + protected val Map>> parameterBindings = newHashMap + protected String matchingTypeReferenceString + protected String replacementTypeReferenceString + protected String targetTypeReferenceString + protected String definitionTypeReferenceString + List replacement + + protected new(String matchingPatternString, String replacementPatternString) { + matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) + builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) + this.matchingString = matchingPatternString + this.replacementString = replacementPatternString + } + + override init(List target, IDocument document, ICompilationUnit iCompUnit) { + this.target = target + this.document = document + this.iCompUnit = iCompUnit + } + + def setTarget(List newTarget) { + this.target = newTarget + } + override apply() { - + return if(!safeTargetCheck) { + Status.TARGET_MATCH_FAILED + } else if (!safeMatch) { + Status.MATCH_FAILED + } else if (!safeCheck) { + Status.CHECK_FAILED + } else if (!safeBuild) { + Status.BUILD_FAILED + } else if (!safeReplace) { + Status.REPLACEMENT_FAILED + } else { + Status.SUCCESS + } + } + + def private safeMatch() { + try { + setMetaVariables() + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { + return false + } + target = matcher.modifiedTarget.toList + bindings.putAll(matcher.bindings) + + return true + } catch (Exception e) { + println(e) + return false + } + } + + def protected void setMetaVariables() { + //empty + } + + def protected safeTargetCheck() { + return true } + def protected targetCheck(String targetPatternString) { + return matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString) + } + + def private safeCheck() { + try { + return check() + } catch (Exception e) { + println(e) + return false + } + } + + def protected check() { + + val ASTParser parser = ASTParser.newParser(AST.JLS12); + parser.setSource(iCompUnit); + val CompilationUnit compUnit = parser.createAST(null) as CompilationUnit; + + if (replacementString == "-" && definitionString == "target") { + definitionString = matchingString + definitionTypeReferenceString = matchingTypeReferenceString + } + + val targetTypeDeclaration = Utils.getTypeDeclaration(target.head) + val definitionPattern = PatternParser.parse(definitionString) + val definitionToCheck = builder.build(definitionPattern, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head + + if(replacementString != "-") { + println("lambda to method check") + } else { + val superClass = compUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.superclassType.toString] as TypeDeclaration + val targetClass = compUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.name.identifier ] as TypeDeclaration + if(target.head instanceof MethodDeclaration) { + println("method lift check") + + return targetTypeDeclaration.superclassType !== null + + + } else if (target.head instanceof FieldDeclaration) { + println("field lift check") + val field = definitionToCheck as FieldDeclaration + + + println("1 " + (targetTypeDeclaration.superclassType !== null)) + println("2 ") + println("3 " + !superClass.bodyDeclarations.exists[(it instanceof FieldDeclaration) && + ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == (field.fragments.head as VariableDeclarationFragment).name.identifier + ]) + println("4 ") + println("5 ") + + + return targetTypeDeclaration.superclassType !== null && + if (Modifier.isPrivate(field.getModifiers())) { + //TODO + + + + return false + } else { + true + } + && !superClass.bodyDeclarations.exists[(it instanceof FieldDeclaration) && + ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == (field.fragments.head as VariableDeclarationFragment).name.identifier + ] + } + } + + + + return false + } + + def private safeBuild() { + try { + if(replacementString != "-") { + val replacementPattern = PatternParser.parse(replacementString) + replacement = builder.build(replacementPattern, target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + } + } catch (Exception e) { + println(e) + return false + } + return true + } + + def private safeReplace() { + try { + + //we only need to replace if we creating a new method + if (replacement !== null) { + val rewrite = builder.rewrite + target.tail.forEach[rewrite.remove(it, null)] + + val group = rewrite.createGroupNode( replacement ) + rewrite.replace( target.head, group, null) + var edits = rewrite.rewriteAST(document, null) + edits.apply(document) + } + + //we create the type references for the definition + var Queue definitionTypeReferenceQueue = newLinkedList + if(definitionTypeReferenceString !== null) { + val tmp = definitionTypeReferenceString.split("\\|") + definitionTypeReferenceQueue.addAll(tmp) + } + + val ASTParser parser = ASTParser.newParser(AST.JLS12); + parser.setSource(iCompUnit); + val CompilationUnit compUnit = parser.createAST(null) as CompilationUnit; + compUnit.recordModifications + + val definitionPattern = PatternParser.parse(definitionString) + val objectToInsertOrMove = builder.build(definitionPattern, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head + + val targetTypeDeclaration = Utils.getTypeDeclaration(target.head) + val targetClass = compUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.name.identifier ] as TypeDeclaration + + if(replacement !== null) { + targetClass.bodyDeclarations.add(objectToInsertOrMove) + } else { + val superClassType = targetTypeDeclaration.superclassType + val superClass = compUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + + var Object methodOrFieldToDelete + if(target.head instanceof MethodDeclaration){ + methodOrFieldToDelete = targetClass.bodyDeclarations.findFirst[ it instanceof MethodDeclaration && (it as MethodDeclaration).name.identifier == (target.head as MethodDeclaration).name.identifier ] + } else if (target.head instanceof FieldDeclaration) { + methodOrFieldToDelete = targetClass.bodyDeclarations.findFirst[ it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == ((target.head as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier ] + } + superClass.bodyDeclarations.add(objectToInsertOrMove) + targetClass.bodyDeclarations.remove(methodOrFieldToDelete) + } + val edits2 = compUnit.rewrite(document, iCompUnit.javaProject.getOptions(true)) + edits2.apply(document) + val String newSource = document.get; + iCompUnit.getBuffer().setContents(newSource); + + } catch (Exception e) { + println(e) + return false + } + return true + } } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend index e28e334..d7a906a 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend @@ -25,11 +25,15 @@ class LambdaRefactoring implements Refactoring { val PatternMatcher matcher val ASTBuilder builder + protected String definitionString protected val Map> bindings = newHashMap protected val Map nameBindings = newHashMap protected val Map typeBindings = newHashMap protected val Map>> parameterBindings = newHashMap - protected String typeReferenceString + protected String matchingTypeReferenceString + protected String replacementTypeReferenceString + protected String targetTypeReferenceString + protected String definitionTypeReferenceString List replacement protected new(String matchingPatternString, String replacementPatternString) { @@ -66,7 +70,7 @@ class LambdaRefactoring implements Refactoring { def private safeMatch() { try { setMetaVariables() - if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, typeReferenceString)) { + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { return false } target = matcher.modifiedTarget.toList @@ -88,7 +92,7 @@ class LambdaRefactoring implements Refactoring { } def protected targetCheck(String targetPatternString) { - return matcher.match(PatternParser.parse(targetPatternString), target) + return matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString) } def private safeCheck() { @@ -101,12 +105,13 @@ class LambdaRefactoring implements Refactoring { } def protected check() { - Check.isInsideBlock(target) + //Check.isInsideBlock(target) + return true } def private safeBuild() { try { - replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, typeReferenceString) + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) } catch (Exception e) { println(e) return false diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend index 1d53e24..11d6acd 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend @@ -21,7 +21,10 @@ class LocalRefactoring implements Refactoring { protected val Map nameBindings = newHashMap protected val Map typeBindings = newHashMap protected val Map>> parameterBindings = newHashMap - protected String typeReferenceString + protected String matchingTypeReferenceString + protected String replacementTypeReferenceString + protected String targetTypeReferenceString + protected String definitionTypeReferenceString List replacement protected new(String matchingPatternString, String replacementPatternString) { @@ -50,7 +53,7 @@ class LocalRefactoring implements Refactoring { def private safeMatch() { setMetaVariables() - if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, typeReferenceString)) { + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { return false } @@ -76,7 +79,7 @@ class LocalRefactoring implements Refactoring { def private safeBuild() { try { - replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, typeReferenceString) + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) } catch (Exception e) { return false } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend index 6c8d427..afd41fd 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend @@ -21,10 +21,12 @@ import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jdt.core.dom.rewrite.ASTRewrite import hu.elte.refjava.lang.refJava.PParameterMetaVariable +import hu.elte.refjava.lang.refJava.PFeatureCall +import hu.elte.refjava.lang.refJava.PVariableDeclaration class ASTBuilder { - val Pattern pattern + Pattern pattern AST ast ASTRewrite rewrite Map> bindings @@ -45,6 +47,11 @@ class ASTBuilder { def getNewInterface() { newInterface } + + def build(Pattern pattern, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { + this.pattern = pattern + build(ast, bindings, nameBindings, typeBindings, parameterBindings, typeRefString) + } def build(AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { this.ast = ast @@ -56,11 +63,18 @@ class ASTBuilder { this.newInterface = ast.newTypeDeclaration this.newInterface.interface = true - val tmp = typeRefString.split("\\|") - this.typeReferenceQueue = newLinkedList - this.typeReferenceQueue.addAll(tmp) + if(typeRefString !== null) { + val tmp = typeRefString.split("\\|") + this.typeReferenceQueue = newLinkedList + this.typeReferenceQueue.addAll(tmp) + } + + if(pattern.empty) { + return null + } else { + return pattern.patterns.doBuildPatterns + } - return pattern.patterns.doBuildPatterns } //meta variable builder @@ -113,6 +127,7 @@ class ASTBuilder { val method = ast.newMethodDeclaration val newInterfaceMethod = ast.newMethodDeclaration + //adding method name if (methodDecl.prefix.metaName !== null) { val name = (methodDecl.prefix.metaName as PNameMetaVariable).name @@ -130,7 +145,7 @@ class ASTBuilder { default: {} } } - + //adding method return type if(methodDecl.prefix.type !== null) { method.returnType2 = Utils.getTypeFromId(typeReferenceQueue.remove, ast) @@ -138,7 +153,7 @@ class ASTBuilder { val name = (methodDecl.prefix.metaType as PTypeMetaVariable).name method.returnType2 = Utils.getTypeFromId(typeBindings.get(name).typeName, ast) } - + //adding method parameters if (methodDecl.arguments.size > 0) { for(argument : methodDecl.arguments) { @@ -170,17 +185,24 @@ class ASTBuilder { } //adding method body - if(methodDecl.body !== null) { - val block = ast.newBlock - val buildMethodBody = (methodDecl.body as PBlockExpression).expressions.doBuildPatterns - block.statements.addAll(buildMethodBody) - method.body = block - } else { - val block = ast.newBlock - val buildMethodMetaBody = (methodDecl.metaBody as PMetaVariable).doBuild - block.statements.add(buildMethodMetaBody) - method.body = block + val block = ast.newBlock + val methodBody = (methodDecl.body as PBlockExpression).expressions + var List methodBodyList = newArrayList + for(element : methodBody) { + if(element instanceof PMetaVariable) { + val binding = bindings.get( (element as PMetaVariable).name ) + val copies = binding.map[ASTNode.copySubtree(ast, it)] + methodBodyList.addAll(copies) + } else if (element instanceof PTargetExpression) { + val binding = bindings.get( "target" ) + val copies = binding.map[ASTNode.copySubtree(ast, it)] + methodBodyList.addAll(copies) + } else { + methodBodyList.add(element.doBuild) + } } + block.statements.addAll(methodBodyList) + method.body = block newInterfaceMethod.name.identifier = method.name.identifier newInterfaceMethod.returnType2 = Utils.getTypeFromId(method.returnType2.toString, ast) @@ -188,7 +210,42 @@ class ASTBuilder { return method } - //method invocation builder + //variable declaration builder + def private dispatch doBuild(PVariableDeclaration varDecl) { + val fragment = ast.newVariableDeclarationFragment + + //adding variable name + if(varDecl.metaName !== null) { + fragment.name.identifier = nameBindings.get( (varDecl.metaName as PNameMetaVariable).name ) + } else { + fragment.name.identifier = varDecl.name + } + + val newVar = ast.newFieldDeclaration(fragment) + + //adding variable visibility + if(varDecl.visibility !== null) { + switch varDecl.visibility { + case PUBLIC: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + default: {} + } + } + + //adding variable type + if(varDecl.type !== null) { + newVar.type = Utils.getTypeFromId(typeReferenceQueue.remove, ast) + } else { + val name = (varDecl.metaType as PTypeMetaVariable).name + newVar.type = Utils.getTypeFromId(typeBindings.get(name).typeName, ast) + } + + return newVar + } + + + //method invocation (with expression) builder def private dispatch ASTNode doBuild(PMemberFeatureCall featureCall) { val methodInv = ast.newMethodInvocation @@ -216,6 +273,20 @@ class ASTBuilder { return statement } + //method invocation (without expression) builder + def private dispatch doBuild(PFeatureCall featureCall) { + val methodInv = ast.newMethodInvocation + + //adding method invocation name + methodInv.name.identifier = featureCall.feature + + //TODO + + val statement = ast.newExpressionStatement(methodInv) + return statement + } + + //block builder def private dispatch doBuild(PBlockExpression blockPattern) { val block = ast.newBlock diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend index 53bd46d..fd44b6a 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend @@ -21,6 +21,9 @@ import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.MethodInvocation import org.eclipse.jdt.core.dom.Modifier import org.eclipse.xtext.EcoreUtil2 +import hu.elte.refjava.lang.refJava.PVariableDeclaration +import org.eclipse.jdt.core.dom.FieldDeclaration +import org.eclipse.jdt.core.dom.VariableDeclarationFragment class PatternMatcher { @@ -44,8 +47,14 @@ class PatternMatcher { modifiedTarget } - def match(Pattern targetPattern, List target) { + def match(Pattern targetPattern, List target, String typeRefString) { bindings.clear + if (typeRefString !== null) { + val tmp = typeRefString.split("\\|") + this.typeReferenceQueue = newLinkedList + this.typeReferenceQueue.addAll(tmp) + } + return doMatchChildren(targetPattern.patterns, target) } @@ -54,10 +63,12 @@ class PatternMatcher { this.nameBindings = nameBindings this.typeBindings = typeBindings this.parameterBindings = parameterBindings - val tmp = typeRefString.split("\\|") - this.typeReferenceQueue = newLinkedList - this.typeReferenceQueue.addAll(tmp) + if (typeRefString !== null) { + val tmp = typeRefString.split("\\|") + this.typeReferenceQueue = newLinkedList + this.typeReferenceQueue.addAll(tmp) + } bindings.clear modifiedTarget = newArrayList @@ -107,16 +118,6 @@ class PatternMatcher { if (constCall.elements.size != classInstance.anonymousClassDeclaration.bodyDeclarations.size) { return false } else { - /* - val pIt = constCall.elements.iterator - val nIt = classInstance.anonymousClassDeclaration.bodyDeclarations.iterator - while(pIt.hasNext) { - if (!doMatch(pIt.next, nIt.next)) { - return false - } - } - anonClassCheck = true - */ anonClassCheck = doMatchChildren(constCall.elements, classInstance.anonymousClassDeclaration.bodyDeclarations) } } else { @@ -141,13 +142,15 @@ class PatternMatcher { //matching method visibility var boolean visibilityCheck - if(pMethodDecl.prefix.visibility !== null) { + if(pMethodDecl.prefix.visibility.toString != "null") { switch pMethodDecl.prefix.visibility { case PUBLIC: visibilityCheck = Modifier.isPublic(methodDecl.getModifiers()) case PRIVATE: visibilityCheck = Modifier.isPrivate(methodDecl.getModifiers()) case PROTECTED: visibilityCheck = Modifier.isProtected(methodDecl.getModifiers()) default: {} } + } else { + visibilityCheck = true } //matching method return value @@ -156,7 +159,7 @@ class PatternMatcher { //TODO returnCheck = true } else { - returnCheck = methodDecl.returnType2.toString == typeReferenceQueue.remove + returnCheck = methodDecl.returnType2.toString == typeReferenceQueue.remove } //matching method body @@ -184,6 +187,8 @@ class PatternMatcher { if(featureCall.memberCallArguments !== null) { //TODO parameterCheck = true + } else { + parameterCheck = true } //matching method invocation expression @@ -194,6 +199,45 @@ class PatternMatcher { return false } } + + //variable declaration matching + def private dispatch boolean doMatch(PVariableDeclaration varDecl, FieldDeclaration fieldDecl) { + + //matching variable declaration name + var boolean nameCheck + if (varDecl.metaName !== null) { + //TODO + nameCheck = true + } else { + nameCheck = varDecl.name == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier + } + + //matching variable declaration visibility + var boolean visibilityCheck + if(varDecl.visibility.toString != "null") { + switch varDecl.visibility { + case PUBLIC: visibilityCheck = Modifier.isPublic(fieldDecl.getModifiers()) + case PRIVATE: visibilityCheck = Modifier.isPrivate(fieldDecl.getModifiers()) + case PROTECTED: visibilityCheck = Modifier.isProtected(fieldDecl.getModifiers()) + default: {} + } + } else { + visibilityCheck = true + } + + //matching variable declaration type + var boolean typeCheck + if(varDecl.type !== null) { + typeCheck = fieldDecl.type.toString == typeReferenceQueue.remove + } else { + //TODO + typeCheck = true + } + + return nameCheck && visibilityCheck && typeCheck + } + + def private dispatch doMatch(PExpression anyOtherPattern, ASTNode anyOtherNode) { false diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend index bde1eb1..046a8de 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend @@ -1,7 +1,12 @@ package hu.elte.refjava.api.patterns -import org.eclipse.jdt.core.dom.PrimitiveType +import hu.elte.refjava.lang.refJava.Pattern import org.eclipse.jdt.core.dom.AST +import org.eclipse.jdt.core.dom.PrimitiveType +import org.eclipse.xtext.EcoreUtil2 +import org.eclipse.xtext.common.types.JvmTypeReference +import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.TypeDeclaration class Utils { @@ -40,4 +45,20 @@ class Utils { } } + def static getTypeReferenceString(Pattern pattern) { + var String typeypeReferenceString = "" + val types = EcoreUtil2.getAllContentsOfType(pattern, JvmTypeReference) + for(type : types) { + typeypeReferenceString = typeypeReferenceString + type.identifier + "|" + } + return typeypeReferenceString + } + + def static getTypeDeclaration(ASTNode node) { + var tmp = node + while (!(tmp instanceof TypeDeclaration)) { + tmp = tmp.parent + } + tmp as TypeDeclaration + } } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext index 7bd7bf8..bd40e58 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext @@ -85,7 +85,7 @@ PParameterMetaVariable returns PExpression: ; Pattern: - patterns+=PExpressionOrVarDeclaration =>(';' patterns+=PExpressionOrVarDeclaration)* ';'? + (patterns+=PExpressionOrVarDeclaration =>(';' patterns+=PExpressionOrVarDeclaration)* ';'?) | empty?="-" // =>: local, distinguishes semicolons ; @@ -98,7 +98,7 @@ PDeclaration returns PExpression: PVariableDeclaration ( {PMethodDeclaration.prefix=current} '(' ( arguments+=FullJvmFormalParameter (',' arguments+=FullJvmFormalParameter)* | metaArguments=PParameterMetaVariable - )? ')' (body=PBlockExpression | metaBody=PMetaVariable) + )? ')' (body=PBlockExpression) )? ; @@ -111,7 +111,7 @@ PVariableDeclaration returns PVariableDeclaration: ; enum Visibility: - PACKAGE='package' | PUBLIC='public' | PRIVATE='private' | PROTECTED='protected' + NULL='null' | PACKAGE='package' | PUBLIC='public' | PRIVATE='private' | PROTECTED='protected' ; PExpression returns PExpression: diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend index db17162..9794b22 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend @@ -5,21 +5,20 @@ import hu.elte.refjava.api.BlockRefactoring import hu.elte.refjava.api.ClassRefactoring import hu.elte.refjava.api.LambdaRefactoring import hu.elte.refjava.api.LocalRefactoring -import hu.elte.refjava.lang.refJava.PMethodDeclaration +import hu.elte.refjava.api.patterns.Utils import hu.elte.refjava.lang.refJava.PNameMetaVariable import hu.elte.refjava.lang.refJava.PParameterMetaVariable import hu.elte.refjava.lang.refJava.PTypeMetaVariable import hu.elte.refjava.lang.refJava.SchemeInstanceRule import hu.elte.refjava.lang.refJava.SchemeType import java.lang.reflect.Type -import org.eclipse.xtext.EcoreUtil2 +import java.util.List import org.eclipse.xtext.common.types.JvmVisibility import org.eclipse.xtext.naming.IQualifiedNameProvider import org.eclipse.xtext.serializer.ISerializer import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder -import java.util.List class RefJavaJvmModelInferrer extends AbstractModelInferrer { @@ -32,21 +31,32 @@ class RefJavaJvmModelInferrer extends AbstractModelInferrer { acceptor.accept(rule.toClass(rule.fullyQualifiedName)) [ superTypes += rule.type.toSuperType.typeRef - //type parsing doesn't work.. - var String typeReferenceString = "" - val methodDeclarations = EcoreUtil2.getAllContentsOfType(rule.replacementPattern, PMethodDeclaration) - for(method : methodDeclarations) { - if(method.prefix.type !== null) { - typeReferenceString = typeReferenceString + method.prefix.type.identifier + "|" - } - for (args : method.arguments) { - if(args.parameterType.type !== null) { - typeReferenceString = typeReferenceString + args.parameterType.identifier + "|" - } - } + val matchingTypeReferenceString = if (rule.matchingPattern !== null) { + Utils.getTypeReferenceString(rule.matchingPattern) + } else { + "" + } + + val replacementTypeReferenceString = if (rule.replacementPattern !== null) { + Utils.getTypeReferenceString(rule.replacementPattern) + } else { + "" } + val targetTypeReferenceString = if(rule.targetPattern !== null) { + Utils.getTypeReferenceString(rule.targetPattern) + } else { + "" + } + + val definitionTypeReferenceString = if(rule.definitionPattern !== null) { + Utils.getTypeReferenceString(rule.definitionPattern) + } else { + "" + } + + members += rule.toConstructor [ body = '''super("«rule.matchingPattern.serialize.trim»", "«rule.replacementPattern.serialize.trim»");''' ] @@ -92,16 +102,23 @@ class RefJavaJvmModelInferrer extends AbstractModelInferrer { } } - val finalTypesReferenceString = typeReferenceString + if(rule.definitionPattern !== null && (rule.type == SchemeType.LAMBDA || rule.type == SchemeType.CLASS) ) { + callings = callings + '''super.definitionString = "«rule.definitionPattern.serialize.trim»";'''+ endl + } + val finalCallings = callings + endl - if (finalTypesReferenceString.length > 0) { + if (finalCallings.length > 2 || matchingTypeReferenceString.length > 0 || replacementTypeReferenceString.length > 0 || targetTypeReferenceString.length > 0 || definitionTypeReferenceString.length > 0) { members += rule.toMethod("setMetaVariables", typeof(void).typeRef) [ - annotations += annotationRef(Override) + //annotations += annotationRef(Override) visibility = JvmVisibility.PROTECTED - body = '''«finalCallings»super.typeReferenceString = "«finalTypesReferenceString»";''' + body = '''«finalCallings»super.matchingTypeReferenceString = "«matchingTypeReferenceString»"; +super.replacementTypeReferenceString = "«replacementTypeReferenceString»"; +super.targetTypeReferenceString = "«targetTypeReferenceString»"; +super.definitionTypeReferenceString = "«definitionTypeReferenceString»";''' ] } + if (rule.precondition !== null) { members += rule.toMethod("instanceCheck", Boolean.TYPE.typeRef) [ visibility = JvmVisibility.PRIVATE From 645356fcd43564fa231505c6c23b36b11be1f8d1 Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Mon, 6 Apr 2020 19:25:18 +0200 Subject: [PATCH 03/14] Class refactoring checks --- hu.elte.refjava.lang/.project | 1 + .../elte/refjava/api/BlockRefactoring.xtend | 21 ++- .../src/hu/elte/refjava/api/Check.xtend | 177 +++++++++++++++++- .../elte/refjava/api/ClassRefactoring.xtend | 169 +++++++++-------- .../elte/refjava/api/LambdaRefactoring.xtend | 92 ++++++--- .../elte/refjava/api/LocalRefactoring.xtend | 6 +- .../src/hu/elte/refjava/api/Refactoring.xtend | 4 +- .../refjava/api/patterns/ASTBuilder.xtend | 69 +++---- .../refjava/api/patterns/PatternMatcher.xtend | 68 +++++-- .../refjava/api/patterns/PatternParser.xtend | 40 ---- .../hu/elte/refjava/api/patterns/Utils.xtend | 10 + .../src/hu/elte/refjava/lang/RefJava.xtext | 5 + .../lang/typesystem/RefJavaTypeComputer.xtend | 7 +- 13 files changed, 464 insertions(+), 205 deletions(-) diff --git a/hu.elte.refjava.lang/.project b/hu.elte.refjava.lang/.project index 64cc61c..08d1222 100644 --- a/hu.elte.refjava.lang/.project +++ b/hu.elte.refjava.lang/.project @@ -3,6 +3,7 @@ hu.elte.refjava + hu.elte.refjava.control diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend index d9e4a84..11923ba 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend @@ -6,9 +6,9 @@ import hu.elte.refjava.api.patterns.PatternParser import java.lang.reflect.Type import java.util.List import java.util.Map -import org.eclipse.jdt.core.ICompilationUnit import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jface.text.IDocument +import org.eclipse.jdt.core.dom.TypeDeclaration class BlockRefactoring implements Refactoring { @@ -32,7 +32,7 @@ class BlockRefactoring implements Refactoring { builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) } - override init(List target, IDocument document, ICompilationUnit iCompUnit) { + override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document } @@ -42,6 +42,7 @@ class BlockRefactoring implements Refactoring { } override apply() { + setMetaVariables() return if(!safeTargetCheck) { Status.TARGET_MATCH_FAILED } else if (!safeMatch) { @@ -58,13 +59,10 @@ class BlockRefactoring implements Refactoring { } def private safeMatch() { - setMetaVariables() if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString) ) { return false } - target = matcher.modifiedTarget.toList - bindings.putAll(matcher.bindings) return true } @@ -78,7 +76,16 @@ class BlockRefactoring implements Refactoring { } def protected targetCheck(String targetPatternString) { - return matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString) + try { + if(!matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString)) { + return false + } + bindings.putAll(matcher.bindings) + return true + } catch (Exception e) { + println(e) + return false + } } def private safeCheck() { @@ -117,7 +124,7 @@ class BlockRefactoring implements Refactoring { } catch (Exception e) { return false } - + return true } } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend index 3205311..00e49ef 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend @@ -9,9 +9,15 @@ import org.eclipse.jdt.core.dom.Statement import org.eclipse.jdt.core.dom.VariableDeclarationFragment import org.eclipse.jdt.core.dom.VariableDeclarationStatement import java.lang.reflect.Type +import org.eclipse.jdt.core.dom.FieldDeclaration +import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jdt.core.dom.MethodDeclaration +import org.eclipse.jdt.core.dom.SingleVariableDeclaration +import hu.elte.refjava.api.patterns.Utils +import java.lang.reflect.Modifier class Check { - + //for testing def static getTypeOf(Type type) { return type @@ -98,11 +104,176 @@ class Check { varDeclList.forall[!isReferencedIn(nodes)] } - //class refact - def static references(ASTNode node) { + //class refact - field lifting + def static enclosingClass(List target) { + Utils.getTypeDeclaration(target.head) + } + + def static superClass(TypeDeclaration typeDecl) { + + + + val compUnit = Utils.getCompilationUnit(typeDecl) + val superClassType = typeDecl.superclassType + compUnit.types.findFirst[(it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + } + + + def static hasSuperClass(TypeDeclaration typeDecl) { + return typeDecl.superclassType !== null + } + + def static isPrivate(List target) { + if (target.head instanceof FieldDeclaration) { + return Modifier.isPrivate( (target.head as FieldDeclaration).getModifiers()) + } else if(target.head instanceof MethodDeclaration) { + return Modifier.isPrivate( (target.head as MethodDeclaration).getModifiers()) + } + } + + def static references(List target, TypeDeclaration typeDecl) { + if (target.head instanceof FieldDeclaration) { + val fieldDecl = target.head as FieldDeclaration + val fragments = fieldDecl.fragments as List + val bodyDeclarations = typeDecl.bodyDeclarations + val List refs = newArrayList + for(fragment : fragments) { + val binding = fragment.resolveBinding + for(declaration : bodyDeclarations) { + + val visitor = new ASTVisitor() { + override visit(SimpleName name) { + if (name.resolveBinding.equals(binding) && name != fragment.name) { + println(name.parent) + + refs.add(name.parent) + } + return true + } + } + (declaration as ASTNode).accept(visitor) + } + } + refs + } else if (target.head instanceof MethodDeclaration) { + val methodDecl = target.head as MethodDeclaration + val bodyDeclarations = typeDecl.bodyDeclarations + val List refs = newArrayList + val binding = methodDecl.resolveBinding + for(declaration : bodyDeclarations) { + val visitor = new ASTVisitor() { + override visit(SimpleName name) { + if (name.resolveBinding.equals(binding) && name != methodDecl.name) { + refs.add(name.parent) + } + return true + } + } + (declaration as ASTNode).accept(visitor) + } + refs + } + } + + def static isUniqueFieldIn(List target, TypeDeclaration typeDecl) { + val fieldDecl = target.head as FieldDeclaration + !typeDecl.bodyDeclarations.exists[ + it instanceof FieldDeclaration && + ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier + ] } + def static isUniqueMethodIn(List target, TypeDeclaration typeDecl) { + val methodDecl = target.head as MethodDeclaration + + val methodsWithSameNameAndAmountOfParameter = typeDecl.bodyDeclarations.filter[ + it instanceof MethodDeclaration && (it as MethodDeclaration).name.identifier == methodDecl.name.identifier + && (it as MethodDeclaration).parameters.size == methodDecl.parameters.size + ] + if(methodsWithSameNameAndAmountOfParameter.size > 0) { + if(methodDecl.parameters.size == 0) { + false + } else { + for(var int i = 0; i < methodsWithSameNameAndAmountOfParameter.size; i++) { + for (var int j = 0; i < methodDecl.parameters.size; i++) { + val methodParameter = (methodsWithSameNameAndAmountOfParameter.get(i) as MethodDeclaration).parameters.get(j) as SingleVariableDeclaration + if ( (methodDecl.parameters.get(j) as SingleVariableDeclaration).type.toString != methodParameter.type.toString) { + return true + } + } + } + false + } + } else { + true + } + } + + def static accessedFieldsOfEnclosingClass(List target, TypeDeclaration typeDecl) { + val methodDecl = target.head as MethodDeclaration + + val List accessedFields = newArrayList + val methodBody = methodDecl.body + val classFields = typeDecl.bodyDeclarations.filter[it instanceof FieldDeclaration] + for (field : classFields) { + val fragments = (field as FieldDeclaration).fragments as List + for(fragment : fragments) { + val binding = fragment.resolveBinding + methodBody.statements.exists[ + val visitor = new ASTVisitor() { + public var found = false + + override visit(SimpleName name) { + if(name.resolveBinding.equals(binding)) { + found = true + return false + } + return true + } + } + (it as ASTNode).accept(visitor) + if(visitor.found) { + accessedFields.add(field as ASTNode) + } + return visitor.found + ] + } + } + accessedFields + } + + def static accessedMethodsOfEnclosingClass(List target, TypeDeclaration typeDecl) { + val methodDecl = target.head as MethodDeclaration + + val List accessedMethods = newArrayList + val methodBody = methodDecl.body + val classMethods = typeDecl.bodyDeclarations.filter[it instanceof MethodDeclaration] + for (method : classMethods) { + val binding = (method as MethodDeclaration).resolveBinding + methodBody.statements.exists[ + val visitor = new ASTVisitor() { + public var found = false + + override visit(SimpleName name) { + if(name.resolveBinding.equals(binding) && name != methodDecl.name) { + found = true + return false + } + return true + } + } + (it as ASTNode).accept(visitor) + if(visitor.found) { + accessedMethods.add(method as ASTNode) + } + return visitor.found + ] + } + accessedMethods + } + + } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend index f4becea..4fa3b87 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend @@ -3,33 +3,35 @@ package hu.elte.refjava.api import hu.elte.refjava.api.patterns.ASTBuilder import hu.elte.refjava.api.patterns.PatternMatcher import hu.elte.refjava.api.patterns.PatternParser +import hu.elte.refjava.api.patterns.Utils import java.lang.reflect.Type import java.util.List import java.util.Map -import java.util.Queue import org.eclipse.jdt.core.ICompilationUnit -import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode -import org.eclipse.jdt.core.dom.ASTParser -import org.eclipse.jdt.core.dom.CompilationUnit import org.eclipse.jdt.core.dom.FieldDeclaration import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jdt.core.dom.VariableDeclarationFragment import org.eclipse.jface.text.IDocument -import hu.elte.refjava.api.patterns.Utils -import java.lang.reflect.Modifier +import org.eclipse.jdt.core.dom.ASTParser +import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.dom.AST +import org.eclipse.jface.text.IRewriteTarget +import org.eclipse.jface.text.Document class ClassRefactoring implements Refactoring { List target + List typeDeclList IDocument document - ICompilationUnit iCompUnit + val PatternMatcher matcher val ASTBuilder builder val String matchingString val String replacementString + protected String targetString protected String definitionString protected val Map> bindings = newHashMap protected val Map nameBindings = newHashMap @@ -48,10 +50,10 @@ class ClassRefactoring implements Refactoring { this.replacementString = replacementPatternString } - override init(List target, IDocument document, ICompilationUnit iCompUnit) { + override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document - this.iCompUnit = iCompUnit + this.typeDeclList = allTypeDeclInWorkspace } def setTarget(List newTarget) { @@ -59,6 +61,7 @@ class ClassRefactoring implements Refactoring { } override apply() { + setMetaVariables() return if(!safeTargetCheck) { Status.TARGET_MATCH_FAILED } else if (!safeMatch) { @@ -76,7 +79,6 @@ class ClassRefactoring implements Refactoring { def private safeMatch() { try { - setMetaVariables() if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { return false } @@ -99,7 +101,17 @@ class ClassRefactoring implements Refactoring { } def protected targetCheck(String targetPatternString) { - return matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString) + try { + this.targetString = targetPatternString + if(!matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString)) { + return false + } + bindings.putAll(matcher.bindings) + return true + } catch (Exception e) { + println(e) + return false + } } def private safeCheck() { @@ -112,71 +124,35 @@ class ClassRefactoring implements Refactoring { } def protected check() { - - val ASTParser parser = ASTParser.newParser(AST.JLS12); - parser.setSource(iCompUnit); - val CompilationUnit compUnit = parser.createAST(null) as CompilationUnit; - - if (replacementString == "-" && definitionString == "target") { - definitionString = matchingString - definitionTypeReferenceString = matchingTypeReferenceString - } - - val targetTypeDeclaration = Utils.getTypeDeclaration(target.head) - val definitionPattern = PatternParser.parse(definitionString) - val definitionToCheck = builder.build(definitionPattern, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head - + //TODO if(replacementString != "-") { - println("lambda to method check") + //return Check.isUniqueMethodIn(target, Check.enclosingClass(target)) + + return true + + } else { - val superClass = compUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.superclassType.toString] as TypeDeclaration - val targetClass = compUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.name.identifier ] as TypeDeclaration if(target.head instanceof MethodDeclaration) { - println("method lift check") - - return targetTypeDeclaration.superclassType !== null - + return Check.hasSuperClass(Check.enclosingClass(target)) + && if (Check.isPrivate(target)) Check.references(target, Check.enclosingClass(target)).empty else true + && Check.accessedFieldsOfEnclosingClass(target, Check.enclosingClass(target)).empty + && Check.accessedMethodsOfEnclosingClass(target, Check.enclosingClass(target)).empty + // && Check.isUniqueMethodIn(target, Check.superClass(Check.enclosingClass(target))) + } else if (target.head instanceof FieldDeclaration) { - println("field lift check") - val field = definitionToCheck as FieldDeclaration - - - println("1 " + (targetTypeDeclaration.superclassType !== null)) - println("2 ") - println("3 " + !superClass.bodyDeclarations.exists[(it instanceof FieldDeclaration) && - ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == (field.fragments.head as VariableDeclarationFragment).name.identifier - ]) - println("4 ") - println("5 ") - - - return targetTypeDeclaration.superclassType !== null && - if (Modifier.isPrivate(field.getModifiers())) { - //TODO - - - - return false - } else { - true - } - && !superClass.bodyDeclarations.exists[(it instanceof FieldDeclaration) && - ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == (field.fragments.head as VariableDeclarationFragment).name.identifier - ] + return Check.hasSuperClass(Check.enclosingClass(target)) + && if (Check.isPrivate(target)) Check.references(target, Check.enclosingClass(target)).empty else true + // && Check.isUniqueFieldIn(target, Check.superClass(Check.enclosingClass(target))) } + return false } - - - - return false } def private safeBuild() { try { if(replacementString != "-") { - val replacementPattern = PatternParser.parse(replacementString) - replacement = builder.build(replacementPattern, target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) } } catch (Exception e) { println(e) @@ -199,29 +175,52 @@ class ClassRefactoring implements Refactoring { edits.apply(document) } - //we create the type references for the definition - var Queue definitionTypeReferenceQueue = newLinkedList - if(definitionTypeReferenceString !== null) { - val tmp = definitionTypeReferenceString.split("\\|") - definitionTypeReferenceQueue.addAll(tmp) - } + val compUnit = Utils.getCompilationUnit(target.head) + val targetICompUnit = compUnit.getJavaElement() as ICompilationUnit - val ASTParser parser = ASTParser.newParser(AST.JLS12); - parser.setSource(iCompUnit); - val CompilationUnit compUnit = parser.createAST(null) as CompilationUnit; - compUnit.recordModifications + val parser = ASTParser.newParser(AST.JLS12); + parser.source = targetICompUnit; + val targetCompUnit = parser.createAST(null) as CompilationUnit; + + targetCompUnit.recordModifications + + if (replacementString == "-" && definitionString == "target" && matchingString == "target") { + definitionString = targetString + definitionTypeReferenceString = targetTypeReferenceString + } else if (replacementString == "-" && definitionString == "target" && matchingString != "target") { + definitionString = matchingString + definitionTypeReferenceString = matchingTypeReferenceString + } val definitionPattern = PatternParser.parse(definitionString) - val objectToInsertOrMove = builder.build(definitionPattern, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head + var objectToInsertOrMove = builder.build(definitionPattern, targetCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head val targetTypeDeclaration = Utils.getTypeDeclaration(target.head) - val targetClass = compUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.name.identifier ] as TypeDeclaration + val targetClass = targetCompUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.name.identifier ] as TypeDeclaration + + var CompilationUnit superCompUnit + var ICompilationUnit superICompUnit if(replacement !== null) { targetClass.bodyDeclarations.add(objectToInsertOrMove) } else { val superClassType = targetTypeDeclaration.superclassType - val superClass = compUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + + + //needs work + var superClass = typeDeclList.findFirst[ (it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + val compUnit2 = Utils.getCompilationUnit(superClass) + superICompUnit = compUnit2.getJavaElement() as ICompilationUnit + + if (superICompUnit != targetICompUnit) { + superCompUnit = Utils.getCompilationUnit(superClass) + superICompUnit = superCompUnit.getJavaElement() as ICompilationUnit + superClass = superCompUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + superCompUnit.recordModifications + objectToInsertOrMove = builder.build(definitionPattern, superCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head + } else { + superClass = targetCompUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + } var Object methodOrFieldToDelete if(target.head instanceof MethodDeclaration){ @@ -229,13 +228,23 @@ class ClassRefactoring implements Refactoring { } else if (target.head instanceof FieldDeclaration) { methodOrFieldToDelete = targetClass.bodyDeclarations.findFirst[ it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == ((target.head as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier ] } + superClass.bodyDeclarations.add(objectToInsertOrMove) targetClass.bodyDeclarations.remove(methodOrFieldToDelete) } - val edits2 = compUnit.rewrite(document, iCompUnit.javaProject.getOptions(true)) + + val edits2 = targetCompUnit.rewrite(document, targetICompUnit.javaProject.getOptions(true)) edits2.apply(document) - val String newSource = document.get; - iCompUnit.getBuffer().setContents(newSource); + val newSource = document.get; + targetICompUnit.getBuffer().setContents(newSource); + + if(superICompUnit != targetICompUnit) { + val superDocument = new Document(superICompUnit.source) + val edits3 = superCompUnit.rewrite(superDocument, superICompUnit.javaProject.getOptions(true)) + edits3.apply(superDocument) + val superSource = superDocument.get + superICompUnit.getBuffer().setContents(superSource) + } } catch (Exception e) { println(e) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend index d7a906a..4c17121 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend @@ -3,6 +3,7 @@ package hu.elte.refjava.api import hu.elte.refjava.api.patterns.ASTBuilder import hu.elte.refjava.api.patterns.PatternMatcher import hu.elte.refjava.api.patterns.PatternParser +import hu.elte.refjava.lang.refJava.PLambdaExpression import java.lang.reflect.Type import java.util.List import java.util.Map @@ -11,20 +12,20 @@ import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.ASTParser import org.eclipse.jdt.core.dom.CompilationUnit -import org.eclipse.jdt.core.dom.MethodDeclaration -import org.eclipse.jdt.core.dom.SingleVariableDeclaration -import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jface.text.IDocument import hu.elte.refjava.api.patterns.Utils +import org.eclipse.jdt.core.dom.TypeDeclaration class LambdaRefactoring implements Refactoring { List target IDocument document - ICompilationUnit iCompUnit val PatternMatcher matcher val ASTBuilder builder + val String matchingString + val String replacementString + val String refactoringType protected String definitionString protected val Map> bindings = newHashMap protected val Map nameBindings = newHashMap @@ -39,12 +40,19 @@ class LambdaRefactoring implements Refactoring { protected new(String matchingPatternString, String replacementPatternString) { matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) + val matchingPatternsFirstElement = PatternParser.parse(matchingPatternString).patterns.get(0) + this.matchingString = matchingPatternString + this.replacementString = replacementPatternString + this.refactoringType = if (matchingPatternsFirstElement instanceof PLambdaExpression) { + "modification" + } else { + "new" + } } - override init(List target, IDocument document, ICompilationUnit iCompUnit) { + override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document - this.iCompUnit = iCompUnit } def setTarget(List newTarget) { @@ -52,6 +60,7 @@ class LambdaRefactoring implements Refactoring { } override apply() { + setMetaVariables() return if(!safeTargetCheck) { Status.TARGET_MATCH_FAILED } else if (!safeMatch) { @@ -69,12 +78,14 @@ class LambdaRefactoring implements Refactoring { def private safeMatch() { try { - setMetaVariables() if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { return false } target = matcher.modifiedTarget.toList bindings.putAll(matcher.bindings) + + + return true } catch (Exception e) { println(e) @@ -92,7 +103,16 @@ class LambdaRefactoring implements Refactoring { } def protected targetCheck(String targetPatternString) { - return matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString) + try { + if(!matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString)) { + return false + } + bindings.putAll(matcher.bindings) + return true + } catch (Exception e) { + println(e) + return false + } } def private safeCheck() { @@ -105,7 +125,17 @@ class LambdaRefactoring implements Refactoring { } def protected check() { - //Check.isInsideBlock(target) + //TODO + if(refactoringType == "new") { + println("new lambda expression") + + + + } else { + println("lambda expression modification") + + + } return true } @@ -129,15 +159,33 @@ class LambdaRefactoring implements Refactoring { var edits = rewrite.rewriteAST(document, null) edits.apply(document) - //testing - val ASTParser parser = ASTParser.newParser(AST.JLS12); - parser.setSource(iCompUnit); - val CompilationUnit compUnit = parser.createAST(null) as CompilationUnit; - - if(!compUnit.types.exists[ (it as TypeDeclaration).name.identifier == builder.newInterface.name.identifier]) { + + val compUnit = Utils.getCompilationUnit(target.head) + val iCompUnit= compUnit.getJavaElement() as ICompilationUnit + + val parser = ASTParser.newParser(AST.JLS12); + parser.source = iCompUnit; + val newcompUnit = parser.createAST(null) as CompilationUnit; + + newcompUnit.recordModifications + + if(refactoringType == "new") { + println("create a new lambda and interface") - compUnit.recordModifications + val replacementLambdaExpression = PatternParser.parse(replacementString).patterns.get(0) as PLambdaExpression + val newInterface = builder.buildNewInterface(replacementLambdaExpression, newcompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + newcompUnit.types().add(newInterface) + + } else { + println("get the existing interface and modify it") + + + } + + + /* + if(!compUnit.types.exists[ (it as TypeDeclaration).name.identifier == builder.newInterface.name.identifier]) { val newInterface = compUnit.AST.newTypeDeclaration newInterface.interface = true newInterface.name.identifier = builder.newInterface.name.identifier @@ -155,13 +203,15 @@ class LambdaRefactoring implements Refactoring { newMethodDeclaration.parameters.add(methodParameterDeclaration) } } - compUnit.types().add(newInterface) - val edits2 = compUnit.rewrite(document, iCompUnit.javaProject.getOptions(true) ) - edits2.apply(document); - val String newSource = document.get(); - iCompUnit.getBuffer().setContents(newSource); } + */ + + val edits2 = newcompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true) ) + edits2.apply(document); + val String newSource = document.get(); + iCompUnit.getBuffer().setContents(newSource); + } catch (Exception e) { println(e) return false diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend index 11d6acd..be1eda2 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend @@ -6,9 +6,9 @@ import hu.elte.refjava.api.patterns.PatternParser import java.lang.reflect.Type import java.util.List import java.util.Map -import org.eclipse.jdt.core.ICompilationUnit import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jface.text.IDocument +import org.eclipse.jdt.core.dom.TypeDeclaration class LocalRefactoring implements Refactoring { @@ -32,12 +32,13 @@ class LocalRefactoring implements Refactoring { builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) } - override init(List target, IDocument document, ICompilationUnit iCompUnit) { + override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document } override apply() { + setMetaVariables() return if (!safeMatch) { Status.MATCH_FAILED } else if (!safeCheck) { @@ -52,7 +53,6 @@ class LocalRefactoring implements Refactoring { } def private safeMatch() { - setMetaVariables() if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { return false } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend index f284cb8..d5252ef 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend @@ -3,7 +3,7 @@ package hu.elte.refjava.api import java.util.List import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jface.text.IDocument -import org.eclipse.jdt.core.ICompilationUnit +import org.eclipse.jdt.core.dom.TypeDeclaration interface Refactoring { @@ -16,7 +16,7 @@ interface Refactoring { TARGET_MATCH_FAILED } - def void init(List target, IDocument document, ICompilationUnit iCompUnit) {} + def void init(List target, IDocument document, List allTypeDeclInWorkspace) {} def Status apply() diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend index afd41fd..c897741 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend @@ -3,12 +3,16 @@ package hu.elte.refjava.api.patterns import hu.elte.refjava.lang.refJava.PBlockExpression import hu.elte.refjava.lang.refJava.PConstructorCall import hu.elte.refjava.lang.refJava.PExpression +import hu.elte.refjava.lang.refJava.PFeatureCall +import hu.elte.refjava.lang.refJava.PLambdaExpression import hu.elte.refjava.lang.refJava.PMemberFeatureCall import hu.elte.refjava.lang.refJava.PMetaVariable import hu.elte.refjava.lang.refJava.PMethodDeclaration import hu.elte.refjava.lang.refJava.PNameMetaVariable +import hu.elte.refjava.lang.refJava.PParameterMetaVariable import hu.elte.refjava.lang.refJava.PTargetExpression import hu.elte.refjava.lang.refJava.PTypeMetaVariable +import hu.elte.refjava.lang.refJava.PVariableDeclaration import hu.elte.refjava.lang.refJava.Pattern import java.lang.reflect.Type import java.util.List @@ -17,12 +21,9 @@ import java.util.Queue import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.Expression +import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword -import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jdt.core.dom.rewrite.ASTRewrite -import hu.elte.refjava.lang.refJava.PParameterMetaVariable -import hu.elte.refjava.lang.refJava.PFeatureCall -import hu.elte.refjava.lang.refJava.PVariableDeclaration class ASTBuilder { @@ -34,7 +35,6 @@ class ASTBuilder { Map typeBindings Map>> parameterBindings Queue typeReferenceQueue - TypeDeclaration newInterface new(Pattern pattern) { this.pattern = pattern @@ -44,14 +44,36 @@ class ASTBuilder { rewrite } - def getNewInterface() { - newInterface - } - def build(Pattern pattern, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { this.pattern = pattern build(ast, bindings, nameBindings, typeBindings, parameterBindings, typeRefString) } + + def buildNewInterface(PLambdaExpression lambdaExpr, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString){ + this.ast = ast + + val newInterface = ast.newTypeDeclaration + newInterface.interface = true + newInterface.name.identifier = "test" + + if(typeRefString !== null) { + val tmp = typeRefString.split("\\|") + this.typeReferenceQueue = newLinkedList + this.typeReferenceQueue.addAll(tmp) + } + + val lambdaExpressionBody = ((lambdaExpr.expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements + val newInterfaceBodyDeclarations = lambdaExpressionBody.doBuildPatterns + + newInterfaceBodyDeclarations.forEach[ + if(it instanceof MethodDeclaration) { + (it as MethodDeclaration).body = null + } + ] + + newInterface.bodyDeclarations.addAll(newInterfaceBodyDeclarations) + return newInterface + } def build(AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { this.ast = ast @@ -60,8 +82,6 @@ class ASTBuilder { this.nameBindings = nameBindings this.typeBindings = typeBindings this.parameterBindings = parameterBindings - this.newInterface = ast.newTypeDeclaration - this.newInterface.interface = true if(typeRefString !== null) { val tmp = typeRefString.split("\\|") @@ -103,10 +123,8 @@ class ASTBuilder { if (constCall.metaName !== null) { val name = (constCall.metaName as PNameMetaVariable).name class.type = ast.newSimpleType(ast.newName(nameBindings.get(name) ) ) - newInterface.name.identifier = nameBindings.get(name) } else { class.type = ast.newSimpleType(ast.newName(constCall.name) ) - newInterface.name.identifier = constCall.name } //adding constructor call anonymous class declaration (body) @@ -125,8 +143,6 @@ class ASTBuilder { //method builder def private dispatch ASTNode doBuild(PMethodDeclaration methodDecl) { val method = ast.newMethodDeclaration - val newInterfaceMethod = ast.newMethodDeclaration - //adding method name if (methodDecl.prefix.metaName !== null) { @@ -163,11 +179,6 @@ class ASTBuilder { methodParameterDeclaration.type = Utils.getTypeFromId(typeName, ast) methodParameterDeclaration.name.identifier = argument.name method.parameters.add(methodParameterDeclaration) - - val interfaceMethodParameterDeclatration = ast.newSingleVariableDeclaration - interfaceMethodParameterDeclatration.type = Utils.getTypeFromId(typeName, ast) - interfaceMethodParameterDeclatration.name.identifier = argument.name - newInterfaceMethod.parameters.add(interfaceMethodParameterDeclatration) } } else if (methodDecl.metaArguments !== null) { val parameterList = parameterBindings.get((methodDecl.metaArguments as PParameterMetaVariable).name) @@ -176,11 +187,6 @@ class ASTBuilder { methodParameterDeclaration.type = Utils.getTypeFromId(parameter.key.toString, ast) methodParameterDeclaration.name.identifier = parameter.value method.parameters.add(methodParameterDeclaration) - - val interfaceMethodParameterDeclatration = ast.newSingleVariableDeclaration - interfaceMethodParameterDeclatration.type = Utils.getTypeFromId(parameter.key.toString, ast) - interfaceMethodParameterDeclatration.name.identifier = parameter.value - newInterfaceMethod.parameters.add(interfaceMethodParameterDeclatration) } } @@ -203,10 +209,6 @@ class ASTBuilder { } block.statements.addAll(methodBodyList) method.body = block - - newInterfaceMethod.name.identifier = method.name.identifier - newInterfaceMethod.returnType2 = Utils.getTypeFromId(method.returnType2.toString, ast) - newInterface.bodyDeclarations.add(newInterfaceMethod) return method } @@ -244,6 +246,10 @@ class ASTBuilder { return newVar } + //lambda expression builder + def private dispatch ASTNode doBuild(PLambdaExpression lambdaExpr) { + return doBuild(lambdaExpr.expression) + } //method invocation (with expression) builder def private dispatch ASTNode doBuild(PMemberFeatureCall featureCall) { @@ -280,13 +286,14 @@ class ASTBuilder { //adding method invocation name methodInv.name.identifier = featureCall.feature + //adding method parameters //TODO + val statement = ast.newExpressionStatement(methodInv) return statement } - //block builder def private dispatch doBuild(PBlockExpression blockPattern) { val block = ast.newBlock @@ -297,9 +304,7 @@ class ASTBuilder { return block } - def private List doBuildPatterns(List patterns) { patterns.map[doBuild].filterNull.toList } - } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend index fd44b6a..70f5a7e 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend @@ -3,10 +3,12 @@ package hu.elte.refjava.api.patterns import hu.elte.refjava.lang.refJava.PBlockExpression import hu.elte.refjava.lang.refJava.PConstructorCall import hu.elte.refjava.lang.refJava.PExpression +import hu.elte.refjava.lang.refJava.PLambdaExpression import hu.elte.refjava.lang.refJava.PMemberFeatureCall import hu.elte.refjava.lang.refJava.PMetaVariable import hu.elte.refjava.lang.refJava.PMethodDeclaration import hu.elte.refjava.lang.refJava.PTargetExpression +import hu.elte.refjava.lang.refJava.PVariableDeclaration import hu.elte.refjava.lang.refJava.Pattern import java.lang.reflect.Type import java.util.ArrayList @@ -17,13 +19,13 @@ import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.Block import org.eclipse.jdt.core.dom.ClassInstanceCreation import org.eclipse.jdt.core.dom.ExpressionStatement +import org.eclipse.jdt.core.dom.FieldDeclaration import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.MethodInvocation import org.eclipse.jdt.core.dom.Modifier -import org.eclipse.xtext.EcoreUtil2 -import hu.elte.refjava.lang.refJava.PVariableDeclaration -import org.eclipse.jdt.core.dom.FieldDeclaration +import org.eclipse.jdt.core.dom.SingleVariableDeclaration import org.eclipse.jdt.core.dom.VariableDeclarationFragment +import org.eclipse.xtext.EcoreUtil2 class PatternMatcher { @@ -54,7 +56,6 @@ class PatternMatcher { this.typeReferenceQueue = newLinkedList this.typeReferenceQueue.addAll(tmp) } - return doMatchChildren(targetPattern.patterns, target) } @@ -115,11 +116,11 @@ class PatternMatcher { //matching constructor call's methods var boolean anonClassCheck if (classInstance.anonymousClassDeclaration !== null && constCall.elements !== null) { - if (constCall.elements.size != classInstance.anonymousClassDeclaration.bodyDeclarations.size) { - return false - } else { + //if (constCall.elements.size != classInstance.anonymousClassDeclaration.bodyDeclarations.size) { + //return false + //} else { anonClassCheck = doMatchChildren(constCall.elements, classInstance.anonymousClassDeclaration.bodyDeclarations) - } + //} } else { //TODO anonClassCheck = true @@ -162,10 +163,36 @@ class PatternMatcher { returnCheck = methodDecl.returnType2.toString == typeReferenceQueue.remove } + //matching method parameters + var boolean parameterCheck = true + if (pMethodDecl.arguments.size > 0) { + if (pMethodDecl.arguments.size != methodDecl.parameters.size) { + parameterCheck = false + } else { + val argIt = pMethodDecl.arguments.iterator + val paramIt = (methodDecl.parameters as List).iterator + + while(argIt.hasNext && parameterCheck) { + val arg = argIt.next + val param = paramIt.next + parameterCheck = param.name.identifier == arg.name && param.type.toString == typeReferenceQueue.remove + } + + } + } else if (pMethodDecl.metaArguments !== null) { + //TODO + parameterCheck = true + } + //matching method body val boolean bodyCheck = doMatch(pMethodDecl.body, methodDecl.body) - return nameCheck && visibilityCheck && returnCheck && bodyCheck + return nameCheck && visibilityCheck && parameterCheck && returnCheck && bodyCheck + } + + //lambda expression matching + def private dispatch boolean doMatch(PLambdaExpression lambdaExpr, ExpressionStatement expStatement) { + doMatch(lambdaExpr.expression, expStatement) } //method invocation matching @@ -188,12 +215,13 @@ class PatternMatcher { //TODO parameterCheck = true } else { + //TODO parameterCheck = true } - + //matching method invocation expression val boolean expressionCheck = doMatch(featureCall.memberCallTarget, methodInv.expression) - + return nameCheck && parameterCheck && expressionCheck } else { return false @@ -237,8 +265,6 @@ class PatternMatcher { return nameCheck && visibilityCheck && typeCheck } - - def private dispatch doMatch(PExpression anyOtherPattern, ASTNode anyOtherNode) { false } @@ -247,6 +273,11 @@ class PatternMatcher { // children matching // /////////////////////// def private doMatchChildren(List patterns, List nodes) { + if (patterns.size == 1 && patterns.head instanceof PMetaVariable && (patterns.head as PMetaVariable).multi) { + bindings.put((patterns.head as PMetaVariable).name , nodes) + return true + } + if (!patterns.exists[it instanceof PMetaVariable && (it as PMetaVariable).multi] && nodes.size != patterns.size) { return false } @@ -267,23 +298,28 @@ class PatternMatcher { matchingNodes.add(nIt.next) j++ } - + if(!doMatch(patterns.get(i), matchingNodes)) { return false } } } + bindings.put("target", nodes) true } - def private doMatchChildrenWithTarget(List patterns, List selectedNodes) { + if (patterns.size == 1 && patterns.head instanceof PTargetExpression) { + bindings.put("target", selectedNodes) + return true + } + var List preTargetExpression = patterns.clone.takeWhile[ !(it instanceof PTargetExpression) ].toList.reverse var List postTargetExpression = patterns.clone.reverse.takeWhile[ !(it instanceof PTargetExpression) ].toList.reverse val List targetEnvironment = newArrayList targetEnvironment.addAll( (selectedNodes.head.parent as Block).statements ) - + var List preSelectedNodes = (targetEnvironment as List).clone.takeWhile[ it != selectedNodes.head ].toList.reverse var List postSelectedNodes = (targetEnvironment as List).clone.reverse.takeWhile[ it != selectedNodes.last ].toList.reverse diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend index 08787d5..587687a 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend @@ -36,43 +36,3 @@ class PatternParser { } } -/* - -class PatternParser { - @Inject static XtextResourceSet resourceSet - static Resource resource - static boolean initialized = false - - def static parse(String patternString) { - if (!initialized) { - resourceSet = (new RefJavaStandaloneSetup().createInjectorAndDoEMFRegistration()).getInstance(typeof(XtextResourceSet)) - resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE) - resource = resourceSet.createResource(URI.createURI("dummy:/patterns.refjava")) - initialized = true - println("ASDASD22") - } - - if (resource.loaded) { - resource.unload - resource.delete(newHashMap) - - println("loaded") - } - - val paddedPatternString = '''package p; local refactoring l() «patternString» ~ nothing''' - val inputStream = new ByteArrayInputStream(paddedPatternString.bytes) - resource.load(inputStream, resourceSet.loadOptions) - - val file = resource.contents.head as File - val refact = file.refactorings.head as SchemeInstanceRule - - println(refact.matchingPattern) - //resource.delete(newHashMap) - - return refact.matchingPattern - } -} - -*/ - - diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend index 046a8de..292a2ff 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend @@ -7,6 +7,7 @@ import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.common.types.JvmTypeReference import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jdt.core.dom.CompilationUnit class Utils { @@ -61,4 +62,13 @@ class Utils { } tmp as TypeDeclaration } + + def static getCompilationUnit(ASTNode node) { + var tmp = node + while (!(tmp instanceof CompilationUnit)) { + tmp = tmp.parent + } + tmp as CompilationUnit + } + } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext index bd40e58..289f832 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext @@ -118,6 +118,10 @@ PExpression returns PExpression: PMemberFeatureCall ; +PLambdaExpression returns PExpression: + {PLambdaExpression} 'lambda' expression=PMemberFeatureCall +; + PMemberFeatureCall returns PExpression: PPrimaryExpression ( =>({PMemberFeatureCall.memberCallTarget=current} ".") @@ -133,6 +137,7 @@ PPrimaryExpression returns PExpression | PFeatureCall | PReturnExpression | PTargetExpression + | PLambdaExpression | PNothingExpression | PMetaVariable | PTypeMetaVariable diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend index 4714e8b..1d3279c 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend @@ -57,7 +57,12 @@ class RefJavaTypeComputer extends XbaseTypeComputer { def dispatch computeTypes(TargetExpression targetExpr, ITypeComputationState state) { val astNodeType = getTypeForName(ASTNode, state) - state.acceptActualType(astNodeType) + + val listType = getTypeForName(List, state) as ParameterizedTypeReference + listType.addTypeArgument(astNodeType) + val type = listType + + state.acceptActualType(type) } From 010b799ab323eef42a2eb49a7ba4bfdfd48e6fb4 Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Mon, 6 Apr 2020 19:25:52 +0200 Subject: [PATCH 04/14] Getting all TypeDeclarations from workspace --- .../control/utils/SelectionNodeFinder.xtend | 1 - .../control/utils/TypeDeclarationGetter.xtend | 38 +++++++++++++++++++ .../control/wizards/RefJavaWizard.xtend | 9 +++-- 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 hu.elte.refjava.control/src/hu/elte/refjava/control/utils/TypeDeclarationGetter.xtend diff --git a/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/SelectionNodeFinder.xtend b/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/SelectionNodeFinder.xtend index 2eae168..5c410ae 100644 --- a/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/SelectionNodeFinder.xtend +++ b/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/SelectionNodeFinder.xtend @@ -36,5 +36,4 @@ class SelectionNodeFinder { def private static dispatch getChildren(ASTNode coveringNode) { #[coveringNode] } - } diff --git a/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/TypeDeclarationGetter.xtend b/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/TypeDeclarationGetter.xtend new file mode 100644 index 0000000..dd81037 --- /dev/null +++ b/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/TypeDeclarationGetter.xtend @@ -0,0 +1,38 @@ +package hu.elte.refjava.control.utils + +import org.eclipse.core.resources.ResourcesPlugin +import org.eclipse.jdt.core.dom.TypeDeclaration +import java.util.List +import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.JavaCore +import org.eclipse.jdt.core.dom.ASTParser +import org.eclipse.jdt.core.dom.AST + +class TypeDeclarationGetter { + def static getAllTypeDeclarationInWorkspace() { + val workspace = ResourcesPlugin.workspace + val root = workspace.root + val projects = root.projects + + val List allTypeDeclInWorkSpace = newArrayList + for (project : projects) { + val javaProject = JavaCore.create(project) + val packages = javaProject.getPackageFragments() + for (package : packages) { + val iCompUnits = package.compilationUnits + val List allCompUnit = newArrayList + for (iCompUnit : iCompUnits) { + val parser = ASTParser.newParser(AST.JLS12); + parser.source = iCompUnit; + val compUnit = parser.createAST(null) as CompilationUnit; + allCompUnit.add(compUnit) + } + + for (compUnit : allCompUnit) { + allTypeDeclInWorkSpace.addAll(compUnit.types) + } + } + } + allTypeDeclInWorkSpace + } +} \ No newline at end of file diff --git a/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend b/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend index d997df6..f2e8027 100644 --- a/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend +++ b/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend @@ -2,6 +2,7 @@ package hu.elte.refjava.control.wizards import hu.elte.refjava.api.Refactoring import hu.elte.refjava.control.utils.SelectionNodeFinder +import hu.elte.refjava.control.utils.TypeDeclarationGetter import java.net.URLClassLoader import org.eclipse.jdt.core.ICompilationUnit import org.eclipse.jdt.core.dom.AST @@ -42,10 +43,12 @@ class RefJavaWizard extends Wizard { val editor = PlatformUI.workbench.activeWorkbenchWindow.activePage.activeEditor if (editor instanceof ITextEditor) { - + val selection = editor.selectionProvider.selection if (selection instanceof TextSelection) { - + + val allTypeDeclarationInWorkSpace = TypeDeclarationGetter.allTypeDeclarationInWorkspace + val typeRoot = JavaUI.getEditorInputTypeRoot(editor.editorInput) val iCompUnit = typeRoot.getAdapter(ICompilationUnit) @@ -59,7 +62,7 @@ class RefJavaWizard extends Wizard { val provider = editor.documentProvider val document = provider.getDocument(editor.editorInput) - refactoringInstance.init(selectedNodes, document, iCompUnit) + refactoringInstance.init(selectedNodes, document, allTypeDeclarationInWorkSpace) val status = refactoringInstance.apply switch status { case SUCCESS: From 5f8ec7648846a2414376472a05d4d2bf72d4143d Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Thu, 16 Apr 2020 19:27:04 +0200 Subject: [PATCH 05/14] Class and lambda refactoring checks & some code refactoring --- .../control/utils/TypeDeclarationGetter.xtend | 13 +- .../elte/refjava/api/BlockRefactoring.xtend | 8 +- .../src/hu/elte/refjava/api/Check.xtend | 631 ++++++++++++++++-- .../elte/refjava/api/ClassRefactoring.xtend | 163 +++-- .../elte/refjava/api/LambdaRefactoring.xtend | 144 ++-- .../elte/refjava/api/LocalRefactoring.xtend | 8 +- .../src/hu/elte/refjava/api/Refactoring.xtend | 9 +- .../refjava/api/patterns/ASTBuilder.xtend | 77 ++- .../refjava/api/patterns/PatternMatcher.xtend | 78 ++- .../hu/elte/refjava/api/patterns/Utils.xtend | 47 +- .../src/hu/elte/refjava/lang/RefJava.xtext | 42 +- .../jvmmodel/RefJavaJvmModelInferrer.xtend | 48 +- 12 files changed, 939 insertions(+), 329 deletions(-) diff --git a/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/TypeDeclarationGetter.xtend b/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/TypeDeclarationGetter.xtend index dd81037..3bdecf5 100644 --- a/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/TypeDeclarationGetter.xtend +++ b/hu.elte.refjava.control/src/hu/elte/refjava/control/utils/TypeDeclarationGetter.xtend @@ -9,11 +9,11 @@ import org.eclipse.jdt.core.dom.ASTParser import org.eclipse.jdt.core.dom.AST class TypeDeclarationGetter { - def static getAllTypeDeclarationInWorkspace() { + def static getAllTypeDeclarationInWorkspace() { val workspace = ResourcesPlugin.workspace val root = workspace.root val projects = root.projects - + val List allTypeDeclInWorkSpace = newArrayList for (project : projects) { val javaProject = JavaCore.create(project) @@ -23,13 +23,14 @@ class TypeDeclarationGetter { val List allCompUnit = newArrayList for (iCompUnit : iCompUnits) { val parser = ASTParser.newParser(AST.JLS12); + parser.resolveBindings = true parser.source = iCompUnit; val compUnit = parser.createAST(null) as CompilationUnit; allCompUnit.add(compUnit) - } - - for (compUnit : allCompUnit) { - allTypeDeclInWorkSpace.addAll(compUnit.types) + } + + for (compUnit : allCompUnit) { + allTypeDeclInWorkSpace.addAll(compUnit.types) } } } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend index 11923ba..daaa587 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend @@ -3,12 +3,10 @@ package hu.elte.refjava.api import hu.elte.refjava.api.patterns.ASTBuilder import hu.elte.refjava.api.patterns.PatternMatcher import hu.elte.refjava.api.patterns.PatternParser -import java.lang.reflect.Type import java.util.List -import java.util.Map import org.eclipse.jdt.core.dom.ASTNode -import org.eclipse.jface.text.IDocument import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jface.text.IDocument class BlockRefactoring implements Refactoring { @@ -17,10 +15,6 @@ class BlockRefactoring implements Refactoring { val PatternMatcher matcher val ASTBuilder builder - protected val Map> bindings = newHashMap - protected val Map nameBindings = newHashMap - protected val Map typeBindings = newHashMap - protected val Map>> parameterBindings = newHashMap protected String matchingTypeReferenceString protected String replacementTypeReferenceString protected String targetTypeReferenceString diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend index 00e49ef..cfba797 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend @@ -1,34 +1,32 @@ package hu.elte.refjava.api +import hu.elte.refjava.api.patterns.Utils +import java.lang.reflect.Modifier import java.util.List +import java.util.Queue import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.ASTVisitor +import org.eclipse.jdt.core.dom.ArrayType import org.eclipse.jdt.core.dom.Block +import org.eclipse.jdt.core.dom.ClassInstanceCreation +import org.eclipse.jdt.core.dom.ExpressionStatement +import org.eclipse.jdt.core.dom.FieldDeclaration +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.core.dom.Name +import org.eclipse.jdt.core.dom.QualifiedName import org.eclipse.jdt.core.dom.SimpleName +import org.eclipse.jdt.core.dom.SingleVariableDeclaration import org.eclipse.jdt.core.dom.Statement +import org.eclipse.jdt.core.dom.Type +import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jdt.core.dom.VariableDeclarationFragment import org.eclipse.jdt.core.dom.VariableDeclarationStatement -import java.lang.reflect.Type -import org.eclipse.jdt.core.dom.FieldDeclaration -import org.eclipse.jdt.core.dom.TypeDeclaration -import org.eclipse.jdt.core.dom.MethodDeclaration -import org.eclipse.jdt.core.dom.SingleVariableDeclaration -import hu.elte.refjava.api.patterns.Utils -import java.lang.reflect.Modifier class Check { - //for testing - def static getTypeOf(Type type) { - return type - } - - def static returnIntParameter() { - val List> asd = newArrayList - asd.add(new Pair(typeof(char), "x")) - asd.add(new Pair(typeof(char), "y")) - return asd - } + public static List allTypeDeclarationInWorkSpace //actual def static isInsideBlock(ASTNode node) { @@ -44,12 +42,7 @@ class Check { } def dispatch static isVariableDeclaration(List nodes) { - for (node : nodes) { - if( !(node instanceof VariableDeclarationStatement) ) { - return false - } - } - return true + nodes.forall[it instanceof VariableDeclarationStatement] } def dispatch static asVariableDeclaration(ASTNode node) { @@ -104,20 +97,137 @@ class Check { varDeclList.forall[!isReferencedIn(nodes)] } - //class refact - field lifting - def static enclosingClass(List target) { - Utils.getTypeDeclaration(target.head) + + //lambda checks + def static isFresh(String name) { + !allTypeDeclarationInWorkSpace.exists[it.name.identifier == name] } - def static superClass(TypeDeclaration typeDecl) { - - + def static generateNewName() { + var int i = 1 + var newName = "newLambda" + while(!isFresh(newName)) { + newName = "newLambda" + i++ + } + newName + } + + def static references(TypeDeclaration typeDecl) { + val List refs = newArrayList + val binding = typeDecl.name.resolveBinding - val compUnit = Utils.getCompilationUnit(typeDecl) - val superClassType = typeDecl.superclassType - compUnit.types.findFirst[(it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + allTypeDeclarationInWorkSpace.forEach[ + val visitor = new ASTVisitor() { + override visit(SimpleName name) { + if (name.resolveBinding.isEqualTo(binding) && name != typeDecl.name) { + refs.add(name) + } + return true + } + } + it.accept(visitor) + ] + refs + } + + def static contains(List references, List target) { + if(target.head instanceof ExpressionStatement && + (target.head as ExpressionStatement).expression instanceof MethodInvocation && + ((target.head as ExpressionStatement).expression as MethodInvocation).expression instanceof ClassInstanceCreation && + (((target.head as ExpressionStatement).expression as MethodInvocation).expression as ClassInstanceCreation).anonymousClassDeclaration !== null ) { + + for(refs : references) { + if( (refs as SimpleName).resolveBinding.isEqualTo( (((target.head as ExpressionStatement).expression as MethodInvocation).expression as ClassInstanceCreation).type.resolveBinding) ) { + return true + } + } + } + return false + } + + //method or field property getters + def static String getMethodName(List target) { + if (target.head instanceof MethodDeclaration) { + (target.head as MethodDeclaration).name.identifier + } + } + + def static List getFragmentNames(List target) { + if(target.head instanceof FieldDeclaration) { + val fragments = (target.head as FieldDeclaration).fragments as List + var List fragmentNames = newArrayList + for(fragment : fragments) { + fragmentNames.add(fragment.name.identifier) + } + fragmentNames + } + } + + def dispatch static type(MethodDeclaration methodDecl) { + methodDecl.returnType2 + } + + def dispatch static type(FieldDeclaration fieldDecl) { + fieldDecl.type + } + + def dispatch static Type type(List target) { + if (target.head instanceof MethodDeclaration) { + type(target.head) + } else if (target.head instanceof FieldDeclaration) { + type(target.head) + } + } + + def dispatch static visibility(FieldDeclaration fieldDecl) { + val modifiers = fieldDecl.getModifiers + switch modifiers { + case modifiers.bitwiseAnd(Modifier.PUBLIC) > 0 : "public" + case modifiers.bitwiseAnd(Modifier.PRIVATE) > 0 : "private" + case modifiers.bitwiseAnd(Modifier.PROTECTED) > 0 : "protected" + case modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 : "default" + } } + def dispatch static visibility(MethodDeclaration methodDecl) { + val modifiers = methodDecl.getModifiers + switch modifiers { + case modifiers.bitwiseAnd(Modifier.PUBLIC) > 0 : "public" + case modifiers.bitwiseAnd(Modifier.PRIVATE) > 0 : "private" + case modifiers.bitwiseAnd(Modifier.PROTECTED) > 0 : "protected" + case modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 : "default" + } + } + + def dispatch static String visibility(List target) { + if(target.head instanceof MethodDeclaration) { + visibility(target.head as MethodDeclaration) + } else if (target.head instanceof FieldDeclaration) { + visibility(target.head as FieldDeclaration) + } + } + + def dispatch static parameters(List target) { + if(target.head instanceof MethodDeclaration) { + (target.head as MethodDeclaration).parameters as List + } + } + + def dispatch static parameters(MethodDeclaration methodDecl) { + methodDecl.parameters as List + } + + + + //class checks + def static enclosingClass(List target) { + val typeDecl = Utils.getTypeDeclaration(target.head) + allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] + } + + def static superClass(TypeDeclaration typeDecl) { + allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.superclassType.resolveBinding.qualifiedName] + } def static hasSuperClass(TypeDeclaration typeDecl) { return typeDecl.superclassType !== null @@ -132,21 +242,19 @@ class Check { } def static references(List target, TypeDeclaration typeDecl) { + val bodyDeclarations = typeDecl.bodyDeclarations + val List refs = newArrayList + if (target.head instanceof FieldDeclaration) { val fieldDecl = target.head as FieldDeclaration val fragments = fieldDecl.fragments as List - val bodyDeclarations = typeDecl.bodyDeclarations - val List refs = newArrayList for(fragment : fragments) { val binding = fragment.resolveBinding for(declaration : bodyDeclarations) { - val visitor = new ASTVisitor() { override visit(SimpleName name) { - if (name.resolveBinding.equals(binding) && name != fragment.name) { - println(name.parent) - - refs.add(name.parent) + if (name.resolveBinding.isEqualTo(binding) && name != fragment.name) { + refs.add(name) } return true } @@ -154,60 +262,60 @@ class Check { (declaration as ASTNode).accept(visitor) } } - refs } else if (target.head instanceof MethodDeclaration) { val methodDecl = target.head as MethodDeclaration - val bodyDeclarations = typeDecl.bodyDeclarations - val List refs = newArrayList val binding = methodDecl.resolveBinding for(declaration : bodyDeclarations) { val visitor = new ASTVisitor() { override visit(SimpleName name) { - if (name.resolveBinding.equals(binding) && name != methodDecl.name) { - refs.add(name.parent) + if (name.resolveBinding.isEqualTo(binding) && name != methodDecl.name) { + refs.add(name) } return true } } (declaration as ASTNode).accept(visitor) } - refs } + refs } - def static isUniqueFieldIn(List target, TypeDeclaration typeDecl) { - val fieldDecl = target.head as FieldDeclaration - - !typeDecl.bodyDeclarations.exists[ - it instanceof FieldDeclaration && - ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier + def private static isUniqueFieldIn(String fragmentName, TypeDeclaration typeDecl) { + typeDecl.bodyDeclarations.filter[it instanceof FieldDeclaration].forall[ + !((it as FieldDeclaration).fragments as List).exists[ + it.name.identifier == fragmentName + ] ] } - def static isUniqueMethodIn(List target, TypeDeclaration typeDecl) { - val methodDecl = target.head as MethodDeclaration - - val methodsWithSameNameAndAmountOfParameter = typeDecl.bodyDeclarations.filter[ - it instanceof MethodDeclaration && (it as MethodDeclaration).name.identifier == methodDecl.name.identifier - && (it as MethodDeclaration).parameters.size == methodDecl.parameters.size + def static isUniqueFieldIn(List fragmentNames, TypeDeclaration typeDecl) { + fragmentNames.forall[ + isUniqueFieldIn(it, typeDecl) ] - if(methodsWithSameNameAndAmountOfParameter.size > 0) { - if(methodDecl.parameters.size == 0) { - false - } else { - for(var int i = 0; i < methodsWithSameNameAndAmountOfParameter.size; i++) { - for (var int j = 0; i < methodDecl.parameters.size; i++) { - val methodParameter = (methodsWithSameNameAndAmountOfParameter.get(i) as MethodDeclaration).parameters.get(j) as SingleVariableDeclaration - if ( (methodDecl.parameters.get(j) as SingleVariableDeclaration).type.toString != methodParameter.type.toString) { - return true - } - } + } + + def static isUniqueMethodIn(String methodName, List parameters, TypeDeclaration typeDecl) { + val methodsInClass = typeDecl.bodyDeclarations.filter[it instanceof MethodDeclaration] + + for (method : methodsInClass) { + if ((method as MethodDeclaration).name.identifier == methodName && parameters.size == ((method as MethodDeclaration).parameters.size)) { + if (parameters.size == 0) { + return false + } + + val it1 = parameters.iterator + val it2 = ((method as MethodDeclaration).parameters as List).iterator + var boolean l = true + while(it1.hasNext && l) { + l = it1.next.type.toString == it2.next.type.toString + } + + if (l) { + return false } - false } - } else { - true } + true } def static accessedFieldsOfEnclosingClass(List target, TypeDeclaration typeDecl) { @@ -225,7 +333,7 @@ class Check { public var found = false override visit(SimpleName name) { - if(name.resolveBinding.equals(binding)) { + if(name.resolveBinding.isEqualTo(binding)) { found = true return false } @@ -256,7 +364,7 @@ class Check { public var found = false override visit(SimpleName name) { - if(name.resolveBinding.equals(binding) && name != methodDecl.name) { + if(name.resolveBinding.isEqualTo(binding) && name != methodDecl.name) { found = true return false } @@ -273,6 +381,381 @@ class Check { accessedMethods } + def static isOverrideIn(String methodName, List parameters, TypeDeclaration typeDecl){ + var superClassToCheck = typeDecl + var found = false + + while (superClassToCheck.hasSuperClass && !found) { + superClassToCheck = superClassToCheck.superClass + found = !isUniqueMethodIn(methodName, parameters, superClassToCheck) && !Modifier.isPrivate(getMethodFromClass(methodName, parameters, superClassToCheck).getModifiers) + } + found + } + + def static overridenMethodFrom(String methodName, List parameters, TypeDeclaration typeDecl) { + var superClassToCheck = typeDecl + var found = false + var MethodDeclaration method + while (superClassToCheck.hasSuperClass && !found) { + superClassToCheck = superClassToCheck.superClass + if(!isUniqueMethodIn(methodName, parameters, superClassToCheck)) { + found = true + method = getMethodFromClass(methodName, parameters, superClassToCheck) + } + } + method + } + + def private static getMethodFromClass(String methodName, List parameters, TypeDeclaration typeDecl) { + val methodsInClass = typeDecl.bodyDeclarations.filter[it instanceof MethodDeclaration] + var MethodDeclaration result + + for(method : methodsInClass) { + if ((method as MethodDeclaration).name.identifier == methodName && parameters.size == ((method as MethodDeclaration).parameters.size)) { + if(parameters.size == 0) { + result = method as MethodDeclaration + } + + val it1 = parameters.iterator + val it2 = ((method as MethodDeclaration).parameters as List).iterator + var boolean l = true + while(it1.hasNext && l) { + l = it1.next.type.toString == it2.next.type.toString + } + + if (l) { + result = method as MethodDeclaration + } + } + } + result + } + + def static isLessVisible(String targetVisibility, String actualVisibility) { + if ( + (actualVisibility == "public" && (targetVisibility == "private" || targetVisibility == "default" || targetVisibility == "protected")) || + actualVisibility == "protected" && (targetVisibility == "private" || targetVisibility == "default") || + actualVisibility == "default" && (targetVisibility == "private") ) { + true + } else { + false + } + } + + def private static isSubClassOf(ITypeBinding targetType, ITypeBinding actualType) { + var tmp = targetType + var boolean l = targetType.isEqualTo(actualType) + while (tmp.superclass !== null && !l) { + tmp = tmp.superclass + l = tmp.isEqualTo(actualType) + } + return l + } + + def static isSubTypeOf(Type targetType, Type actualType) { + if (targetType.isPrimitiveType && actualType.isPrimitiveType) { + targetType.toString == actualType.toString + } else if (targetType.arrayType && actualType.arrayType) { + if ((targetType as ArrayType).getDimensions != (actualType as ArrayType).getDimensions ) { + false + } else { + if((targetType as ArrayType).elementType.isPrimitiveType && (actualType as ArrayType).elementType.isPrimitiveType) { + (targetType as ArrayType).elementType.toString == (actualType as ArrayType).elementType.toString + } else { + targetType.resolveBinding.isSubClassOf(actualType.resolveBinding) + } + } + } else if (targetType.simpleType && actualType.simpleType) { + targetType.resolveBinding.isSubClassOf(actualType.resolveBinding) + } else { + false + } + } + + + + //needs work + + /* + def private static subClasses(TypeDeclaration typeDecl) { + val typeBinding = typeDecl.resolveBinding + val List subClasses = newArrayList + for (t : allTypeDeclarationInWorkSpace) { + if(t.superclassType !== null && t.superclassType.resolveBinding.qualifiedName == typeBinding.qualifiedName) { + subClasses.add(t) + } + } + subClasses + } + + def static visibilityFrom(String fieldName, TypeDeclaration typeDecl) { + val typeBinding = typeDecl.resolveBinding + val targetType = allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeBinding.qualifiedName] + + val List result = newArrayList + result.add(targetType) + + val Queue typeDeclarationsToCheck = newLinkedList + + typeDeclarationsToCheck.addAll(typeDecl.subClasses) + + while(!typeDeclarationsToCheck.empty) { + val typeToCheck = typeDeclarationsToCheck.remove + + if(!typeToCheck.bodyDeclarations.exists[it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == fieldName]) { + result.add(typeToCheck) + typeDeclarationsToCheck.addAll(typeToCheck.subClasses) + } + } + result + }*/ + + def private static getTypeOfFieldOrVarDeclOfName(Name name, TypeDeclaration typeDecl) { + + val binding = if (name instanceof QualifiedName) { + name.qualifier.resolveBinding + } else if (name instanceof SimpleName) { + name.resolveBinding + } + + + val List asd = newArrayList + typeDecl.bodyDeclarations.exists[ + val visitor = new ASTVisitor() { + public var boolean found = false + + override visit(SimpleName name) { + if(name.resolveBinding.isEqualTo(binding) && (Utils.getFieldDeclaration(name) !== null || Utils.getVariableDeclaration(name) !== null) ) { + found = true + if(Utils.getFieldDeclaration(name) !== null) { + asd.add(Utils.getFieldDeclaration(name)) + } else { + asd.add(Utils.getVariableDeclaration(name)) + } + + return false + } + return true + } + } + (it as ASTNode).accept(visitor) + return visitor.found + ] + + if(!asd.empty && asd.get(0) instanceof FieldDeclaration) { + return (asd.get(0) as FieldDeclaration).type + } else if (!asd.empty && asd.get(0) instanceof VariableDeclarationStatement) { + return (asd.get(0) as VariableDeclarationStatement).type + } + } + + def static referredField(ASTNode reference) { + + val binding = (reference as SimpleName).resolveBinding + + for(typeDecl : allTypeDeclarationInWorkSpace) { + for (declaration : typeDecl.bodyDeclarations) { + if(declaration instanceof FieldDeclaration && ((declaration as FieldDeclaration).fragments as List).exists[it.resolveBinding.isEqualTo(binding)] ) { + return declaration as FieldDeclaration + } + } + } + + //error + } + + def static private referencesThatCanGetViolated(String fragmentName, TypeDeclaration typeDecl) { + val List references = newArrayList + var TypeDeclaration superclassWithSameField = allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] + var boolean found = false + while(superclassWithSameField.hasSuperClass && !found) { + superclassWithSameField = superclassWithSameField.superClass + found = !isUniqueFieldIn(fragmentName, superclassWithSameField) + } + + if (!found) { + return references + } + + val fieldInSuperClass = superclassWithSameField.bodyDeclarations.findFirst[ + it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments as List).exists[ + it.name.identifier == fragmentName + ] + ] as FieldDeclaration + + + val List a = newArrayList + a.add(fieldInSuperClass) + + for (t : allTypeDeclarationInWorkSpace) { + val refs = references(a, t) + for (r : refs) { + val refTypeDecl = Utils.getTypeDeclaration(r) + if (refTypeDecl.resolveBinding.isEqualTo(typeDecl.resolveBinding) || + refTypeDecl.resolveBinding.isSubClassOf(typeDecl.resolveBinding) || + (r.parent instanceof QualifiedName && (getTypeOfFieldOrVarDeclOfName(r.parent as QualifiedName, refTypeDecl).resolveBinding.isEqualTo(typeDecl.resolveBinding) || + getTypeOfFieldOrVarDeclOfName(r.parent as QualifiedName, refTypeDecl).resolveBinding.isSubClassOf(typeDecl.resolveBinding))) ) { + + references.add(r) + } + } + } + references + } + + def private static referencesThatCanGetViolated(String methodName, List methodParameters, TypeDeclaration typeDecl) { + val List references = newArrayList + var TypeDeclaration superclassWithSameField = allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] + var boolean found = false + while(superclassWithSameField.hasSuperClass && !found) { + superclassWithSameField = superclassWithSameField.superClass + found = !isUniqueMethodIn(methodName, methodParameters, superclassWithSameField) + } + + if (!found) { + return references + } + + val methodInSuperClass = getMethodFromClass(methodName, methodParameters, superclassWithSameField) + val List a = newArrayList + a.add(methodInSuperClass) + + for (t : allTypeDeclarationInWorkSpace) { + val refs = references(a, t) + for (r : refs) { + val refTypeDecl = Utils.getTypeDeclaration(r) + if (refTypeDecl.resolveBinding.isEqualTo(typeDecl.resolveBinding) || + refTypeDecl.resolveBinding.isSubClassOf(typeDecl.resolveBinding) || + ( (r.parent as MethodInvocation).expression !== null && (getTypeOfFieldOrVarDeclOfName((r.parent as MethodInvocation).expression as Name, refTypeDecl).resolveBinding.isEqualTo(typeDecl.resolveBinding) || + getTypeOfFieldOrVarDeclOfName((r.parent as MethodInvocation).expression as Name, refTypeDecl).resolveBinding.isSubClassOf(typeDecl.resolveBinding))) ) { + + references.add(r) + } + } + } + references + } + + def private static references(String whichReferences, List fragmentNames, TypeDeclaration targetTypeDecl) { + val List publicReferences = newArrayList + val List privateReferences = newArrayList + + for(fragmentName : fragmentNames) { + val allReferences = referencesThatCanGetViolated(fragmentName, targetTypeDecl) + val Queue methodsToCheck = newLinkedList + + for(ref : allReferences) { + if(Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility != "private") { + publicReferences.add(ref) + } else if (Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility == "private"){ + methodsToCheck.add(Utils.getMethodDeclaration(ref)) + + while(!methodsToCheck.empty) { + val method = methodsToCheck.remove + + var List methodRefs = newArrayList + for (t : allTypeDeclarationInWorkSpace) { + val List tmp = newArrayList + tmp.add(method) + methodRefs.addAll(references(tmp, t)) + } + if(!methodRefs.empty) { + for(methodRef : methodRefs) { + if(Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility != "private") { + publicReferences.add(ref) + } else if (Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility == "private") { + methodsToCheck.add(Utils.getMethodDeclaration(methodRef)) + } else if(Utils.getMethodDeclaration(methodRef) === null) { + publicReferences.add(ref) + } + } + } else { + if(!privateReferences.exists[it == ref]) { + privateReferences.add(ref) + } + } + } + } else if(Utils.getMethodDeclaration(ref) === null) { + publicReferences.add(ref) + } + } + } + + if(whichReferences == "public") { + return publicReferences + } else if(whichReferences == "private") { + return privateReferences + } + } + + def private static references(String whichReferences, String methodName, List methodParameters,TypeDeclaration targetTypeDecl) { + val List publicReferences = newArrayList + val List privateReferences = newArrayList + + val allReferences = referencesThatCanGetViolated(methodName, methodParameters, targetTypeDecl) + val Queue methodsToCheck = newLinkedList + + for(ref : allReferences) { + if(Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility != "private") { + publicReferences.add(ref) + } else if (Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility == "private"){ + methodsToCheck.add(Utils.getMethodDeclaration(ref)) + + while(!methodsToCheck.empty) { + val method = methodsToCheck.remove + + var List methodRefs = newArrayList + for (t : allTypeDeclarationInWorkSpace) { + val List tmp = newArrayList + tmp.add(method) + methodRefs.addAll(references(tmp, t)) + } + if(!methodRefs.empty) { + for(methodRef : methodRefs) { + if(Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility != "private") { + publicReferences.add(ref) + } else if (Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility == "private") { + methodsToCheck.add(Utils.getMethodDeclaration(methodRef)) + } else if(Utils.getMethodDeclaration(methodRef) === null) { + publicReferences.add(ref) + } + } + } else { + if(!privateReferences.exists[it == ref]) { + privateReferences.add(ref) + } + } + } + } else if(Utils.getMethodDeclaration(ref) === null) { + publicReferences.add(ref) + } + } + + if(whichReferences == "public") { + return publicReferences + } else if(whichReferences == "private") { + return privateReferences + } + } + + + + + + def static publicReferences(List fragmentNames, TypeDeclaration targetTypeDecl) { + references("public", fragmentNames, targetTypeDecl) + } + + def static publicReferences(String methodName, List methodParameters, TypeDeclaration targetTypeDeclaration) { + references("public", methodName, methodParameters, targetTypeDeclaration) + } + + def static privateReferences(List fragmentNames, TypeDeclaration targetTypeDecl) { + references("private", fragmentNames, targetTypeDecl) + } + + + diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend index 4fa3b87..7f7c108 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend @@ -4,21 +4,21 @@ import hu.elte.refjava.api.patterns.ASTBuilder import hu.elte.refjava.api.patterns.PatternMatcher import hu.elte.refjava.api.patterns.PatternParser import hu.elte.refjava.api.patterns.Utils -import java.lang.reflect.Type +import hu.elte.refjava.lang.refJava.PMethodDeclaration import java.util.List -import java.util.Map import org.eclipse.jdt.core.ICompilationUnit +import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.ASTParser +import org.eclipse.jdt.core.dom.CompilationUnit import org.eclipse.jdt.core.dom.FieldDeclaration import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jdt.core.dom.VariableDeclarationFragment -import org.eclipse.jface.text.IDocument -import org.eclipse.jdt.core.dom.ASTParser -import org.eclipse.jdt.core.dom.CompilationUnit -import org.eclipse.jdt.core.dom.AST -import org.eclipse.jface.text.IRewriteTarget import org.eclipse.jface.text.Document +import org.eclipse.jface.text.IDocument + +import static hu.elte.refjava.api.Check.* class ClassRefactoring implements Refactoring { @@ -26,28 +26,39 @@ class ClassRefactoring implements Refactoring { List typeDeclList IDocument document - val PatternMatcher matcher val ASTBuilder builder val String matchingString val String replacementString + val RefactoringType refactoringType protected String targetString protected String definitionString - protected val Map> bindings = newHashMap - protected val Map nameBindings = newHashMap - protected val Map typeBindings = newHashMap - protected val Map>> parameterBindings = newHashMap protected String matchingTypeReferenceString protected String replacementTypeReferenceString protected String targetTypeReferenceString protected String definitionTypeReferenceString List replacement + enum RefactoringType { + NEW_METHOD, + METHOD_LIFT, + FIELD_LIFT + } + protected new(String matchingPatternString, String replacementPatternString) { matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) this.matchingString = matchingPatternString this.replacementString = replacementPatternString + this.refactoringType = if(replacementPatternString != "nothing") { + RefactoringType.NEW_METHOD + } else { + if(PatternParser.parse(matchingPatternString).patterns.head instanceof PMethodDeclaration) { + RefactoringType.METHOD_LIFT + } else { + RefactoringType.FIELD_LIFT + } + } } override init(List target, IDocument document, List allTypeDeclInWorkspace) { @@ -124,26 +135,99 @@ class ClassRefactoring implements Refactoring { } def protected check() { - //TODO - if(replacementString != "-") { - //return Check.isUniqueMethodIn(target, Check.enclosingClass(target)) + + Check.allTypeDeclarationInWorkSpace = typeDeclList + + if (replacementString == "nothing" && definitionString == "target" && matchingString == "target") { + definitionString = targetString + definitionTypeReferenceString = targetTypeReferenceString + } else if (replacementString == "nothing" && definitionString == "target" && matchingString != "target") { + definitionString = matchingString + definitionTypeReferenceString = matchingTypeReferenceString + } + + if(refactoringType == RefactoringType.NEW_METHOD) { - return true + val compUnit = Utils.getCompilationUnit(target.head) + val iCompUnit = compUnit.getJavaElement() as ICompilationUnit + + val parser = ASTParser.newParser(AST.JLS12); + parser.resolveBindings = true + parser.source = iCompUnit; + val newCompUnit = parser.createAST(null) as CompilationUnit; + newCompUnit.recordModifications + + val definitionPattern = PatternParser.parse(definitionString) + val newMethod = builder.build(definitionPattern, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head + + val targetClass = newCompUnit.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == Utils.getTypeDeclaration(target.head).resolveBinding.qualifiedName ] as TypeDeclaration + targetClass.bodyDeclarations.add(newMethod) + + val edits2 = newCompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true)) + edits2.apply(document) + val newSource = document.get; + iCompUnit.getBuffer().setContents(newSource); + + val parser2 = ASTParser.newParser(AST.JLS12); + parser2.resolveBindings = true + parser2.source = iCompUnit + val newCompUnit2 = parser2.createAST(null) as CompilationUnit; + + val targetClass2 = newCompUnit2.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == Utils.getTypeDeclaration(target.head).resolveBinding.qualifiedName] as TypeDeclaration + val newMethodInClass = targetClass2.bodyDeclarations.findFirst[it instanceof MethodDeclaration && (it as MethodDeclaration).name.identifier == (newMethod as MethodDeclaration).name.identifier] as MethodDeclaration + + val List definition = newArrayList + definition.add(newMethodInClass) + + val safeCheck = Check.isUniqueMethodIn(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)) + && if(Check.isOverrideIn(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target))) { + !Check.isLessVisible(Check.visibility(definition), Check.visibility(Check.overridenMethodFrom(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)))) + && Check.isSubTypeOf(Check.type(definition), Check.type(Check.overridenMethodFrom(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)))) + && Check.visibility(Check.overridenMethodFrom(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target))) != "public" + && Check.publicReferences(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)).empty + && false + } else { + true + } + + newCompUnit2.recordModifications + targetClass2.bodyDeclarations.remove(newMethodInClass) + + val edits3 = newCompUnit2.rewrite(document, iCompUnit.javaProject.getOptions(true)) + edits3.apply(document) + val newSource2 = document.get; + iCompUnit.getBuffer().setContents(newSource2); + return safeCheck } else { - if(target.head instanceof MethodDeclaration) { + if(refactoringType == RefactoringType.METHOD_LIFT) { + return Check.hasSuperClass(Check.enclosingClass(target)) && if (Check.isPrivate(target)) Check.references(target, Check.enclosingClass(target)).empty else true && Check.accessedFieldsOfEnclosingClass(target, Check.enclosingClass(target)).empty && Check.accessedMethodsOfEnclosingClass(target, Check.enclosingClass(target)).empty - // && Check.isUniqueMethodIn(target, Check.superClass(Check.enclosingClass(target))) + && Check.isUniqueMethodIn(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))) + && if(Check.isOverrideIn(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target)))) { + !Check.isLessVisible(Check.visibility(target), Check.visibility(Check.overridenMethodFrom(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))))) + && Check.isSubTypeOf(Check.type(target), Check.type(Check.overridenMethodFrom(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))))) + && Check.visibility(Check.overridenMethodFrom(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target)))) != "public" + && Check.publicReferences(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))).empty + + + } else { + true + } + //TODO + } else if (refactoringType == RefactoringType.FIELD_LIFT) { - } else if (target.head instanceof FieldDeclaration) { return Check.hasSuperClass(Check.enclosingClass(target)) && if (Check.isPrivate(target)) Check.references(target, Check.enclosingClass(target)).empty else true - // && Check.isUniqueFieldIn(target, Check.superClass(Check.enclosingClass(target))) + && Check.isUniqueFieldIn(Check.getFragmentNames(target), Check.superClass(Check.enclosingClass(target))) + && Check.publicReferences(Check.getFragmentNames(target), Check.superClass(Check.enclosingClass(target))).empty + && Check.privateReferences(Check.getFragmentNames(target), Check.superClass(Check.enclosingClass(target))).forall [ + Check.isSubTypeOf(Check.type(target), Check.referredField(it).type) ] } return false } @@ -151,8 +235,9 @@ class ClassRefactoring implements Refactoring { def private safeBuild() { try { - if(replacementString != "-") { - replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + if(refactoringType == RefactoringType.NEW_METHOD) { + val replacementPattern = PatternParser.parse(replacementString) + replacement = builder.build(replacementPattern, target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString) } } catch (Exception e) { println(e) @@ -163,9 +248,8 @@ class ClassRefactoring implements Refactoring { def private safeReplace() { try { - //we only need to replace if we creating a new method - if (replacement !== null) { + if (refactoringType == RefactoringType.NEW_METHOD) { val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] @@ -179,19 +263,12 @@ class ClassRefactoring implements Refactoring { val targetICompUnit = compUnit.getJavaElement() as ICompilationUnit val parser = ASTParser.newParser(AST.JLS12); + parser.resolveBindings = true parser.source = targetICompUnit; val targetCompUnit = parser.createAST(null) as CompilationUnit; targetCompUnit.recordModifications - if (replacementString == "-" && definitionString == "target" && matchingString == "target") { - definitionString = targetString - definitionTypeReferenceString = targetTypeReferenceString - } else if (replacementString == "-" && definitionString == "target" && matchingString != "target") { - definitionString = matchingString - definitionTypeReferenceString = matchingTypeReferenceString - } - val definitionPattern = PatternParser.parse(definitionString) var objectToInsertOrMove = builder.build(definitionPattern, targetCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head @@ -199,16 +276,22 @@ class ClassRefactoring implements Refactoring { val targetClass = targetCompUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.name.identifier ] as TypeDeclaration var CompilationUnit superCompUnit - var ICompilationUnit superICompUnit + var ICompilationUnit superICompUnit = null - if(replacement !== null) { + if(refactoringType == RefactoringType.NEW_METHOD) { targetClass.bodyDeclarations.add(objectToInsertOrMove) } else { val superClassType = targetTypeDeclaration.superclassType - + val superClassTypeBinding = superClassType.resolveBinding //needs work - var superClass = typeDeclList.findFirst[ (it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + var TypeDeclaration superClass + for(t : typeDeclList) { + if (t.resolveBinding.toString == superClassTypeBinding.toString) { + superClass = t + } + } + val compUnit2 = Utils.getCompilationUnit(superClass) superICompUnit = compUnit2.getJavaElement() as ICompilationUnit @@ -223,9 +306,9 @@ class ClassRefactoring implements Refactoring { } var Object methodOrFieldToDelete - if(target.head instanceof MethodDeclaration){ + if(refactoringType == RefactoringType.METHOD_LIFT){ methodOrFieldToDelete = targetClass.bodyDeclarations.findFirst[ it instanceof MethodDeclaration && (it as MethodDeclaration).name.identifier == (target.head as MethodDeclaration).name.identifier ] - } else if (target.head instanceof FieldDeclaration) { + } else if (refactoringType == RefactoringType.FIELD_LIFT) { methodOrFieldToDelete = targetClass.bodyDeclarations.findFirst[ it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == ((target.head as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier ] } @@ -238,14 +321,14 @@ class ClassRefactoring implements Refactoring { val newSource = document.get; targetICompUnit.getBuffer().setContents(newSource); - if(superICompUnit != targetICompUnit) { + + if(superICompUnit !== null && superICompUnit != targetICompUnit) { val superDocument = new Document(superICompUnit.source) val edits3 = superCompUnit.rewrite(superDocument, superICompUnit.javaProject.getOptions(true)) edits3.apply(superDocument) val superSource = superDocument.get superICompUnit.getBuffer().setContents(superSource) } - } catch (Exception e) { println(e) return false diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend index 4c17121..8af0c18 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend @@ -3,39 +3,45 @@ package hu.elte.refjava.api import hu.elte.refjava.api.patterns.ASTBuilder import hu.elte.refjava.api.patterns.PatternMatcher import hu.elte.refjava.api.patterns.PatternParser -import hu.elte.refjava.lang.refJava.PLambdaExpression -import java.lang.reflect.Type +import hu.elte.refjava.api.patterns.Utils +import hu.elte.refjava.lang.refJava.PConstructorCall +import hu.elte.refjava.lang.refJava.PMemberFeatureCall +import hu.elte.refjava.lang.refJava.PMetaVariable import java.util.List -import java.util.Map import org.eclipse.jdt.core.ICompilationUnit import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.ASTParser import org.eclipse.jdt.core.dom.CompilationUnit -import org.eclipse.jface.text.IDocument -import hu.elte.refjava.api.patterns.Utils import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jface.text.IDocument + +import static hu.elte.refjava.api.Check.* +import org.eclipse.jface.text.Document class LambdaRefactoring implements Refactoring { List target + List typeDeclList IDocument document val PatternMatcher matcher val ASTBuilder builder val String matchingString val String replacementString - val String refactoringType + val RefactoringType refactoringType + protected TypeDeclaration interfaceToModify protected String definitionString - protected val Map> bindings = newHashMap - protected val Map nameBindings = newHashMap - protected val Map typeBindings = newHashMap - protected val Map>> parameterBindings = newHashMap protected String matchingTypeReferenceString protected String replacementTypeReferenceString protected String targetTypeReferenceString protected String definitionTypeReferenceString List replacement + + enum RefactoringType { + MODIFICATION, + NEW + } protected new(String matchingPatternString, String replacementPatternString) { matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) @@ -43,16 +49,29 @@ class LambdaRefactoring implements Refactoring { val matchingPatternsFirstElement = PatternParser.parse(matchingPatternString).patterns.get(0) this.matchingString = matchingPatternString this.replacementString = replacementPatternString - this.refactoringType = if (matchingPatternsFirstElement instanceof PLambdaExpression) { - "modification" + if (matchingPatternsFirstElement instanceof PMemberFeatureCall && (matchingPatternsFirstElement as PMemberFeatureCall).memberCallTarget instanceof PConstructorCall && + ((matchingPatternsFirstElement as PMemberFeatureCall).memberCallTarget as PConstructorCall).anonInstance) { + this.refactoringType = RefactoringType.MODIFICATION } else { - "new" + this.interfaceToModify = null + this.refactoringType = RefactoringType.NEW } } override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document + this.typeDeclList = allTypeDeclInWorkspace + + if(refactoringType == RefactoringType.MODIFICATION) { + val matchingLambdaExpression = PatternParser.parse(matchingString).patterns.get(0) as PMemberFeatureCall + val interfaceName = if((matchingLambdaExpression.memberCallTarget as PConstructorCall).metaName !== null) { + nameBindings.get(((matchingLambdaExpression.memberCallTarget as PConstructorCall).metaName as PMetaVariable).name) + } else { + (matchingLambdaExpression.memberCallTarget as PConstructorCall).name + } + this.interfaceToModify = allTypeDeclInWorkspace.findFirst[it.name.identifier == interfaceName] + } } def setTarget(List newTarget) { @@ -84,8 +103,6 @@ class LambdaRefactoring implements Refactoring { target = matcher.modifiedTarget.toList bindings.putAll(matcher.bindings) - - return true } catch (Exception e) { println(e) @@ -125,18 +142,29 @@ class LambdaRefactoring implements Refactoring { } def protected check() { - //TODO - if(refactoringType == "new") { - println("new lambda expression") - + + Check.allTypeDeclarationInWorkSpace = typeDeclList + + if(refactoringType == RefactoringType.NEW) { + val replacementLambdaExpression = PatternParser.parse(replacementString).patterns.get(0) as PMemberFeatureCall + var boolean isMetaName = false + var String metaVarName + var String interfaceName + if((replacementLambdaExpression.memberCallTarget as PConstructorCall).metaName !== null) { + isMetaName = true + metaVarName = ((replacementLambdaExpression.memberCallTarget as PConstructorCall).metaName as PMetaVariable).name + } else { + interfaceName = (replacementLambdaExpression.memberCallTarget as PConstructorCall).name + } + return if (isMetaName) { nameBindings.put(metaVarName, Check.generateNewName) true } else { Check.isFresh(interfaceName) } && + true + //TODO } else { - println("lambda expression modification") - - + return Check.references(interfaceToModify).size == 1 && + Check.contains(Check.references(interfaceToModify), target) } - return true } def private safeBuild() { @@ -154,60 +182,52 @@ class LambdaRefactoring implements Refactoring { val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] - val group = rewrite.createGroupNode( replacement ) + val group = rewrite.createGroupNode(replacement) rewrite.replace( target.head, group, null) var edits = rewrite.rewriteAST(document, null) edits.apply(document) - val compUnit = Utils.getCompilationUnit(target.head) val iCompUnit= compUnit.getJavaElement() as ICompilationUnit val parser = ASTParser.newParser(AST.JLS12); + parser.resolveBindings = true parser.source = iCompUnit; - val newcompUnit = parser.createAST(null) as CompilationUnit; + val newCompUnit = parser.createAST(null) as CompilationUnit; - newcompUnit.recordModifications + newCompUnit.recordModifications + val replacementLambdaExpression = PatternParser.parse(replacementString).patterns.get(0) as PMemberFeatureCall - if(refactoringType == "new") { - println("create a new lambda and interface") - - val replacementLambdaExpression = PatternParser.parse(replacementString).patterns.get(0) as PLambdaExpression - val newInterface = builder.buildNewInterface(replacementLambdaExpression, newcompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) - newcompUnit.types().add(newInterface) - - + if(refactoringType == RefactoringType.NEW) { + //if we are defining a new lambda expression, we just simply add a new interface to the target document + val newInterface = builder.buildNewInterface(replacementLambdaExpression, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + newCompUnit.types.add(newInterface) } else { - println("get the existing interface and modify it") - - - } - - - /* - if(!compUnit.types.exists[ (it as TypeDeclaration).name.identifier == builder.newInterface.name.identifier]) { - val newInterface = compUnit.AST.newTypeDeclaration - newInterface.interface = true - newInterface.name.identifier = builder.newInterface.name.identifier - for(method : builder.newInterface.bodyDeclarations) { - val m = method as MethodDeclaration - val newMethodDeclaration = compUnit.AST.newMethodDeclaration - newMethodDeclaration.name.identifier = m.name.identifier - newMethodDeclaration.returnType2 = Utils.getTypeFromId(m.returnType2.toString, compUnit.AST) - newInterface.bodyDeclarations.add(newMethodDeclaration) - for(arg : m.parameters ) { - val a = arg as SingleVariableDeclaration - val methodParameterDeclaration = compUnit.AST.newSingleVariableDeclaration - methodParameterDeclaration.name.identifier = a.name.identifier - methodParameterDeclaration.type = Utils.getTypeFromId(a.type.toString, compUnit.AST) - newMethodDeclaration.parameters.add(methodParameterDeclaration) - } + //if we modifying an existing lambda expression, we have to find out where is the existing interface declaration on the workspace + val interfaceCompUnit = Utils.getCompilationUnit(interfaceToModify) + val interfaceICompUnit = interfaceCompUnit.getJavaElement() as ICompilationUnit + if(interfaceICompUnit != iCompUnit) { + //if the interface's document isn't the same as the target document, we are going to remove that interface from that document and then add the new + interfaceCompUnit.recordModifications + val newInterface = builder.buildNewInterface(replacementLambdaExpression, interfaceCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + interfaceCompUnit.types.remove(interfaceToModify) + interfaceCompUnit.types.add(newInterface) + + val interfaceDocument = new Document(interfaceICompUnit.source) + val edits3 = interfaceCompUnit.rewrite(interfaceDocument, interfaceICompUnit.javaProject.getOptions(true)) + edits3.apply(interfaceDocument) + val interfaceSource = interfaceDocument.get + interfaceICompUnit.getBuffer().setContents(interfaceSource) + } else { + //if the interface's document is the same as the target document, we just simply remove the interface from the target document and then add the new + val newInterface = builder.buildNewInterface(replacementLambdaExpression, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + val interfaceToRemove = newCompUnit.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == interfaceToModify.resolveBinding.qualifiedName] as TypeDeclaration + newCompUnit.types.remove(interfaceToRemove) + newCompUnit.types.add(newInterface) } - compUnit.types().add(newInterface) } - */ - val edits2 = newcompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true) ) + val edits2 = newCompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true) ) edits2.apply(document); val String newSource = document.get(); iCompUnit.getBuffer().setContents(newSource); diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend index be1eda2..508ab24 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend @@ -3,12 +3,10 @@ package hu.elte.refjava.api import hu.elte.refjava.api.patterns.ASTBuilder import hu.elte.refjava.api.patterns.PatternMatcher import hu.elte.refjava.api.patterns.PatternParser -import java.lang.reflect.Type import java.util.List -import java.util.Map import org.eclipse.jdt.core.dom.ASTNode -import org.eclipse.jface.text.IDocument import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jface.text.IDocument class LocalRefactoring implements Refactoring { @@ -17,10 +15,6 @@ class LocalRefactoring implements Refactoring { val PatternMatcher matcher val ASTBuilder builder - protected val Map> bindings = newHashMap - protected val Map nameBindings = newHashMap - protected val Map typeBindings = newHashMap - protected val Map>> parameterBindings = newHashMap protected String matchingTypeReferenceString protected String replacementTypeReferenceString protected String targetTypeReferenceString diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend index d5252ef..f83d9da 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend @@ -4,9 +4,16 @@ import java.util.List import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jface.text.IDocument import org.eclipse.jdt.core.dom.TypeDeclaration +import java.util.Map +import java.lang.reflect.Type interface Refactoring { - + + val Map> bindings = newHashMap + val Map nameBindings = newHashMap + val Map typeBindings = newHashMap + val Map>> parameterBindings = newHashMap + enum Status { SUCCESS, MATCH_FAILED, diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend index c897741..d57b5f2 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend @@ -1,17 +1,15 @@ package hu.elte.refjava.api.patterns +import hu.elte.refjava.api.Check import hu.elte.refjava.lang.refJava.PBlockExpression import hu.elte.refjava.lang.refJava.PConstructorCall import hu.elte.refjava.lang.refJava.PExpression import hu.elte.refjava.lang.refJava.PFeatureCall -import hu.elte.refjava.lang.refJava.PLambdaExpression import hu.elte.refjava.lang.refJava.PMemberFeatureCall import hu.elte.refjava.lang.refJava.PMetaVariable import hu.elte.refjava.lang.refJava.PMethodDeclaration -import hu.elte.refjava.lang.refJava.PNameMetaVariable -import hu.elte.refjava.lang.refJava.PParameterMetaVariable +import hu.elte.refjava.lang.refJava.PNothingExpression import hu.elte.refjava.lang.refJava.PTargetExpression -import hu.elte.refjava.lang.refJava.PTypeMetaVariable import hu.elte.refjava.lang.refJava.PVariableDeclaration import hu.elte.refjava.lang.refJava.Pattern import java.lang.reflect.Type @@ -49,12 +47,21 @@ class ASTBuilder { build(ast, bindings, nameBindings, typeBindings, parameterBindings, typeRefString) } - def buildNewInterface(PLambdaExpression lambdaExpr, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString){ + def buildNewInterface(PMemberFeatureCall lambdaExpr, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString){ this.ast = ast + this.bindings = bindings + this.nameBindings = nameBindings + this.typeBindings = typeBindings + this.parameterBindings = parameterBindings val newInterface = ast.newTypeDeclaration newInterface.interface = true - newInterface.name.identifier = "test" + + if((lambdaExpr.memberCallTarget as PConstructorCall).metaName !== null) { + newInterface.name.identifier = Check.generateNewName() + } else { + newInterface.name.identifier = (lambdaExpr.memberCallTarget as PConstructorCall).name + } if(typeRefString !== null) { val tmp = typeRefString.split("\\|") @@ -62,7 +69,7 @@ class ASTBuilder { this.typeReferenceQueue.addAll(tmp) } - val lambdaExpressionBody = ((lambdaExpr.expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements + val lambdaExpressionBody = (lambdaExpr.memberCallTarget as PConstructorCall).elements val newInterfaceBodyDeclarations = lambdaExpressionBody.doBuildPatterns newInterfaceBodyDeclarations.forEach[ @@ -75,6 +82,7 @@ class ASTBuilder { return newInterface } + def build(AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { this.ast = ast this.rewrite = ASTRewrite.create(ast) @@ -89,12 +97,11 @@ class ASTBuilder { this.typeReferenceQueue.addAll(tmp) } - if(pattern.empty) { + if(pattern instanceof PNothingExpression) { return null } else { return pattern.patterns.doBuildPatterns } - } //meta variable builder @@ -121,7 +128,7 @@ class ASTBuilder { //adding constructor call name if (constCall.metaName !== null) { - val name = (constCall.metaName as PNameMetaVariable).name + val name = (constCall.metaName as PMetaVariable).name class.type = ast.newSimpleType(ast.newName(nameBindings.get(name) ) ) } else { class.type = ast.newSimpleType(ast.newName(constCall.name) ) @@ -146,30 +153,28 @@ class ASTBuilder { //adding method name if (methodDecl.prefix.metaName !== null) { - val name = (methodDecl.prefix.metaName as PNameMetaVariable).name + val name = (methodDecl.prefix.metaName as PMetaVariable).name method.name.identifier = nameBindings.get(name) } else { method.name.identifier = methodDecl.prefix.name } //adding method visibility - if(methodDecl.prefix.visibility !== null) { - switch methodDecl.prefix.visibility { - case PUBLIC: method.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) - case PRIVATE: method.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) - case PROTECTED: method.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) - default: {} - } + switch methodDecl.prefix.visibility { + case PUBLIC: method.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: method.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: method.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + default: {} } - + //adding method return type if(methodDecl.prefix.type !== null) { method.returnType2 = Utils.getTypeFromId(typeReferenceQueue.remove, ast) } else { - val name = (methodDecl.prefix.metaType as PTypeMetaVariable).name + val name = (methodDecl.prefix.metaType as PMetaVariable).name method.returnType2 = Utils.getTypeFromId(typeBindings.get(name).typeName, ast) } - + //adding method parameters if (methodDecl.arguments.size > 0) { for(argument : methodDecl.arguments) { @@ -181,7 +186,7 @@ class ASTBuilder { method.parameters.add(methodParameterDeclaration) } } else if (methodDecl.metaArguments !== null) { - val parameterList = parameterBindings.get((methodDecl.metaArguments as PParameterMetaVariable).name) + val parameterList = parameterBindings.get((methodDecl.metaArguments as PMetaVariable).name) for (parameter : parameterList) { val methodParameterDeclaration = ast.newSingleVariableDeclaration methodParameterDeclaration.type = Utils.getTypeFromId(parameter.key.toString, ast) @@ -212,45 +217,39 @@ class ASTBuilder { return method } - //variable declaration builder + //field declaration builder def private dispatch doBuild(PVariableDeclaration varDecl) { val fragment = ast.newVariableDeclarationFragment //adding variable name if(varDecl.metaName !== null) { - fragment.name.identifier = nameBindings.get( (varDecl.metaName as PNameMetaVariable).name ) + fragment.name.identifier = nameBindings.get( (varDecl.metaName as PMetaVariable).name ) } else { fragment.name.identifier = varDecl.name } val newVar = ast.newFieldDeclaration(fragment) + //adding variable visibility - if(varDecl.visibility !== null) { - switch varDecl.visibility { - case PUBLIC: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) - case PRIVATE: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) - case PROTECTED: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) - default: {} - } + switch varDecl.visibility { + case PUBLIC: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + default: {} } //adding variable type if(varDecl.type !== null) { newVar.type = Utils.getTypeFromId(typeReferenceQueue.remove, ast) } else { - val name = (varDecl.metaType as PTypeMetaVariable).name + val name = (varDecl.metaType as PMetaVariable).name newVar.type = Utils.getTypeFromId(typeBindings.get(name).typeName, ast) } return newVar } - //lambda expression builder - def private dispatch ASTNode doBuild(PLambdaExpression lambdaExpr) { - return doBuild(lambdaExpr.expression) - } - //method invocation (with expression) builder def private dispatch ASTNode doBuild(PMemberFeatureCall featureCall) { val methodInv = ast.newMethodInvocation @@ -259,13 +258,13 @@ class ASTBuilder { if (featureCall.feature !== null) { methodInv.name.identifier = featureCall.feature } else { - val name = (featureCall.metaFeature as PNameMetaVariable).name + val name = (featureCall.metaFeature as PMetaVariable).name methodInv.name.identifier = nameBindings.get(name) } //adding method invocation parameters if(featureCall.memberCallArguments !== null) { - val parameterList = parameterBindings.get((featureCall.memberCallArguments as PParameterMetaVariable).name) + val parameterList = parameterBindings.get((featureCall.memberCallArguments as PMetaVariable).name) for (parameter : parameterList) { methodInv.arguments.add(ast.newSimpleName(parameter.value)) } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend index 70f5a7e..7a4fce0 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend @@ -3,7 +3,6 @@ package hu.elte.refjava.api.patterns import hu.elte.refjava.lang.refJava.PBlockExpression import hu.elte.refjava.lang.refJava.PConstructorCall import hu.elte.refjava.lang.refJava.PExpression -import hu.elte.refjava.lang.refJava.PLambdaExpression import hu.elte.refjava.lang.refJava.PMemberFeatureCall import hu.elte.refjava.lang.refJava.PMetaVariable import hu.elte.refjava.lang.refJava.PMethodDeclaration @@ -25,6 +24,7 @@ import org.eclipse.jdt.core.dom.MethodInvocation import org.eclipse.jdt.core.dom.Modifier import org.eclipse.jdt.core.dom.SingleVariableDeclaration import org.eclipse.jdt.core.dom.VariableDeclarationFragment +import org.eclipse.jdt.core.dom.VariableDeclarationStatement import org.eclipse.xtext.EcoreUtil2 class PatternMatcher { @@ -40,7 +40,7 @@ class PatternMatcher { new(Pattern pattern) { this.pattern = pattern } - + def getBindings() { bindings } @@ -143,15 +143,12 @@ class PatternMatcher { //matching method visibility var boolean visibilityCheck - if(pMethodDecl.prefix.visibility.toString != "null") { - switch pMethodDecl.prefix.visibility { - case PUBLIC: visibilityCheck = Modifier.isPublic(methodDecl.getModifiers()) - case PRIVATE: visibilityCheck = Modifier.isPrivate(methodDecl.getModifiers()) - case PROTECTED: visibilityCheck = Modifier.isProtected(methodDecl.getModifiers()) - default: {} - } - } else { - visibilityCheck = true + val modifiers = methodDecl.getModifiers + switch pMethodDecl.prefix.visibility { + case PUBLIC: visibilityCheck = Modifier.isPublic(modifiers) + case PRIVATE: visibilityCheck = Modifier.isPrivate(modifiers) + case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) + default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 } //matching method return value @@ -160,7 +157,7 @@ class PatternMatcher { //TODO returnCheck = true } else { - returnCheck = methodDecl.returnType2.toString == typeReferenceQueue.remove + returnCheck = methodDecl.returnType2.resolveBinding.qualifiedName == typeReferenceQueue.remove } //matching method parameters @@ -175,7 +172,7 @@ class PatternMatcher { while(argIt.hasNext && parameterCheck) { val arg = argIt.next val param = paramIt.next - parameterCheck = param.name.identifier == arg.name && param.type.toString == typeReferenceQueue.remove + parameterCheck = param.name.identifier == arg.name && param.type.resolveBinding.qualifiedName == typeReferenceQueue.remove } } @@ -190,11 +187,6 @@ class PatternMatcher { return nameCheck && visibilityCheck && parameterCheck && returnCheck && bodyCheck } - //lambda expression matching - def private dispatch boolean doMatch(PLambdaExpression lambdaExpr, ExpressionStatement expStatement) { - doMatch(lambdaExpr.expression, expStatement) - } - //method invocation matching def private dispatch boolean doMatch(PMemberFeatureCall featureCall, ExpressionStatement expStatement) { if (expStatement.expression instanceof MethodInvocation) { @@ -229,10 +221,33 @@ class PatternMatcher { } //variable declaration matching - def private dispatch boolean doMatch(PVariableDeclaration varDecl, FieldDeclaration fieldDecl) { + def private dispatch boolean doMatch(PVariableDeclaration varDecl, VariableDeclarationStatement varDeclStatement) { //matching variable declaration name var boolean nameCheck + if (varDecl.metaName !== null) { + //TODO + nameCheck = true + } else { + nameCheck = varDecl.name == (varDeclStatement.fragments.head as VariableDeclarationFragment).name.identifier + } + + //matching variable declaration type + var boolean typeCheck + if(varDecl.type !== null) { + typeCheck = varDeclStatement.type.resolveBinding.qualifiedName == typeReferenceQueue.remove + } else { + //TODO + typeCheck = true + } + + return nameCheck && typeCheck + } + + def private dispatch boolean doMatch(PVariableDeclaration varDecl, FieldDeclaration fieldDecl) { + + //matching field declaration name + var boolean nameCheck if (varDecl.metaName !== null) { //TODO nameCheck = true @@ -240,23 +255,20 @@ class PatternMatcher { nameCheck = varDecl.name == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier } - //matching variable declaration visibility + //matching field declaration visibility var boolean visibilityCheck - if(varDecl.visibility.toString != "null") { - switch varDecl.visibility { - case PUBLIC: visibilityCheck = Modifier.isPublic(fieldDecl.getModifiers()) - case PRIVATE: visibilityCheck = Modifier.isPrivate(fieldDecl.getModifiers()) - case PROTECTED: visibilityCheck = Modifier.isProtected(fieldDecl.getModifiers()) - default: {} - } - } else { - visibilityCheck = true + val modifiers = fieldDecl.getModifiers + switch varDecl.visibility { + case PUBLIC: visibilityCheck = Modifier.isPublic(modifiers) + case PRIVATE: visibilityCheck = Modifier.isPrivate(modifiers) + case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) + default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 } - //matching variable declaration type + //matching field declaration type var boolean typeCheck if(varDecl.type !== null) { - typeCheck = fieldDecl.type.toString == typeReferenceQueue.remove + typeCheck = fieldDecl.type.resolveBinding.qualifiedName == typeReferenceQueue.remove } else { //TODO typeCheck = true @@ -265,6 +277,8 @@ class PatternMatcher { return nameCheck && visibilityCheck && typeCheck } + + def private dispatch doMatch(PExpression anyOtherPattern, ASTNode anyOtherNode) { false } @@ -284,7 +298,7 @@ class PatternMatcher { val nIt = nodes.iterator for (var int i = 0; i < patterns.size; i++) { - if( (patterns.get(i) instanceof PMetaVariable && !(patterns.get(i) as PMetaVariable).multi) || !(patterns.get(i) instanceof PMetaVariable) ) { + if( !(patterns.get(i) instanceof PMetaVariable) || !(patterns.get(i) as PMetaVariable).multi ) { if (!doMatch(patterns.get(i), nIt.next)) { return false } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend index 292a2ff..4687bf2 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend @@ -2,12 +2,16 @@ package hu.elte.refjava.api.patterns import hu.elte.refjava.lang.refJava.Pattern import org.eclipse.jdt.core.dom.AST +import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.dom.FieldDeclaration +import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.PrimitiveType +import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jdt.core.dom.VariableDeclarationStatement import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.common.types.JvmTypeReference -import org.eclipse.jdt.core.dom.ASTNode -import org.eclipse.jdt.core.dom.TypeDeclaration -import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.ICompilationUnit class Utils { @@ -41,18 +45,20 @@ class Utils { } } else { //simple type - val simpleName = id.split("\\.") - return ast.newSimpleType(ast.newSimpleName(simpleName.last)) + val simpleName = id.split("\\.").last + return ast.newSimpleType(ast.newSimpleName(simpleName)) } } + + def static getTypeReferenceString(Pattern pattern) { - var String typeypeReferenceString = "" + var String typeReferenceString = "" val types = EcoreUtil2.getAllContentsOfType(pattern, JvmTypeReference) for(type : types) { - typeypeReferenceString = typeypeReferenceString + type.identifier + "|" + typeReferenceString = typeReferenceString + type.identifier + "|" } - return typeypeReferenceString + return typeReferenceString } def static getTypeDeclaration(ASTNode node) { @@ -71,4 +77,29 @@ class Utils { tmp as CompilationUnit } + def static getMethodDeclaration(ASTNode node) { + var tmp = node + while (!(tmp instanceof MethodDeclaration) && tmp !== null) { + tmp = tmp.parent + } + tmp as MethodDeclaration + } + + def static getFieldDeclaration(ASTNode node) { + var tmp = node + while (!(tmp instanceof FieldDeclaration) && tmp !== null) { + tmp = tmp.parent + } + tmp as FieldDeclaration + } + + def static getVariableDeclaration(ASTNode node) { + var tmp = node + while (!(tmp instanceof VariableDeclarationStatement) && tmp !== null) { + tmp = tmp.parent + } + tmp as VariableDeclarationStatement + } + + } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext index 289f832..d1bb110 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext @@ -39,11 +39,11 @@ SchemeInstanceRule: ; AssignmentList: - assignment+=Assignment =>(';' assignment+=Assignment)* ';'? + assignment+=MetaVariableAssignment =>(';' assignment+=MetaVariableAssignment)* ';'? ; -Assignment: - {Assignment} name=(PNameMetaVariable | PTypeMetaVariable | PParameterMetaVariable) '=' value=XExpression +MetaVariableAssignment: + {MetaVariableAssignment} metaVariable=PMetaVariable '=' value=XExpression ; @@ -69,23 +69,16 @@ CompositeRefactoringRule: ////////////// PMetaVariable returns PExpression: - {PMetaVariable} '#' name=ID multi?='..'? + {PMetaVariable} type=MetaVariableType name=ID multi?='..'? ; -PTypeMetaVariable returns PExpression: - {PTypeMetaVariable} 'type#' name=ID +enum MetaVariableType : + SIMPLE='#' | NAME='name#' | TYPE='type#' | PARAMETER='parameter#' ; -PNameMetaVariable returns PExpression: - {PNameMetaVariable} 'name#' name=ID -; - -PParameterMetaVariable returns PExpression: - {PParameterMetaVariable} 'parameter#' name=ID multi?='..'? -; Pattern: - (patterns+=PExpressionOrVarDeclaration =>(';' patterns+=PExpressionOrVarDeclaration)* ';'?) | empty?="-" + patterns+=PExpressionOrVarDeclaration =>(';' patterns+=PExpressionOrVarDeclaration)* ';'? // =>: local, distinguishes semicolons ; @@ -97,7 +90,7 @@ PExpressionOrVarDeclaration returns PExpression: PDeclaration returns PExpression: PVariableDeclaration ( {PMethodDeclaration.prefix=current} '(' ( - arguments+=FullJvmFormalParameter (',' arguments+=FullJvmFormalParameter)* | metaArguments=PParameterMetaVariable + arguments+=FullJvmFormalParameter (',' arguments+=FullJvmFormalParameter)* | metaArguments=PMetaVariable )? ')' (body=PBlockExpression) )? ; @@ -105,28 +98,25 @@ PDeclaration returns PExpression: PVariableDeclaration returns PVariableDeclaration: =>({PVariableDeclaration} ( // =>: global, see PExpressionOrVarDeclaration->...->PFeatureCall (visibility=Visibility | metaVisibility=PMetaVariable)? // for methods - (type=JvmTypeReference | metaType=PTypeMetaVariable) - (name=ValidID | metaName=PNameMetaVariable) + (type=JvmTypeReference | metaType=PMetaVariable) + (name=ValidID | metaName=PMetaVariable) )) ('=' right=PExpression)? ; enum Visibility: - NULL='null' | PACKAGE='package' | PUBLIC='public' | PRIVATE='private' | PROTECTED='protected' + PACKAGE='package' | PUBLIC='public' | PRIVATE='private' | PROTECTED='protected' ; PExpression returns PExpression: PMemberFeatureCall ; -PLambdaExpression returns PExpression: - {PLambdaExpression} 'lambda' expression=PMemberFeatureCall -; PMemberFeatureCall returns PExpression: PPrimaryExpression ( =>({PMemberFeatureCall.memberCallTarget=current} ".") - (feature=IdOrSuper | metaFeature=PNameMetaVariable) ( - =>'(' memberCallArguments=PParameterMetaVariable? ')' + (feature=IdOrSuper | metaFeature=PMetaVariable) ( + =>'(' memberCallArguments=PMetaVariable? ')' )? )* ; @@ -137,17 +127,13 @@ PPrimaryExpression returns PExpression | PFeatureCall | PReturnExpression | PTargetExpression - | PLambdaExpression | PNothingExpression | PMetaVariable - | PTypeMetaVariable - | PNameMetaVariable - | PParameterMetaVariable // no explicit metavariables here to preserve structure ; PConstructorCall returns PExpression: - {PConstructorCall} 'new' (name=ValidID | metaName=PNameMetaVariable) //constructor=[types::JvmConstructor|QualifiedName] + {PConstructorCall} 'new' (name=ValidID | metaName=PMetaVariable) //constructor=[types::JvmConstructor|QualifiedName] =>'(' (arguments+=PExpression (',' arguments+=PExpression)*)? ')' ( anonInstance?='{' (elements+=PDeclaration =>(';' elements+=PDeclaration)* ';'?)? '}' // =>: local, distinguishes semicolons diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend index 9794b22..bef42a2 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend @@ -6,9 +6,6 @@ import hu.elte.refjava.api.ClassRefactoring import hu.elte.refjava.api.LambdaRefactoring import hu.elte.refjava.api.LocalRefactoring import hu.elte.refjava.api.patterns.Utils -import hu.elte.refjava.lang.refJava.PNameMetaVariable -import hu.elte.refjava.lang.refJava.PParameterMetaVariable -import hu.elte.refjava.lang.refJava.PTypeMetaVariable import hu.elte.refjava.lang.refJava.SchemeInstanceRule import hu.elte.refjava.lang.refJava.SchemeType import java.lang.reflect.Type @@ -19,6 +16,8 @@ import org.eclipse.xtext.serializer.ISerializer import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder +import hu.elte.refjava.lang.refJava.PMetaVariable +import hu.elte.refjava.lang.refJava.MetaVariableType class RefJavaJvmModelInferrer extends AbstractModelInferrer { @@ -65,38 +64,37 @@ class RefJavaJvmModelInferrer extends AbstractModelInferrer { var String callings = "" if(rule.assignment !== null) { for (assignment : rule.assignment.assignment) { - if (assignment.name instanceof PNameMetaVariable) { - val name = (assignment.name as PNameMetaVariable).name - members += rule.toMethod("valueof_name_" + name, typeof(String).typeRef) [ + val metaVar = assignment.metaVariable as PMetaVariable + val metaVarName = (assignment.metaVariable as PMetaVariable).name + if (metaVar.type == MetaVariableType.NAME) { + members += rule.toMethod("valueof_name_" + metaVarName, typeof(String).typeRef) [ visibility = JvmVisibility.PRIVATE body = assignment.value ] - callings = callings + "set_name_" + name + "();" + endl - members += rule.toMethod("set_name_" + name, typeof(void).typeRef) [ + callings = callings + "set_name_" + metaVarName + "();" + endl + members += rule.toMethod("set_name_" + metaVarName, typeof(void).typeRef) [ visibility = JvmVisibility.PRIVATE - body = '''nameBindings.put("«name»", valueof_name_«name»());''' + body = '''nameBindings.put("«metaVarName»", valueof_name_«metaVarName»());''' ] - } else if (assignment.name instanceof PTypeMetaVariable) { - val name = (assignment.name as PTypeMetaVariable).name - members += rule.toMethod("valueof_type_" + name, typeof(Type).typeRef) [ + } else if (metaVar.type == MetaVariableType.TYPE) { + members += rule.toMethod("valueof_type_" + metaVarName, typeof(Type).typeRef) [ visibility = JvmVisibility.PRIVATE body = assignment.value ] - callings = callings + "set_type_" + name + "();" + endl - members += rule.toMethod("set_type_" + name, typeof(void).typeRef) [ + callings = callings + "set_type_" + metaVarName + "();" + endl + members += rule.toMethod("set_type_" + metaVarName, typeof(void).typeRef) [ visibility = JvmVisibility.PRIVATE - body = '''typeBindings.put("«name»", valueof_type_«name»());''' + body = '''typeBindings.put("«metaVarName»", valueof_type_«metaVarName»());''' ] - } else if (assignment.name instanceof PParameterMetaVariable) { - val name = (assignment.name as PParameterMetaVariable).name - members += rule.toMethod("valueof_parameter_" + name, typeof(List).typeRef) [ + } else if (metaVar.type == MetaVariableType.PARAMETER) { + members += rule.toMethod("valueof_parameter_" + metaVarName, typeof(List).typeRef) [ visibility = JvmVisibility.PRIVATE body = assignment.value ] - callings = callings + "set_parameter_" + name + "();" + endl - members += rule.toMethod("set_parameter_" + name, typeof(void).typeRef) [ + callings = callings + "set_parameter_" + metaVarName + "();" + endl + members += rule.toMethod("set_parameter_" + metaVarName, typeof(void).typeRef) [ visibility = JvmVisibility.PRIVATE - body = '''parameterBindings.put("«name»", valueof_parameter_«name»());''' + body = '''parameterBindings.put("«metaVarName»", valueof_parameter_«metaVarName»());''' ] } } @@ -144,10 +142,10 @@ super.definitionTypeReferenceString = "«definitionTypeReferenceString»";''' def private toSuperType(SchemeType it) { switch it { - case LOCAL : return LocalRefactoring - case BLOCK : return BlockRefactoring - case LAMBDA : return LambdaRefactoring - case CLASS : return ClassRefactoring + case LOCAL : LocalRefactoring + case BLOCK : BlockRefactoring + case LAMBDA : LambdaRefactoring + case CLASS : ClassRefactoring } } From d6c2ac93d22ae9aa4a1b44b6f7d491831f410c6f Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Fri, 17 Apr 2020 00:28:54 +0200 Subject: [PATCH 06/14] Warning eliminations --- hu.elte.refjava.control/.classpath | 8 +-- .../.settings/org.eclipse.jdt.core.prefs | 9 ++- hu.elte.refjava.control/META-INF/MANIFEST.MF | 6 +- hu.elte.refjava.lang.ide/.classpath | 6 +- .../.settings/org.eclipse.jdt.core.prefs | 8 ++- hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF | 5 +- hu.elte.refjava.lang.ui/.classpath | 8 +-- .../.settings/org.eclipse.jdt.core.prefs | 8 ++- hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF | 12 ++-- hu.elte.refjava.lang.ui/plugin.xml | 36 ---------- hu.elte.refjava.lang/.classpath | 6 +- hu.elte.refjava.lang/.project | 1 - .../.settings/org.eclipse.jdt.core.prefs | 8 ++- .../org.eclipse.ltk.core.refactoring.prefs | 2 + hu.elte.refjava.lang/META-INF/MANIFEST.MF | 19 ++--- .../elte/refjava/api/BlockRefactoring.xtend | 25 ++++--- .../src/hu/elte/refjava/api/Check.xtend | 71 +++---------------- .../elte/refjava/api/ClassRefactoring.xtend | 51 ++++++------- .../elte/refjava/api/LambdaRefactoring.xtend | 18 ++--- .../src/hu/elte/refjava/api/Refactoring.xtend | 8 +-- .../refjava/api/patterns/PatternMatcher.xtend | 40 ++++------- .../hu/elte/refjava/api/patterns/Utils.xtend | 1 - .../jvmmodel/RefJavaJvmModelInferrer.xtend | 4 +- .../RefJavaImplicitlyImportedFeatures.xtend | 2 +- .../lang/validation/RefJavaValidator.xtend | 3 +- 25 files changed, 133 insertions(+), 232 deletions(-) create mode 100644 hu.elte.refjava.lang/.settings/org.eclipse.ltk.core.refactoring.prefs diff --git a/hu.elte.refjava.control/.classpath b/hu.elte.refjava.control/.classpath index e784782..3906c3b 100644 --- a/hu.elte.refjava.control/.classpath +++ b/hu.elte.refjava.control/.classpath @@ -1,12 +1,8 @@ - - - - - - + + diff --git a/hu.elte.refjava.control/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.control/.settings/org.eclipse.jdt.core.prefs index 0c68a61..34bf367 100644 --- a/hu.elte.refjava.control/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.control/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,10 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 +org.eclipse.jdt.core.compiler.compliance=12 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=12 diff --git a/hu.elte.refjava.control/META-INF/MANIFEST.MF b/hu.elte.refjava.control/META-INF/MANIFEST.MF index 4db3b9e..5775429 100644 --- a/hu.elte.refjava.control/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.control/META-INF/MANIFEST.MF @@ -17,4 +17,8 @@ Require-Bundle: org.eclipse.ui, org.eclipse.xtext.ui;bundle-version="2.15.0", hu.elte.refjava;bundle-version="1.0.0" Automatic-Module-Name: hu.elte.refjava.control -Bundle-RequiredExecutionEnvironment: JavaSE-10 +Bundle-RequiredExecutionEnvironment: JavaSE-12 +Export-Package: hu.elte.refjava.control.handlers, + hu.elte.refjava.control.library, + hu.elte.refjava.control.utils, + hu.elte.refjava.control.wizards diff --git a/hu.elte.refjava.lang.ide/.classpath b/hu.elte.refjava.lang.ide/.classpath index ecd589b..fc5b6d4 100644 --- a/hu.elte.refjava.lang.ide/.classpath +++ b/hu.elte.refjava.lang.ide/.classpath @@ -3,11 +3,7 @@ - - - - - + diff --git a/hu.elte.refjava.lang.ide/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang.ide/.settings/org.eclipse.jdt.core.prefs index dd5a2bb..f5c72b9 100644 --- a/hu.elte.refjava.lang.ide/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.lang.ide/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=10 -org.eclipse.jdt.core.compiler.compliance=10 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 +org.eclipse.jdt.core.compiler.compliance=12 org.eclipse.jdt.core.compiler.problem.APILeak=warning org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -67,6 +68,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=igno org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -105,4 +107,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=10 +org.eclipse.jdt.core.compiler.source=12 diff --git a/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF index c0d4294..0db3626 100644 --- a/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF @@ -14,6 +14,7 @@ Require-Bundle: hu.elte.refjava, org.eclipse.xtext.xbase.lib, org.eclipse.xtend.lib, org.eclipse.xtend.lib.macro -Bundle-RequiredExecutionEnvironment: JavaSE-10 -Export-Package: hu.elte.refjava.lang.ide.contentassist.antlr, +Bundle-RequiredExecutionEnvironment: JavaSE-12 +Export-Package: hu.elte.refjava.lang.ide, + hu.elte.refjava.lang.ide.contentassist.antlr, hu.elte.refjava.lang.ide.contentassist.antlr.internal diff --git a/hu.elte.refjava.lang.ui/.classpath b/hu.elte.refjava.lang.ui/.classpath index 2b833b6..fc5b6d4 100644 --- a/hu.elte.refjava.lang.ui/.classpath +++ b/hu.elte.refjava.lang.ui/.classpath @@ -1,13 +1,9 @@ - - - - - - + + diff --git a/hu.elte.refjava.lang.ui/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang.ui/.settings/org.eclipse.jdt.core.prefs index dd5a2bb..f5c72b9 100644 --- a/hu.elte.refjava.lang.ui/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.lang.ui/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=10 -org.eclipse.jdt.core.compiler.compliance=10 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 +org.eclipse.jdt.core.compiler.compliance=12 org.eclipse.jdt.core.compiler.problem.APILeak=warning org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -22,6 +22,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -67,6 +68,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=igno org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -105,4 +107,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=10 +org.eclipse.jdt.core.compiler.source=12 diff --git a/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF index 826be51..8f2e620 100644 --- a/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF @@ -22,9 +22,13 @@ Require-Bundle: hu.elte.refjava, org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional, org.eclipse.jdt.debug.ui Import-Package: org.apache.log4j -Bundle-RequiredExecutionEnvironment: JavaSE-10 -Export-Package: hu.elte.refjava.lang.ui.contentassist, - hu.elte.refjava.lang.ui.quickfix, +Bundle-RequiredExecutionEnvironment: JavaSE-12 +Export-Package: hu.elte.refjava.lang.ui, + hu.elte.refjava.lang.ui.contentassist, + hu.elte.refjava.lang.ui.editor, hu.elte.refjava.lang.ui.internal, - hu.elte.refjava.lang.ui.editor + hu.elte.refjava.lang.ui.labeling, + hu.elte.refjava.lang.ui.outline, + hu.elte.refjava.lang.ui.quickfix, + hu.elte.refjava.lang.validation Bundle-Activator: hu.elte.refjava.lang.ui.internal.LangActivator diff --git a/hu.elte.refjava.lang.ui/plugin.xml b/hu.elte.refjava.lang.ui/plugin.xml index 5290adf..f9552e7 100644 --- a/hu.elte.refjava.lang.ui/plugin.xml +++ b/hu.elte.refjava.lang.ui/plugin.xml @@ -475,42 +475,6 @@ - - - - - - - - - - - - - - - - - - - - + diff --git a/hu.elte.refjava.lang/.project b/hu.elte.refjava.lang/.project index 08d1222..64cc61c 100644 --- a/hu.elte.refjava.lang/.project +++ b/hu.elte.refjava.lang/.project @@ -3,7 +3,6 @@ hu.elte.refjava - hu.elte.refjava.control diff --git a/hu.elte.refjava.lang/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang/.settings/org.eclipse.jdt.core.prefs index ca12074..9100c99 100644 --- a/hu.elte.refjava.lang/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.lang/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=10 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=10 +org.eclipse.jdt.core.compiler.compliance=12 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -27,6 +27,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore @@ -72,6 +73,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=igno org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -110,4 +112,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=10 +org.eclipse.jdt.core.compiler.source=12 diff --git a/hu.elte.refjava.lang/.settings/org.eclipse.ltk.core.refactoring.prefs b/hu.elte.refjava.lang/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..b196c64 --- /dev/null +++ b/hu.elte.refjava.lang/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/hu.elte.refjava.lang/META-INF/MANIFEST.MF b/hu.elte.refjava.lang/META-INF/MANIFEST.MF index d2c2bf2..b81c156 100644 --- a/hu.elte.refjava.lang/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang/META-INF/MANIFEST.MF @@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.emf.ecore, org.eclipse.xtext.common.types, org.eclipse.xtext.xbase.lib;bundle-version="2.14.0", - org.objectweb.asm;bundle-version="[6.2.1,6.3.0)";resolution:=optional, + org.objectweb.asm;resolution:=optional, org.eclipse.xtext.util, org.eclipse.emf.common, org.eclipse.xtend.lib;bundle-version="2.14.0", @@ -23,17 +23,20 @@ Require-Bundle: org.eclipse.xtext, com.google.guava, org.eclipse.xtend.lib.macro, org.junit -Bundle-RequiredExecutionEnvironment: JavaSE-10 +Bundle-RequiredExecutionEnvironment: JavaSE-12 Export-Package: hu.elte.refjava.api, + hu.elte.refjava.api.patterns, hu.elte.refjava.lang, + hu.elte.refjava.lang.compiler, hu.elte.refjava.lang.jvmmodel, - hu.elte.refjava.lang.scoping, - hu.elte.refjava.lang.validation, + hu.elte.refjava.lang.parser.antlr, + hu.elte.refjava.lang.parser.antlr.internal, hu.elte.refjava.lang.refJava, hu.elte.refjava.lang.refJava.impl, - hu.elte.refjava.lang.parser.antlr, - hu.elte.refjava.lang.serializer, hu.elte.refjava.lang.refJava.util, - hu.elte.refjava.lang.parser.antlr.internal, - hu.elte.refjava.lang.services + hu.elte.refjava.lang.scoping, + hu.elte.refjava.lang.serializer, + hu.elte.refjava.lang.services, + hu.elte.refjava.lang.typesystem, + hu.elte.refjava.lang.validation Import-Package: org.apache.log4j diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend index daaa587..09d96ea 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend @@ -53,12 +53,18 @@ class BlockRefactoring implements Refactoring { } def private safeMatch() { - if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString) ) { + try { + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString) ) { + return false + } + target = matcher.modifiedTarget.toList + bindings.putAll(matcher.bindings) + return true + } catch (Exception e) { + println(e) return false } - target = matcher.modifiedTarget.toList - bindings.putAll(matcher.bindings) - return true + } def protected void setMetaVariables() { @@ -86,22 +92,23 @@ class BlockRefactoring implements Refactoring { try { check() } catch (Exception e) { + println(e) false } } def protected check() { - Check.isInsideBlock(target) + //Check.isInsideBlock(target) + true } def private safeBuild() { try { replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) } catch (Exception e) { - System.out.println(e) + println(e) return false } - return true } @@ -110,15 +117,15 @@ class BlockRefactoring implements Refactoring { val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] - val group = rewrite.createGroupNode( replacement ) + val group = rewrite.createGroupNode(replacement) rewrite.replace( target.head, group, null) val edits = rewrite.rewriteAST(document, null) edits.apply(document) } catch (Exception e) { + println(e) return false } - return true } } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend index cfba797..668ff1a 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend @@ -28,7 +28,6 @@ class Check { public static List allTypeDeclarationInWorkSpace - //actual def static isInsideBlock(ASTNode node) { node.parent instanceof Block } @@ -83,7 +82,6 @@ class Check { found = true return false } - return true } } @@ -97,7 +95,6 @@ class Check { varDeclList.forall[!isReferencedIn(nodes)] } - //lambda checks def static isFresh(String name) { !allTypeDeclarationInWorkSpace.exists[it.name.identifier == name] @@ -432,8 +429,7 @@ class Check { } def static isLessVisible(String targetVisibility, String actualVisibility) { - if ( - (actualVisibility == "public" && (targetVisibility == "private" || targetVisibility == "default" || targetVisibility == "protected")) || + if ((actualVisibility == "public" && (targetVisibility == "private" || targetVisibility == "default" || targetVisibility == "protected")) || actualVisibility == "protected" && (targetVisibility == "private" || targetVisibility == "default") || actualVisibility == "default" && (targetVisibility == "private") ) { true @@ -472,54 +468,14 @@ class Check { } } - - - //needs work - - /* - def private static subClasses(TypeDeclaration typeDecl) { - val typeBinding = typeDecl.resolveBinding - val List subClasses = newArrayList - for (t : allTypeDeclarationInWorkSpace) { - if(t.superclassType !== null && t.superclassType.resolveBinding.qualifiedName == typeBinding.qualifiedName) { - subClasses.add(t) - } - } - subClasses - } - - def static visibilityFrom(String fieldName, TypeDeclaration typeDecl) { - val typeBinding = typeDecl.resolveBinding - val targetType = allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeBinding.qualifiedName] - - val List result = newArrayList - result.add(targetType) - - val Queue typeDeclarationsToCheck = newLinkedList - - typeDeclarationsToCheck.addAll(typeDecl.subClasses) - - while(!typeDeclarationsToCheck.empty) { - val typeToCheck = typeDeclarationsToCheck.remove - - if(!typeToCheck.bodyDeclarations.exists[it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == fieldName]) { - result.add(typeToCheck) - typeDeclarationsToCheck.addAll(typeToCheck.subClasses) - } - } - result - }*/ - def private static getTypeOfFieldOrVarDeclOfName(Name name, TypeDeclaration typeDecl) { - val binding = if (name instanceof QualifiedName) { name.qualifier.resolveBinding } else if (name instanceof SimpleName) { name.resolveBinding } - - val List asd = newArrayList + val List result = newArrayList typeDecl.bodyDeclarations.exists[ val visitor = new ASTVisitor() { public var boolean found = false @@ -528,11 +484,10 @@ class Check { if(name.resolveBinding.isEqualTo(binding) && (Utils.getFieldDeclaration(name) !== null || Utils.getVariableDeclaration(name) !== null) ) { found = true if(Utils.getFieldDeclaration(name) !== null) { - asd.add(Utils.getFieldDeclaration(name)) + result.add(Utils.getFieldDeclaration(name)) } else { - asd.add(Utils.getVariableDeclaration(name)) + result.add(Utils.getVariableDeclaration(name)) } - return false } return true @@ -542,15 +497,14 @@ class Check { return visitor.found ] - if(!asd.empty && asd.get(0) instanceof FieldDeclaration) { - return (asd.get(0) as FieldDeclaration).type - } else if (!asd.empty && asd.get(0) instanceof VariableDeclarationStatement) { - return (asd.get(0) as VariableDeclarationStatement).type + if(!result.empty && result.get(0) instanceof FieldDeclaration) { + return (result.get(0) as FieldDeclaration).type + } else if (!result.empty && result.get(0) instanceof VariableDeclarationStatement) { + return (result.get(0) as VariableDeclarationStatement).type } } def static referredField(ASTNode reference) { - val binding = (reference as SimpleName).resolveBinding for(typeDecl : allTypeDeclarationInWorkSpace) { @@ -560,7 +514,6 @@ class Check { } } } - //error } @@ -583,7 +536,6 @@ class Check { ] ] as FieldDeclaration - val List a = newArrayList a.add(fieldInSuperClass) @@ -738,10 +690,6 @@ class Check { } } - - - - def static publicReferences(List fragmentNames, TypeDeclaration targetTypeDecl) { references("public", fragmentNames, targetTypeDecl) } @@ -756,7 +704,4 @@ class Check { - - - } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend index 7f7c108..cd0901b 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend @@ -149,29 +149,29 @@ class ClassRefactoring implements Refactoring { if(refactoringType == RefactoringType.NEW_METHOD) { val compUnit = Utils.getCompilationUnit(target.head) - val iCompUnit = compUnit.getJavaElement() as ICompilationUnit + val iCompUnit = compUnit.getJavaElement as ICompilationUnit val parser = ASTParser.newParser(AST.JLS12); parser.resolveBindings = true - parser.source = iCompUnit; - val newCompUnit = parser.createAST(null) as CompilationUnit; + parser.source = iCompUnit + val newCompUnit = parser.createAST(null) as CompilationUnit newCompUnit.recordModifications val definitionPattern = PatternParser.parse(definitionString) - val newMethod = builder.build(definitionPattern, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head - + val newMethod = builder.build(definitionPattern, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head as MethodDeclaration + val targetClass = newCompUnit.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == Utils.getTypeDeclaration(target.head).resolveBinding.qualifiedName ] as TypeDeclaration targetClass.bodyDeclarations.add(newMethod) val edits2 = newCompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true)) edits2.apply(document) val newSource = document.get; - iCompUnit.getBuffer().setContents(newSource); + iCompUnit.getBuffer.setContents(newSource) - val parser2 = ASTParser.newParser(AST.JLS12); + val parser2 = ASTParser.newParser(AST.JLS12) parser2.resolveBindings = true parser2.source = iCompUnit - val newCompUnit2 = parser2.createAST(null) as CompilationUnit; + val newCompUnit2 = parser2.createAST(null) as CompilationUnit val targetClass2 = newCompUnit2.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == Utils.getTypeDeclaration(target.head).resolveBinding.qualifiedName] as TypeDeclaration val newMethodInClass = targetClass2.bodyDeclarations.findFirst[it instanceof MethodDeclaration && (it as MethodDeclaration).name.identifier == (newMethod as MethodDeclaration).name.identifier] as MethodDeclaration @@ -185,18 +185,18 @@ class ClassRefactoring implements Refactoring { && Check.isSubTypeOf(Check.type(definition), Check.type(Check.overridenMethodFrom(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)))) && Check.visibility(Check.overridenMethodFrom(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target))) != "public" && Check.publicReferences(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)).empty - && false - } else { - true - } - + //&& false + } else { + true + } + newCompUnit2.recordModifications targetClass2.bodyDeclarations.remove(newMethodInClass) val edits3 = newCompUnit2.rewrite(document, iCompUnit.javaProject.getOptions(true)) edits3.apply(document) - val newSource2 = document.get; - iCompUnit.getBuffer().setContents(newSource2); + val newSource2 = document.get + iCompUnit.getBuffer.setContents(newSource2) return safeCheck @@ -213,8 +213,6 @@ class ClassRefactoring implements Refactoring { && Check.isSubTypeOf(Check.type(target), Check.type(Check.overridenMethodFrom(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))))) && Check.visibility(Check.overridenMethodFrom(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target)))) != "public" && Check.publicReferences(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))).empty - - } else { true } @@ -260,13 +258,12 @@ class ClassRefactoring implements Refactoring { } val compUnit = Utils.getCompilationUnit(target.head) - val targetICompUnit = compUnit.getJavaElement() as ICompilationUnit + val targetICompUnit = compUnit.getJavaElement as ICompilationUnit - val parser = ASTParser.newParser(AST.JLS12); + val parser = ASTParser.newParser(AST.JLS12) parser.resolveBindings = true - parser.source = targetICompUnit; - val targetCompUnit = parser.createAST(null) as CompilationUnit; - + parser.source = targetICompUnit + val targetCompUnit = parser.createAST(null) as CompilationUnit targetCompUnit.recordModifications val definitionPattern = PatternParser.parse(definitionString) @@ -284,7 +281,6 @@ class ClassRefactoring implements Refactoring { val superClassType = targetTypeDeclaration.superclassType val superClassTypeBinding = superClassType.resolveBinding - //needs work var TypeDeclaration superClass for(t : typeDeclList) { if (t.resolveBinding.toString == superClassTypeBinding.toString) { @@ -293,7 +289,7 @@ class ClassRefactoring implements Refactoring { } val compUnit2 = Utils.getCompilationUnit(superClass) - superICompUnit = compUnit2.getJavaElement() as ICompilationUnit + superICompUnit = compUnit2.getJavaElement as ICompilationUnit if (superICompUnit != targetICompUnit) { superCompUnit = Utils.getCompilationUnit(superClass) @@ -318,16 +314,15 @@ class ClassRefactoring implements Refactoring { val edits2 = targetCompUnit.rewrite(document, targetICompUnit.javaProject.getOptions(true)) edits2.apply(document) - val newSource = document.get; - targetICompUnit.getBuffer().setContents(newSource); - + val newSource = document.get + targetICompUnit.getBuffer.setContents(newSource) if(superICompUnit !== null && superICompUnit != targetICompUnit) { val superDocument = new Document(superICompUnit.source) val edits3 = superCompUnit.rewrite(superDocument, superICompUnit.javaProject.getOptions(true)) edits3.apply(superDocument) val superSource = superDocument.get - superICompUnit.getBuffer().setContents(superSource) + superICompUnit.getBuffer.setContents(superSource) } } catch (Exception e) { println(e) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend index 8af0c18..a31ea43 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend @@ -14,10 +14,10 @@ import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.ASTParser import org.eclipse.jdt.core.dom.CompilationUnit import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jface.text.Document import org.eclipse.jface.text.IDocument import static hu.elte.refjava.api.Check.* -import org.eclipse.jface.text.Document class LambdaRefactoring implements Refactoring { @@ -190,10 +190,10 @@ class LambdaRefactoring implements Refactoring { val compUnit = Utils.getCompilationUnit(target.head) val iCompUnit= compUnit.getJavaElement() as ICompilationUnit - val parser = ASTParser.newParser(AST.JLS12); + val parser = ASTParser.newParser(AST.JLS12) parser.resolveBindings = true - parser.source = iCompUnit; - val newCompUnit = parser.createAST(null) as CompilationUnit; + parser.source = iCompUnit + val newCompUnit = parser.createAST(null) as CompilationUnit newCompUnit.recordModifications val replacementLambdaExpression = PatternParser.parse(replacementString).patterns.get(0) as PMemberFeatureCall @@ -217,7 +217,7 @@ class LambdaRefactoring implements Refactoring { val edits3 = interfaceCompUnit.rewrite(interfaceDocument, interfaceICompUnit.javaProject.getOptions(true)) edits3.apply(interfaceDocument) val interfaceSource = interfaceDocument.get - interfaceICompUnit.getBuffer().setContents(interfaceSource) + interfaceICompUnit.getBuffer.setContents(interfaceSource) } else { //if the interface's document is the same as the target document, we just simply remove the interface from the target document and then add the new val newInterface = builder.buildNewInterface(replacementLambdaExpression, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) @@ -227,10 +227,10 @@ class LambdaRefactoring implements Refactoring { } } - val edits2 = newCompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true) ) - edits2.apply(document); - val String newSource = document.get(); - iCompUnit.getBuffer().setContents(newSource); + val edits2 = newCompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true)) + edits2.apply(document) + val String newSource = document.get + iCompUnit.getBuffer.setContents(newSource) } catch (Exception e) { println(e) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend index f83d9da..3d4277b 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend @@ -1,11 +1,11 @@ package hu.elte.refjava.api +import java.lang.reflect.Type import java.util.List +import java.util.Map import org.eclipse.jdt.core.dom.ASTNode -import org.eclipse.jface.text.IDocument import org.eclipse.jdt.core.dom.TypeDeclaration -import java.util.Map -import java.lang.reflect.Type +import org.eclipse.jface.text.IDocument interface Refactoring { @@ -23,7 +23,7 @@ interface Refactoring { TARGET_MATCH_FAILED } - def void init(List target, IDocument document, List allTypeDeclInWorkspace) {} + def void init(List target, IDocument document, List allTypeDeclInWorkspace) def Status apply() diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend index 7a4fce0..aa64043 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend @@ -107,8 +107,7 @@ class PatternMatcher { //matching constructor call name var boolean nameCheck if (constCall.metaName !== null) { - //TODO - nameCheck = true + nameCheck = nameBindings.get((constCall.metaName as PMetaVariable).name) == classInstance.type.toString } else { nameCheck = constCall.name == classInstance.type.toString } @@ -116,13 +115,8 @@ class PatternMatcher { //matching constructor call's methods var boolean anonClassCheck if (classInstance.anonymousClassDeclaration !== null && constCall.elements !== null) { - //if (constCall.elements.size != classInstance.anonymousClassDeclaration.bodyDeclarations.size) { - //return false - //} else { - anonClassCheck = doMatchChildren(constCall.elements, classInstance.anonymousClassDeclaration.bodyDeclarations) - //} + anonClassCheck = doMatchChildren(constCall.elements, classInstance.anonymousClassDeclaration.bodyDeclarations) } else { - //TODO anonClassCheck = true } @@ -135,8 +129,7 @@ class PatternMatcher { //matching method name var boolean nameCheck if(pMethodDecl.prefix.metaName !== null) { - //TODO - nameCheck = true + nameCheck = nameBindings.get((pMethodDecl.prefix.metaName as PMetaVariable).name) == methodDecl.name.identifier } else { nameCheck = pMethodDecl.prefix.name == methodDecl.name.identifier } @@ -150,12 +143,11 @@ class PatternMatcher { case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 } - + //matching method return value var boolean returnCheck if(pMethodDecl.prefix.metaType !== null) { - //TODO - returnCheck = true + returnCheck = typeBindings.get((pMethodDecl.prefix.metaType as PMetaVariable).name).typeName == methodDecl.returnType2.resolveBinding.qualifiedName } else { returnCheck = methodDecl.returnType2.resolveBinding.qualifiedName == typeReferenceQueue.remove } @@ -178,6 +170,7 @@ class PatternMatcher { } } else if (pMethodDecl.metaArguments !== null) { //TODO + parameterBindings.get("ASD") parameterCheck = true } @@ -197,8 +190,7 @@ class PatternMatcher { if (featureCall.feature !== null) { nameCheck = featureCall.feature == methodInv.name.identifier } else { - //TODO - nameCheck = true + nameCheck = nameBindings.get((featureCall.metaFeature as PMetaVariable).name) == methodInv.name.identifier } //matching method invocation parameters @@ -226,8 +218,7 @@ class PatternMatcher { //matching variable declaration name var boolean nameCheck if (varDecl.metaName !== null) { - //TODO - nameCheck = true + nameCheck = nameBindings.get((varDecl.metaName as PMetaVariable).name) == (varDeclStatement.fragments.head as VariableDeclarationFragment).name.identifier } else { nameCheck = varDecl.name == (varDeclStatement.fragments.head as VariableDeclarationFragment).name.identifier } @@ -237,8 +228,7 @@ class PatternMatcher { if(varDecl.type !== null) { typeCheck = varDeclStatement.type.resolveBinding.qualifiedName == typeReferenceQueue.remove } else { - //TODO - typeCheck = true + typeCheck = varDeclStatement.type.resolveBinding.qualifiedName == typeBindings.get((varDecl.metaType as PMetaVariable).name).typeName } return nameCheck && typeCheck @@ -249,8 +239,7 @@ class PatternMatcher { //matching field declaration name var boolean nameCheck if (varDecl.metaName !== null) { - //TODO - nameCheck = true + nameCheck = nameBindings.get((varDecl.metaName as PMetaVariable).name) == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier } else { nameCheck = varDecl.name == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier } @@ -270,15 +259,12 @@ class PatternMatcher { if(varDecl.type !== null) { typeCheck = fieldDecl.type.resolveBinding.qualifiedName == typeReferenceQueue.remove } else { - //TODO - typeCheck = true + typeCheck = fieldDecl.type.resolveBinding.qualifiedName == typeBindings.get((varDecl.metaType as PMetaVariable).name).typeName } return nameCheck && visibilityCheck && typeCheck } - - def private dispatch doMatch(PExpression anyOtherPattern, ASTNode anyOtherNode) { false } @@ -328,13 +314,13 @@ class PatternMatcher { return true } - var List preTargetExpression = patterns.clone.takeWhile[ !(it instanceof PTargetExpression) ].toList.reverse + var List preTargetExpression = patterns.clone.takeWhile[ !(it instanceof PTargetExpression) ].toList var List postTargetExpression = patterns.clone.reverse.takeWhile[ !(it instanceof PTargetExpression) ].toList.reverse val List targetEnvironment = newArrayList targetEnvironment.addAll( (selectedNodes.head.parent as Block).statements ) - var List preSelectedNodes = (targetEnvironment as List).clone.takeWhile[ it != selectedNodes.head ].toList.reverse + var List preSelectedNodes = (targetEnvironment as List).clone.takeWhile[ it != selectedNodes.head ].toList var List postSelectedNodes = (targetEnvironment as List).clone.reverse.takeWhile[ it != selectedNodes.last ].toList.reverse var Boolean pre diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend index 4687bf2..1388e00 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend @@ -11,7 +11,6 @@ import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jdt.core.dom.VariableDeclarationStatement import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.common.types.JvmTypeReference -import org.eclipse.jdt.core.ICompilationUnit class Utils { diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend index bef42a2..33a3bf3 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend @@ -6,6 +6,8 @@ import hu.elte.refjava.api.ClassRefactoring import hu.elte.refjava.api.LambdaRefactoring import hu.elte.refjava.api.LocalRefactoring import hu.elte.refjava.api.patterns.Utils +import hu.elte.refjava.lang.refJava.MetaVariableType +import hu.elte.refjava.lang.refJava.PMetaVariable import hu.elte.refjava.lang.refJava.SchemeInstanceRule import hu.elte.refjava.lang.refJava.SchemeType import java.lang.reflect.Type @@ -16,8 +18,6 @@ import org.eclipse.xtext.serializer.ISerializer import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder -import hu.elte.refjava.lang.refJava.PMetaVariable -import hu.elte.refjava.lang.refJava.MetaVariableType class RefJavaJvmModelInferrer extends AbstractModelInferrer { diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/scoping/RefJavaImplicitlyImportedFeatures.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/scoping/RefJavaImplicitlyImportedFeatures.xtend index a3a38d8..201bf59 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/scoping/RefJavaImplicitlyImportedFeatures.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/scoping/RefJavaImplicitlyImportedFeatures.xtend @@ -1,7 +1,7 @@ package hu.elte.refjava.lang.scoping -import org.eclipse.xtext.xbase.scoping.batch.ImplicitlyImportedFeatures import hu.elte.refjava.api.Check +import org.eclipse.xtext.xbase.scoping.batch.ImplicitlyImportedFeatures class RefJavaImplicitlyImportedFeatures extends ImplicitlyImportedFeatures { diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend index 2f7c06a..7d7ce56 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend @@ -1,9 +1,9 @@ package hu.elte.refjava.lang.validation import hu.elte.refjava.lang.refJava.MetaVariable +import hu.elte.refjava.lang.refJava.PBlockExpression import hu.elte.refjava.lang.refJava.PExpression import hu.elte.refjava.lang.refJava.PMetaVariable -import hu.elte.refjava.lang.refJava.PBlockExpression import hu.elte.refjava.lang.refJava.PTargetExpression import hu.elte.refjava.lang.refJava.RefJavaPackage import hu.elte.refjava.lang.refJava.SchemeInstanceRule @@ -14,7 +14,6 @@ import org.eclipse.xtext.validation.Check import static hu.elte.refjava.lang.refJava.RefJavaPackage.Literals.* - class RefJavaValidator extends AbstractRefJavaValidator { @Check From f709ba09b22001ea8c0515c5c94c04d59a421efa Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Fri, 17 Apr 2020 00:53:09 +0200 Subject: [PATCH 07/14] asd --- hu.elte.refjava.lang/.classpath | 6 +++++- hu.elte.refjava.lang/META-INF/MANIFEST.MF | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/hu.elte.refjava.lang/.classpath b/hu.elte.refjava.lang/.classpath index fc5b6d4..ea83ab5 100644 --- a/hu.elte.refjava.lang/.classpath +++ b/hu.elte.refjava.lang/.classpath @@ -3,7 +3,11 @@ - + + + + + diff --git a/hu.elte.refjava.lang/META-INF/MANIFEST.MF b/hu.elte.refjava.lang/META-INF/MANIFEST.MF index b81c156..91196fa 100644 --- a/hu.elte.refjava.lang/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang/META-INF/MANIFEST.MF @@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.emf.ecore, org.eclipse.xtext.common.types, org.eclipse.xtext.xbase.lib;bundle-version="2.14.0", - org.objectweb.asm;resolution:=optional, + org.objectweb.asm;bundle-version="[7.1.0,7.2.0)";resolution:=optional, org.eclipse.xtext.util, org.eclipse.emf.common, org.eclipse.xtend.lib;bundle-version="2.14.0", From 881c58ecf8daee8646f706974aa9656a672b10ff Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Fri, 24 Apr 2020 00:32:17 +0200 Subject: [PATCH 08/14] Added testing, finalizing meta variable default values, minor fixes --- .../control/wizards/RefJavaWizard.xtend | 2 +- .../refjava/lang/ide/RefJavaIdeSetup.xtend | 1 - hu.elte.refjava.lang.tests/.classpath | 30 ++ hu.elte.refjava.lang.tests/.project | 34 +++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 15 + .../org.eclipse.ltk.core.refactoring.prefs | 2 + .../META-INF/MANIFEST.MF | 28 ++ .../lang/tests/.ASTBuilderTests.java._trace | Bin 0 -> 12630 bytes .../lang/tests/.ASTBuilderTests.xtendbin | Bin 0 -> 6476 bytes .../tests/.PatternMatcherTests.java._trace | Bin 0 -> 5294 bytes .../lang/tests/.PatternMatcherTests.xtendbin | Bin 0 -> 4973 bytes .../tests/.RefJavaParsingTest.java._trace | Bin 0 -> 1041 bytes .../lang/tests/.RefJavaParsingTest.xtendbin | Bin 0 -> 3400 bytes .../refjava/lang/tests/.TestUtils.java._trace | Bin 0 -> 775 bytes .../refjava/lang/tests/.TestUtils.xtendbin | Bin 0 -> 2595 bytes .../lang/tests/ASTBuilderTests$1.class | Bin 0 -> 1706 bytes .../lang/tests/ASTBuilderTests$2.class | Bin 0 -> 1777 bytes .../refjava/lang/tests/ASTBuilderTests.class | Bin 0 -> 6685 bytes .../lang/tests/PatternMatcherTests.class | Bin 0 -> 3808 bytes .../tests/RefJavaInjectorProvider$1.class | Bin 0 -> 1021 bytes .../tests/RefJavaInjectorProvider$2.class | Bin 0 -> 905 bytes .../lang/tests/RefJavaInjectorProvider.class | Bin 0 -> 1991 bytes .../lang/tests/RefJavaParsingTest.class | Bin 0 -> 2930 bytes .../elte/refjava/lang/tests/TestUtils.class | Bin 0 -> 1309 bytes hu.elte.refjava.lang.tests/build.properties | 7 + .../lang/tests/RefJavaInjectorProvider.java | 69 +++++ .../refjava/lang/tests/ASTBuilderTests.xtend | 95 ++++++ .../lang/tests/PatternMatcherTests.xtend | 62 ++++ .../lang/tests/RefJavaParsingTest.xtend | 30 ++ .../elte/refjava/lang/tests/TestUtils.xtend | 17 ++ .../lang/tests/.ASTBuilderTests.java._trace | Bin 0 -> 1754 bytes .../lang/tests/.ASTBuilderTests.xtendbin | Bin 0 -> 4869 bytes .../tests/.PatternMatcherTests.java._trace | Bin 0 -> 1170 bytes .../lang/tests/.PatternMatcherTests.xtendbin | Bin 0 -> 3820 bytes .../refjava/lang/tests/ASTBuilderTests.class | Bin 0 -> 3906 bytes .../lang/tests/PatternMatcherTests.class | Bin 0 -> 2941 bytes .../tests/RefJavaInjectorProvider$1.class | Bin 0 -> 1021 bytes .../tests/RefJavaInjectorProvider$2.class | Bin 0 -> 905 bytes .../lang/tests/RefJavaInjectorProvider.class | Bin 0 -> 1991 bytes .../lang/tests/.ASTBuilderTests.java._trace | Bin 0 -> 12630 bytes .../lang/tests/.ASTBuilderTests.xtendbin | Bin 0 -> 6476 bytes .../tests/.PatternMatcherTests.java._trace | Bin 0 -> 5294 bytes .../lang/tests/.PatternMatcherTests.xtendbin | Bin 0 -> 4973 bytes .../tests/.RefJavaParsingTest.java._trace | Bin 0 -> 1041 bytes .../lang/tests/.RefJavaParsingTest.xtendbin | Bin 0 -> 3400 bytes .../refjava/lang/tests/.TestUtils.java._trace | Bin 0 -> 775 bytes .../refjava/lang/tests/.TestUtils.xtendbin | Bin 0 -> 2595 bytes .../refjava/lang/tests/ASTBuilderTests.java | 127 ++++++++ .../lang/tests/PatternMatcherTests.java | 72 +++++ .../lang/tests/RefJavaParsingTest.java | 47 +++ .../hu/elte/refjava/lang/tests/TestUtils.java | 22 ++ hu.elte.refjava.lang.ui.tests/.classpath | 26 ++ hu.elte.refjava.lang.ui.tests/.project | 34 +++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 7 + .../META-INF/MANIFEST.MF | 19 ++ .../build.properties | 6 + .../ui/tests/RefJavaUiInjectorProvider.java | 17 ++ .../ui/tests/RefJavaUiInjectorProvider.class | Bin 0 -> 747 bytes ...a (refjava) Language Infrastructure.launch | 2 +- hu.elte.refjava.lang/META-INF/MANIFEST.MF | 3 +- .../elte/refjava/api/BlockRefactoring.xtend | 61 +++- .../src/hu/elte/refjava/api/Check.xtend | 276 ++++++++++++++++-- .../elte/refjava/api/ClassRefactoring.xtend | 253 +++++++--------- .../elte/refjava/api/LambdaRefactoring.xtend | 137 ++++----- .../elte/refjava/api/LocalRefactoring.xtend | 38 ++- .../src/hu/elte/refjava/api/Refactoring.xtend | 12 +- .../refjava/api/patterns/ASTBuilder.xtend | 207 ++++++++----- .../refjava/api/patterns/PatternMatcher.xtend | 276 +++++++++++++++--- .../refjava/api/patterns/PatternParser.xtend | 10 +- .../hu/elte/refjava/api/patterns/Utils.xtend | 39 ++- .../hu/elte/refjava/lang/GenerateRefJava.mwe2 | 14 +- .../src/hu/elte/refjava/lang/RefJava.xtext | 38 +-- .../lang/compiler/RefJavaCompiler.xtend | 56 +--- .../lang/typesystem/RefJavaTypeComputer.xtend | 65 ++--- .../lang/validation/RefJavaValidator.xtend | 62 +++- 77 files changed, 1801 insertions(+), 521 deletions(-) create mode 100644 hu.elte.refjava.lang.tests/.classpath create mode 100644 hu.elte.refjava.lang.tests/.project create mode 100644 hu.elte.refjava.lang.tests/.settings/org.eclipse.core.resources.prefs create mode 100644 hu.elte.refjava.lang.tests/.settings/org.eclipse.jdt.core.prefs create mode 100644 hu.elte.refjava.lang.tests/.settings/org.eclipse.ltk.core.refactoring.prefs create mode 100644 hu.elte.refjava.lang.tests/META-INF/MANIFEST.MF create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$1.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$2.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/PatternMatcherTests.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaParsingTest.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/TestUtils.class create mode 100644 hu.elte.refjava.lang.tests/build.properties create mode 100644 hu.elte.refjava.lang.tests/src-gen/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.java create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/ASTBuilderTests.xtend create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/PatternMatcherTests.xtend create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/RefJavaParsingTest.xtend create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/TestUtils.xtend create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/ASTBuilderTests.class create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/PatternMatcherTests.class create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class create mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/ASTBuilderTests.java create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/PatternMatcherTests.java create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/TestUtils.java create mode 100644 hu.elte.refjava.lang.ui.tests/.classpath create mode 100644 hu.elte.refjava.lang.ui.tests/.project create mode 100644 hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.core.resources.prefs create mode 100644 hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.jdt.core.prefs create mode 100644 hu.elte.refjava.lang.ui.tests/META-INF/MANIFEST.MF create mode 100644 hu.elte.refjava.lang.ui.tests/build.properties create mode 100644 hu.elte.refjava.lang.ui.tests/src-gen/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.java create mode 100644 hu.elte.refjava.lang.ui.tests/test-bin/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.class diff --git a/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend b/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend index f2e8027..784ee96 100644 --- a/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend +++ b/hu.elte.refjava.control/src/hu/elte/refjava/control/wizards/RefJavaWizard.xtend @@ -58,7 +58,7 @@ class RefJavaWizard extends Wizard { val compUnit = parser.createAST(null) as CompilationUnit val selectedNodes = SelectionNodeFinder.selectedNodes(selection, compUnit) - + val provider = editor.documentProvider val document = provider.getDocument(editor.editorInput) diff --git a/hu.elte.refjava.lang.ide/src/hu/elte/refjava/lang/ide/RefJavaIdeSetup.xtend b/hu.elte.refjava.lang.ide/src/hu/elte/refjava/lang/ide/RefJavaIdeSetup.xtend index 37d34b9..676cd03 100644 --- a/hu.elte.refjava.lang.ide/src/hu/elte/refjava/lang/ide/RefJavaIdeSetup.xtend +++ b/hu.elte.refjava.lang.ide/src/hu/elte/refjava/lang/ide/RefJavaIdeSetup.xtend @@ -15,6 +15,5 @@ class RefJavaIdeSetup extends RefJavaStandaloneSetup { override createInjector() { Guice.createInjector(Modules2.mixin(new RefJavaRuntimeModule, new RefJavaIdeModule)) - //this.createInjectorAndDoEMFRegistration() } } diff --git a/hu.elte.refjava.lang.tests/.classpath b/hu.elte.refjava.lang.tests/.classpath new file mode 100644 index 0000000..8e1099d --- /dev/null +++ b/hu.elte.refjava.lang.tests/.classpath @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hu.elte.refjava.lang.tests/.project b/hu.elte.refjava.lang.tests/.project new file mode 100644 index 0000000..a1eab17 --- /dev/null +++ b/hu.elte.refjava.lang.tests/.project @@ -0,0 +1,34 @@ + + + hu.elte.refjava.lang.tests + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/hu.elte.refjava.lang.tests/.settings/org.eclipse.core.resources.prefs b/hu.elte.refjava.lang.tests/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..fdaa299 --- /dev/null +++ b/hu.elte.refjava.lang.tests/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=windows-1250 diff --git a/hu.elte.refjava.lang.tests/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang.tests/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..a3f49f6 --- /dev/null +++ b/hu.elte.refjava.lang.tests/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=12 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=12 diff --git a/hu.elte.refjava.lang.tests/.settings/org.eclipse.ltk.core.refactoring.prefs b/hu.elte.refjava.lang.tests/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000..b196c64 --- /dev/null +++ b/hu.elte.refjava.lang.tests/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/hu.elte.refjava.lang.tests/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.tests/META-INF/MANIFEST.MF new file mode 100644 index 0000000..d2d1a5c --- /dev/null +++ b/hu.elte.refjava.lang.tests/META-INF/MANIFEST.MF @@ -0,0 +1,28 @@ +Manifest-Version: 1.0 +Automatic-Module-Name: hu.elte.refjava.lang.tests +Bundle-ManifestVersion: 2 +Bundle-Name: hu.elte.refjava.lang.tests +Bundle-Vendor: My Company +Bundle-Version: 1.0.0.qualifier +Bundle-SymbolicName: hu.elte.refjava.lang.tests;singleton:=true +Bundle-ActivationPolicy: lazy +Require-Bundle: hu.elte.refjava, + org.junit.jupiter.api;bundle-version="[5.0.0,6.0.0)", + org.eclipse.xtext.testing, + org.eclipse.xtext.xbase.testing, + org.objectweb.asm;bundle-version="[7.1.0,7.2.0)";resolution:=optional, + org.eclipse.jdt.core;bundle-version="3.19.0", + org.eclipse.xtext.xbase.lib;bundle-version="2.14.0", + com.google.guava, + org.eclipse.xtext.xbase.lib;bundle-version="2.14.0", + org.eclipse.xtend.lib, + org.eclipse.xtend.lib.macro, + org.eclipse.ui.editors;bundle-version="3.11.200", + org.eclipse.jface.text;bundle-version="3.14.0", + org.eclipse.core.runtime;bundle-version="3.15.0", + org.eclipse.jdt.core;bundle-version="3.15.0", + org.eclipse.jdt.ui;bundle-version="3.15.0", + org.eclipse.core.resources;bundle-version="3.13.100", + org.eclipse.xtext.ui;bundle-version="2.15.0" +Bundle-RequiredExecutionEnvironment: JavaSE-12 +Export-Package: hu.elte.refjava.lang.tests;x-internal=true diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..025acd7cc1f2386a692f028c5f45c9be58cff372 GIT binary patch literal 12630 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..90885dce2bae06b3206307971cc22421620624ed GIT binary patch literal 6476 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..98e66ef3716d56d80a4b4a2decfe078ae0e82aac GIT binary patch literal 5294 zcmZXXdvH|s70377n|pV&A#pbwh#L|hfjl+Y1VRi6=#i%pd8I<4*Ei)?Ev5b%EKnrxrl(tBFe&_tw z-A(!LbH1N*eviA{3oe(-0LYDjNVv3-r2QY?jo|9vc3)_EW_CJs&-5MJC+8+ZGn2dS z49!m8J9}@)nVg-SzGqi@a&~Il^gUmZwVvIx)4R56k=9ISP{a#kTvd_2U@!>UNIu~6 zxghe@6%7qY_h0MxBmJPRu@TiD*VWb{y)3MzCdA*h*VVZyBClOjB#6A@A$rw=8ARR- zHZ|dxqd_D+@?L@&WfPTtntrgUr(g(Z7N#SKgC;l>Q2BAi-%9ird*&9y6B6;a1nvj(xr z2nMmUlpwlgC1ouuF@xxyaAj*3s$uJ!!4>G1vk~1RQmw6^h2tXH(14To7_F_SGeYzs z52FV|h(0z!$2!lgXs)CvDVsM;p;`k#B3mCBG}2<;!u& z<3?K>F3AYdKe!p)7((>4ut`2BY-Bxp+Dqv{FQuPsB098*vQGj`0m?3SQsd!HNwE%b zuDuf%{YXsXZ$(FbzP$riJuhySznw4ng2)va{R^9v9&K+&{lcJ1885aL5#@`ugvl0i zuNu^vGl~SU@w)bQX;xDil(fJ@YAE3T^KlRP~ ziv+Q=9i8&h`I7b6*%gF*$9n9qwVj=~(_X%{QUcrMkr`jVrijl3cBPm4!t#WgT}fty z2<)J>v#SfVNJ`u<|1#TatjR9?{VUe(HC2pNn1UU$wve3{JCJodRLv+~5=aKQc}ZaR zdy1r$5!f58IE52p3SFWXG9uV zPsF^G&Uh(xM3`_+gei3bi~&lgLe%>05Ya)gzi%xr`^o@*LiEHz5$)^4WfxlI7ljei zg<8TREfl^lKSg@t4WmeqI9k`&C(UZgjxJ$xGqJfK2@=QMyo4mJj39B+L)jlq%1)X^ zf@DR*TDeo&nw~U$YuDmN&-kQSMv$yGDdSxih;|LhHP+m^bvWjd*eAbN$&j^u9sVE` z>&Z|RV-=>59I_^)9dn6UWIZ`l%_zT-NQQJ{E=iEQ$x|e)j38-SSqeR323>E`HW}qN z6Ow73TEkP*Je3HNIi5UA znzB}&SW7OB;OMWQj@Hn9Uzq{RmUn3q+0sP z%#)c~-%O^W1e-*V8XqF_b~d-Sld0%oHi;nh1YRLNwO#UGHjw&7xM^S$KBot*S37!K z6{*9<4L2Zu$B^HYGJ@2RCdv*pVFsx)BYzs)i0X^h#+7su?{@2DxuYg7lQ9NLm>|dWV&z@R*oE*PGs9GMdzRH%~pmQ}5=fM3A22 zsYF^CL3(c^?dDVi?PhN!%{*0!q@_y<(vJiv`^Zn(BmN>m`k7vua!H<8OTW}anWESD zHi#g7yhoaGVDrz*rCFfAk;w$8eldy5CmUXUoz*UhsWeEI(g*1J}7BOT# zT&nWiQv6&&=8JGbSR#fEU$frq8*pj=S1~eQh&#}+aMfMnHvCvsWWF$D0h_o0W16Q> z@Sp%=OGI9^>=t>f=wnN2l(D;pj0O=`h5aH$S)#{t&&K~J|--xY!eTN5ix=r zIU(-D7iz`WHbWM0BV2&7o$f-xjRK6#i5b;$O3YwIADi21) zRX?$|h{0LyQTc?4zUHhpOBtN}u!zvHALso{7^Mu(RJUY#WO+i}nQBl>2h^QupYmsX zG{2m|nKMJwM7ih6)UcU--{{i@H$t_Lcx?1 zvRYwya))$cT@R%q4a)()8Vg5-uUt7eGT}JESC7hCH*0ReA zcR&o;HN9%yr<~u=r1q=WF8IWd-O{7{zq7w>x$+gy6?|gIJ}eTd;VL&gHJ}<4zg}n{ whU`22>?ghKpJ`^lz?YQI3^{#B`OC=9Eo)c4;@*N!47nTW!a+;681jMq4~CHT5&!@I literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..adbd320b68d766bf18843503b6ab48f78eae68a6 GIT binary patch literal 4973 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 Jxs-ob{{u{|Dpmjh literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..6b5705648ef7c8b3765fe60192eb5f02a53c6787 GIT binary patch literal 1041 zcmZwFJ!lhQ7zgn8xy$9+7Gf4fQz{jiT)mRMmaBf^@ zf+bJKRVLbx-8wbLae}|DiLtFqOkr3c=aT<^4g_DLR`mE+v^{C@G)!r}_ftk#a0yNZ@QoDO=6? z$8olUTtVu4HcB&(_U+~i1>Col!$%aI-Eg6R8@9qIaJm}liAGs>jBAXtJ(;v4qXcJA z;CwNcibWjy(wLZFf-7Z7-4sf6C6z12B^Qghuq*S*0fDP1l)Vj6ri6|KZi;6gd0&cW zByg+sGe!m1@0(ZCX(qWBy*B~j&fnWXa53<}&|Scy}z zROyZA;>ct@fOgLgrz J`0qwHgg-;?xJm#3 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..2d8b8fa3c930e63dc0ac5395d0b82306a22735e7 GIT binary patch literal 3400 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..be78925570d28f6a1808985911c002a717c02b7d GIT binary patch literal 775 zcmY+CziSjh6vy|??%uewzh>`;0TJ(nh!7IDJ`kKYAc)um45U5C`imolw;m~st!0A$ zf>o@96jmwHSy-fto!D4tBif`1@y%Njv(3VX&-=db%&?y4g#h+1EO^3vz+4vKEj@cx zR@1sFUsg|EOy-kvI@x?$*43<@m5=GWRzIK4?rhc7=7um|?X@dc&$FIy&Quf;epFI= zfEj*Q1Hwb|C(6ALuWO|)5OBH2_@ze~zUUoI4-_ zfpkWfI|z8Pa0dZA>@W>FM50B2M>n&Ka-$n@>;-rvvy4VYl1Q`&@VLkBwk8MoGvwSj zWIDN(=d=Y!NkUsrWS&zTC6QnGvb#)Rjb^v4dD5tc+$)297-~&h-iA!C yhlT6o2H(EXML~VLE+<+9b|+@X?c$uao1LGMZkKZJ6Zfw6GJ!qr_WKwA2>b&m7I#ko literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..5ccd552244fbf6ff3767d48fe9c0390eafe81311 GIT binary patch literal 2595 zcmaKuc|6qH8^^!MK9(%mcL`0*wUlJ9v1GY3V`MCem{7J5vVZ6f-!B;L7aWv(<(BQFsZef+eV*^T#oTy-%U)Sk+SaGp-#2T1dxLS(g=9cx zj}Ha!xt(bk66holHAbRGqNj;jXC#zFJxzB}#7_phQ$g!{h9`C(@ATQR6fM4QM^KBd ztZZ(+LEj?@Qm0VcPWH*r>1ARK`ilN{_k4Dcc31($L`w78hK`BXoZska8i4_$I+hY_ z-g?S9Ef%+iDhwi|cS0L+7{*Bph>7LJw-kcia7A4Nb3MmBZSBW0iEffDyUQ`9Qa4$? zy<^jz{BHd9R7$~z7cLt81Ke+;N5d!DV-C>VgWUEaR~Po0T>Z}RPJf=uZt*Tka1&3s zpJ7L?a`Sz?wv)s~rEKlXIUJLa&yh1(&KFZ?o`cL9_kQuF(0c1gU~#>-)STQc``D%LqB|;g-mWmCV)(q*lR| z$|qfJRoM*yiG{2>3N*;trZjty6`{`4GHrK&mw5SDwg70wLy2?6KjMaBzi0O(=k>!m z8K^8$f<5<-1P4cIpgs;WY6GD%zgBL{uFI=b3_EllI=+;0;7m+?jBGs1!;D;8P~Q@z z88@s8T68Ban;T7X+xcvDa;aI`99U$nr3EXPl~EfzPPM>7H;jH#q)0yYD)~5s#glY%a1AYl}w6&MjXq0xB`Onjk#$GL9>fI zE*K+X^uymEhW=by5WFdd-}Z{;vaRX}xDX4MOZimjK-SJEmX-Ko zQsF>D)BS;O$R@igiii>A+`}Qog{N0zWeF2+q&HRxGju_lc471DN zL}XEpAS1dm3Ljod0K)?K$0dU5U0p86M5S9JCDNhTd!#?mHM1d2NFl!S?!_sedn9UB zUp?`eQXyzjxprfd&Cd-prk!BqcKGSCWj4%!aK62)V}17RK_8LHILS-Ftt+@9rQ2-I zo4kB&1bn(pDDUq3JcU_xW75n_8(8&$Rd%rx)`f{!Bs;_?d79k-o^t6Q_>B8*!yhdFHO|N!W6JEcTIzobIGe zYuvO=Vd1m;ao7#Nk3Ez)k(Qvs}&{7`+J>V?yW~1 zV6D3URGrfB?-r)O`W!*KWo)w3laBGY1e>u6qO z%}Hqg97MfsEAxOr;qHJR{v&NF4*;C1qr?1O6v?{v-!z5LAsi{ysJNf+EcQ#N`@u>c!yT0YtzP_c+ zXSLmFt;w_~a3$?tCf}%6x;_g|g(jmeVb*(QaX$x0w85;WcQJ~zzD3B#Mu&?IHyp^e zT;P5wF$%Lc#Cl0sJ05!>u9(N{y7T9@+LX90yu7b*h_G@(IWFhY?AbKSCcz)bA!+J<`U!RJoc1gB5mkHe{@#8WbnTMwm#1^0nzizpWIqE99U zukMjsy4JeUxsms<&)rw5lFWt-i}|b(i%YTqyTL9ZPG#zS4hw0332q0oy=OqHU2ZK5 zZnR`+VkczFY5r|$I4|-uVR`Grqbg$OXh(2e5@G=WE6)E{RX;y?x1b<@cW<|!#T4YU zl^5I6mSn7Vx(N(#XjarT8$P9}enGoOp-JcExhB$l%(Yab*RgafP%0cWg{4w!dwPCA zRcfKaP!NVgA4aQNZRM3dVcFI{NSf~@>M5xh|zX?&iq zU!W$}>Lkc&FTra~qej^+qj&CPBkmo1(Crv!6R_j(fhQS5c|@5S69|?@shqfIDcTGp zb2l&<4QONWl0@G(VLnetVh(j5AQWL`A7R-ni7qW}HE-$0Wy literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$1.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ebab10ea5ec7412a059bb442c71c6cf4583cbdf4 GIT binary patch literal 1706 zcmb7DZEqVz5T3P@Ts#=!h7jIM0Jn8)lY86UJ8z;&X`2Wnw?%SQA-<|UNtBN4Lgz(pANF26n#9Rak6##EcP&_9P`eI$-aplY!h$shb~YZ_dXU8DxwbD0 zeOcI-{fPV|?%T(cbWp@un%A#9m%&_y{N!)$OVC8W( z)D>Xxb`>mGM<~Na6)I3;P;Qujjc%OkXOpu&Z8_>En!#o_8$`*=XdD|nUtBS*GuV5B z`gNCDUyaVslOGs7XmoFixWBuw^eD>`9i{sge84~~DtkIC>_Ilx_AooMuey3dx<}*4 zDBLTeLZ9ihK==qgvEX9{cdkp#d8_a#++|>0M9D-yf5l+C@%?S(8I2$Vcsy@;E$>@kANpl(l*dg7^^sEA_)y%BZl`qp% z0dpd6k;kD#e*kQ@et~N9H+bh~LM6CE?=^}62w;=m)v1s0E^HBE<|yY32V@Pydh2g^ z|9ANCC-N8bJJbB_SC{P$TgWmmiG1Swgdmo~L{lJzx1AdQ$lUeXe+bzEC_wUn<@~KTyI!KUBhP`^X(7 zcsoGuD(NEkl=RwsiUe|BNr{{*8JIO+1rBnd0*aF=@Ju!#`Vy#sqC*u(vqmUH;j7R` z!Bxmn2o(wxQiT#lpu(W-q3Ecv)0QY5)e$IN)seJnP&h>$l%8@O2c=KOHQx;OXPBep ogeXyvnPwUspp;~YAt2K+NrYVo10rz+hK_PQ2g8tzz~&MD2XHN{761SM literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$2.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$2.class new file mode 100644 index 0000000000000000000000000000000000000000..16f42e1c7d7364faa941286337a04283194a441c GIT binary patch literal 1777 zcmb7ETW=dh6h7lzHa-~Qh7c|VYKmKYBYU0M^(3m4wuwM;QzTavm#4KoaW>lSM!V}O z@RN9g2QK0P!7D!samIF4Crw0Z%X`i@d%iQ@oO8zi{QJkB01yB-pv0haJTX;VC^J(> zC*kwZjKgGX7Ah}tbFcs8{v?V=Dtn@F-7#R9LG@+Wpl3@|0NnU^9*$h^T<0!9NB%ybG4Lii!jgqLiM_V>thuD0|VEI8h zQe|N9W(5pbLs)|K3Y4MBV5y-4)_YN+4kynBbmVXlD+U|AbQs1@!z|KxzPPNVGuVEO z{p$`%UkOi7xjoxCpPDX_}OfzMU(r3Ephoo|+*?U>%`)L}hFxfHSJqFDysRxmY zM-Qn9VHWCgBYXfK8gP@rjaPD2;3N2$f$=S)z2G~z0*-#xsx+9wx#&TPqjX}8|jgzpLWEAql zt2)lsb&NJ+i)fv{>f5W@K!}~vxzsUb?%HNvB%=r`zx3s$I9%cGuo~cPOI#apT{tIsZ z3iXSr=sHi6YiW0<-e=I5+9tHfE<+nW2a~)FN~Fc>&k9)Jtd_wgzeEup>Ho3+Xzwe$ zY!dNnD&7cN{o33)z;?~5T@2MF9^v(;VtYnt_0VyoYop^z*Fi@}m!s=R&qtR_FF;pF zuZylPxrJ^Zx!rNmvn2OAK6!8Gdh?S<+cT zkwQfgQ4!p5sR-^YMG++-P^}Raq3$d0iVObn(Z?S={*uS{+_^KkNhWzxv`g+;zVAEV z`Of=oIs57}X8=U-Hx(5MT1N98Bat&a8Dn@XIuZ3GqNx#2&dBDnp3Z@N+w*23Ze;e! zxr#~!4YNeMhsKOpPJud9AX3oWJ6~FK-1Lk`b2%fEa?0x1xHxtpEnNICbnK^RR=WZT1 z_8P+jxr~__QP9{sdxgRpiRv=Ocp@4zl17R*YABH8b7sQRYi6aC+5vMU70u-{JU%dQ zd+Xxr(1iWzxY4mqs=w8wM%xsuXlfo*P`QH}0xNKyhSg|PalV4fmuWwNb#O_x^)!0Z z^6b|pg{%IME0hxoYBp#*Q$*qe?;6NAx=Dd+ZLWp32WDrhZ#L|K^d zrWa4xQg-r3+VWV7y0s#?_AR=TJ&RhCM7 z;aB0~9p@v#;g`}9`-#o0h5&+mxe+5Lai1_txL2^PtnSP98>xR-LoGxN+7+ynS|6vC zk4p<5m%AMr>Yxd{9#^R#s+*Q8Tf-aBNq3;ubPomYrsgFbs6$`}x>W2`u*G@Cv7B)% z=Q%bMWeiA|Lv;N_f&q!1-zz~AmGjhw=Q5|NGR!g&oJ7H?!iFe5XDQ^;jw2X}5+wxP}*$5s{wO zIL8zggTMgxtKh3FY3d$nUpj6V-yoHx#cAq69AHozHKK81!3n-1afhv*rEwv7bf`GA z6ms@aQAZ3BIEZUCyjfnNVJIEH*|Ep;bUl6D36MF7q0h*TrsECDCs# z+ZiELyqERMxv1Q2D<^O_?v;nUk7dd{W6p830h5`?kUG#)K7bFY_@IJI7d>*8T*H0x z2K9Wmo;b~64x2_s;^!k8K8lYi&G+*mgyNX%543T()$aU)I@6V{z6MSoGOi21+AV zCiYs0Ip>J9d}$>tM{-48+op2$(~rmU)d15uiA<`qYwTZ3<~bh2vGQkhqSZ?a~eEeGvd)+QRym=jDE zb{)%_um<1eiv$UY+i!5z+fL1DDUfq zs)6mZ?8OTV>CB!?dcx$d1t?$ZNu`X;4!UL5VE%fE^@sDRml1JP{F&)_SxoeVQf&q_2`m#zU^(t%J zV9~NI=gJzc>_8<)!0MK#u(sti)*Vuw!UdDq@PtKv5r3|<4%$en}xM>=jC(+u{xMdn`lL)mmMkb-Rv^yB*CcuiB>mIa+k3?f4o=}PhkdOxxNZtZrV#5VK`)nPFsfIc#@Hd= zD4|!mDoYfus%fOBktJd4(_l?(QJ>JO9h|C5EzxsZuW{AP;PxrJT~2CU)ib#BY23v| zzjg+9PvM>^ynh-Wc1S!qgA=-NNUU?!IV7IcHJ3IkvEC(066>83uaxJlbck8yTICS4 zS8s5ww8VU33ZHT{l!jD>tS9x=4%S9jql5LNzQ(n>MDJQt8j@8$`U=QLpRj&<*eAE~ zX}!1rKJ0`ayV;o^Mi2%V zk8Z`so;8A9%1-ns`*5|AWK)_&uW|x?%Dw1U9;S2&uCoQu*x=f&9LDGI5Mgy#*^P%e zs$h$<6OUNHJW7d=^5jZZ(Od8szCdqyP!aed9w!t};Z=NzKUM1W4?IEM8fy0vzRXcA z^_#|5NGGV}V|bEub=38KOmbJF#`j{1qk5ij6i;!qlBXKvIfYf!e?Ok)S_5wo!ZRGL z<~>??&M7qVHtX?KuC2k>cpvF31?|pII|W}a=PVToI?GBrOLt4-Own1MEjr7${%2?D zJB{b0OFVD+2{BU66Dl33sd81#;DsrCS0b@mx{;0iY9~&~Q1m4W`D#G|$D;+`DN3l7 zj#bWgTBZEC4nv62We4w(zJ?BZ*sEt3G#!n8+W&uH^fh<+ZIWmA+$^gH3E#i(*+|6ahz4%(h z-AZw{l@V8kUsCr9{L0Eu=X3OHUh+5BLW$wG_?;Zb@O%7$MC)mrF@EKr=L#RjvOnQ3 z)wTF5=hb8$Fsw(ytv(TK*CXw%ArWfR+k+zH)!Rc{m9vO7YZoD( z?rm!mAwNG}xhLoT!aN{C0nW%6r?MW263S66SxKCvE=a;66cA(q zkg@9eZ?wOolUUKTGo5_ykLvU+KuVBA$;zao2ba5h?>+Z*?*8Y$|NJ+A1^hLEF$K3; zJ5>4ae^KmbTXn zv_{9Xv}UKREqB^o+c5*X<34chKuX=VxwxZXJe}E5FtOZeS_0#EHHBXwmB4EX=6(Wn zfhqh-ie6EWNnZ|nX6I!n_;m`CcuB#lHQTlB_1bmD)~q}9XS&vDn9h#r+4B2fb0TQj zzJlCn6X#}%9$)VdG_5d1rWXbymP`e2-tW1A-L`gY-=@JO*X;!1E!w*l#&)mAm}z^x zuFXo&WF}=9RFn9vf|+2yYt3xuRo84=GxzdpRgHG^!H%w01%8K_1a2@_mx=AB>G_tI z!aI0Z!DLr{Q(&ZP#|5_)c(%J+&5Vx5=~|KDelLXtl1XG(VGM)st4r!rwcoLu>f?0g zscO4{YF5=o%kKyy1>J;1= ziT%=5EAi)3co{;VfKmcQ1?kI5r%*LZ{Q2D2_dX)@nA>D6oiX0tRUyuJlP@ zJqffYb(2ly*mZ54xt9gG$^+MDN73cmc%MDgvdktC#hn~pW{Qrp7SRMveQ*)}Z32yz zs=ysArEpg|F;(w0_hV-yq7~Lu9QBFz->`yKrx_CvSjJikAL1iY4l{L^`V`z?OwQGD z*XcCAVT?XTErCziP8Z)yVM8JnK3m9YTW;VBe2PCLu=#@UE_WPak4(R{VRjWe$wsHEA@-dXt3Us1*et__eJJn+ zzD(eu0#yd`EVC^6?0p#q`u`QarvGeK?reKKvcN?8p``7}M^Vj9pRFz?HavWk=e4>_ z9!C>|lRpCqLl0IP1mF^|Kt9#IAz*W9sSl>Wel0E&v=v0s862}RQ%Ezmj;)T zaLG<*{2DT=R5bKWa_nv-_DsQ*2;{ok=eUyzmsFa>pGlXj_~AH_*H7R$4OSm0ycNx# zLOPQKdG3=75UEoCTBv!Dg%GXT?K=BIZG$i2Bw!70g>Q{DTh8Y#Yi1dFm=pcAR7q`j1@-@ zOKHc~?nlq7NTB0wdY!)Av^?s+61l!&)qA@~cA;`4jq?FHj%oRf;c86I*YJ~bil3AG zxZ}(|5XmKeTdJG;a#VHz`HaxOP}AP@ic!j$RSIfo(th- zBNzj?Z*%hg5swHo&GSETHOAXBFj1$g3K}Dw`8zGh$gXCmn?q+Fk91~Z2!B3w>tgtC zg-Oz=JV*F>!q;(wuZa~DL+EN`^ay%-0R095w_p>xg1r|3{$>cc{r>{IK){OxY!Gmj zfNvA<`lPRfJHHeUReFF zbJb@?zWowP15dCo*A4syPuV5oTN_K8;yjWPpOcE3BDcm7=;C)FBpZz`GU|FjiN3JMWa{|g_2QR5QVZ) zT%6}##VF-PQ8!9uQ7jmxiYOM1(gIJ4C8L}ZrJPYNiBjGumqkf8$`xuW6^u$wWLL%i E06}37QUCw| literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5796333db3320554ed0aa077ccecbe1abd45e285 GIT binary patch literal 1021 zcmbVLZBG+H5Pr5jdvKmm3qn;ygo-UhPYm%TC4Omq!4zUBAu)bhu0y-zx@+$C_+6U# z78Cse{wU*ITjC3qL@wFAnb~KanVp&a{^QFx01r`fkrP<&rU6Bkf|w2t<&g{`sXKwC z#3sQG9lT)Eraq+5n)qdGj#QiC%9;yDV0EPD(5GdkZp+AMYLQLf2o!8rC6&7zusPE2 z)QENV-%wiF#{v(kXCbKV2{;YYrf~?I_i+vd4|!bh;bKA{U(EoMO{Hl&?d?;%EB7N3 zC^bzeqdgg`OdlGZ>?#8H&yYuDjju8h#w0BrmsMcCT5E=;7j%s2L=>ogy@TWPx{Dcs z@=3s!X{Ql+DC3HY%L4cQzpy^8VoqRckkL-6t?JQ$SKv0MHIj1J<3Hea5A#@Xaa~~c zWU9|n6_SrB+z@zFeLdo~gP`?O3nAdOOd5yuRAtSX`^S9V$>x~5`9z12NtEtvk?oqc zk7Y~?%qVRs)-r1R)dhc3Yl<6@OcLVuj&1WBcy1Dl1s<6^KN(RhW^=<*j+cuuwvV&4 z&U$9?R#rdo_6h#GK4y~l0%L$B6nXdivWJT(vBp)$^pIf#PXDare8r_#`IYzZK4P}@ q8Q0!2GKXJG%fB&|hD;6?`=}*U`0wyM+{7)GJm$=zXJ3_94&|Q%CK0v( literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class new file mode 100644 index 0000000000000000000000000000000000000000..a868499c6c3738f1b11d00d735c4457b9702bec9 GIT binary patch literal 905 zcmbVKO>fgc5Ph2(yEP^ap#cKrJBI{BO`{4b6>+IR1i4jJs@^yDG}+4CmF!J_7aRbI z13!Qtg_yN05mf<+9(HzSH1pnk{rvU)2Y_w#0yG4+rn8uGOL0Lbr}A9Jxzv-`QfbTh zkWN0ZYot#pwWc^I%(=>_=nVsS0)vH_b>QCm_|eRYl-?;ff%U(fz=i{3%(pttO{w%`kL=WB5gy`^ zz>TyZY3afZJm=;XHn8Yqcu>(uYbvVRhzGvB&o}wrl$JSoWqiV-)pDC;t-&wAGW%Cp z+hW^!!l%!^u=s}Pa}~47(&rdp11*+OrH8nVHd|aa)@p=p{#~5k?tI0qPpmcIvYQp} lCR;;h-kd}6YZMRbRrEdF=ifsI5Ac|^utsDRPxv*^`3;Qk>UIDC literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..454e68b303d5368e84ad6f7d1ebe6932599cf898 GIT binary patch literal 1991 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/TestUtils.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/TestUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..d29098ce55094fb7e316fd193de8e37fad7d17b3 GIT binary patch literal 1309 zcma)6T~8B16g^W~ONRmlK}AtZt*|YHWhoGB4GC6ANXkbn5F-y{+m2;%yW7l85r2pN z5Phk}2jjCp%6PXWR5Ua^?46nWHTRx-W`F(u{sX`&R>BA{Bu|>Uu$9oIczbG|nYwK{ zHC+i$dHO!d17+D>7(s?u*SuRk6&1yB>$&AvYK@^!OC2%<3vN|#^dS;O2)7u9i-;Pz?-gTCrPT zNlDA8<+b$#9_uP%*9ww*{PpDVIbL}(n!g8uqF`*FD-lPsW9^hdZlUGph zG!?}oJZ2bBZsEj~>r$E@{GilP!Ea$IiUgieX_UI;Hf4n{4{1jQKjjFXMlp>UvR0%p zm7uB^cC{-YwE>b%M_F~DZ|zC9CWYs1yM(bTdjU$xc4++hFj5TKwHW?`J5k3|(&xp0 z!($jZJ}=vD<()Wh_(jmD8PZp(?Kx87XQMqXV)^w^-O(`cE}zf5-y6eN$NEx~o3)K|B^9Ix z3r+-!v!BT`06%*I{UitIG)TK4lEWBBjMzxj!YGnNeE;U9PIja*+m1~lgE_jpACs7; z(gPF`!2%3wZHm4{vIa?;ZF?_anbwb`?e#r=6(s(eV5#zSDSolp replacement + + @Test + def void variableDeclarationBuilderTest() { + pattern = PatternParser.parse("public void f() { int a ; char b ; }") + source = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }") + typeRefString = "void|int|char|" + replacement = builder.build(pattern, source.AST, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, typeRefString) + val variableDeclarations = (((source.types.head as TypeDeclaration).bodyDeclarations.head) as MethodDeclaration).body.statements + + assertTrue((replacement.head as MethodDeclaration).body.statements.forall[it instanceof VariableDeclarationStatement]) + assertEquals((pattern.patterns.head as PVariableDeclaration).name, + ((((replacement.head as MethodDeclaration).body.statements.head as VariableDeclarationStatement).fragments.head as VariableDeclarationFragment).name.identifier)) + assertEquals((pattern.patterns.last as PVariableDeclaration).name, + ((((replacement.head as MethodDeclaration).body.statements.last as VariableDeclarationStatement).fragments.head as VariableDeclarationFragment).name.identifier)) + assertEquals((variableDeclarations.head as VariableDeclarationStatement).type.toString, + (((replacement.head as MethodDeclaration).body.statements.head as VariableDeclarationStatement).type.toString)) + assertEquals((variableDeclarations.last as VariableDeclarationStatement).type.toString, + (((replacement.head as MethodDeclaration).body.statements.last as VariableDeclarationStatement).type.toString)) + } + + @Test + def void fieldDeclarationBuilderTest() { + pattern = PatternParser.parse("int a; char b;") + source = TestUtils.getCompliationUnit("class A { public int a; private char b; }") + typeRefString = "int|char|" + replacement = builder.build(pattern, source.AST, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, typeRefString) + val fieldDeclarations = (source.types.head as TypeDeclaration).bodyDeclarations + + assertTrue(replacement.forall[it instanceof FieldDeclaration]) + assertEquals((pattern.patterns.head as PVariableDeclaration).name, + ((replacement.head as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier) + assertEquals((pattern.patterns.last as PVariableDeclaration).name, + ((replacement.last as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier) + assertEquals((fieldDeclarations.head as FieldDeclaration).type.toString, + ((replacement.head as FieldDeclaration).type.toString)) + assertEquals((fieldDeclarations.last as FieldDeclaration).type.toString, + ((replacement.last as FieldDeclaration).type.toString)) + } + + @Test + def void methodDeclarationBuilderTest() { + + fail("not implemented") + + } + + @Test + def void constructorCallBuilderTest() { + + fail("not implemented") + + + } + + @Test + def void methodInvocationBuilderTest() { + + fail("not implemented") + + + + } + + +} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/PatternMatcherTests.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/PatternMatcherTests.xtend new file mode 100644 index 0000000..23f60eb --- /dev/null +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/PatternMatcherTests.xtend @@ -0,0 +1,62 @@ +package hu.elte.refjava.lang.tests + +import hu.elte.refjava.api.patterns.PatternMatcher +import hu.elte.refjava.api.patterns.PatternParser +import hu.elte.refjava.lang.refJava.Pattern +import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.dom.MethodDeclaration +import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.extensions.InjectionExtension +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.^extension.ExtendWith + +import static org.junit.jupiter.api.Assertions.* + +@ExtendWith(InjectionExtension) +@InjectWith(RefJavaInjectorProvider) +package class PatternMatcherTests { + + val matcher = new PatternMatcher(null) + Pattern pattern + CompilationUnit source + + @Test + def void variableDeclarationMatcherTest() { + pattern = PatternParser.parse("type#T1 name#N1 ; type#T2 name#N2 ;") + source = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }") + val block = ((source.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body + assertTrue(matcher.match(pattern, block.statements, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, null)) + } + + @Test + def void fieldDeclarationMatcherTest() { + pattern = PatternParser.parse("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;") + source = TestUtils.getCompliationUnit("class A { public int a ; private char b; } }") + val typeDecl = (source.types.head as TypeDeclaration) + assertTrue(matcher.match(pattern, typeDecl.bodyDeclarations, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, null)) + } + + @Test + def void methodDeclarationMatcherTest() { + pattern = PatternParser.parse("visibility#V1 type#T1 name#N1() {} ; visibility#V2 type#T2 name#N2() {} ;") + source = TestUtils.getCompliationUnit("class A { public void f() {} private int g() {} }") + val typeDecl = (source.types.head as TypeDeclaration) + assertTrue(matcher.match(pattern, typeDecl.bodyDeclarations, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, null)) + } + + @Test + def void methodInvocationTest() { + pattern = PatternParser.parse("new name#N1() { visibility#V1 type#T1 name#N2() {} }.name#N3()") + source = TestUtils.getCompliationUnit("class A { public void f() { new F() { public void apply() {} }.apply(); } }") + val block = ((source.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body + assertTrue( matcher.match(pattern, block.statements, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, null)) + } + + + + + + + +} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/RefJavaParsingTest.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/RefJavaParsingTest.xtend new file mode 100644 index 0000000..076d238 --- /dev/null +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/RefJavaParsingTest.xtend @@ -0,0 +1,30 @@ +/* + * generated by Xtext + */ +package hu.elte.refjava.lang.tests + +import com.google.inject.Inject +import hu.elte.refjava.lang.refJava.File +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.extensions.InjectionExtension +import org.eclipse.xtext.testing.util.ParseHelper +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.^extension.ExtendWith + +@ExtendWith(InjectionExtension) +@InjectWith(RefJavaInjectorProvider) +class RefJavaParsingTest { + @Inject + ParseHelper parseHelper + + @Test + def void loadModel() { + val result = parseHelper.parse(''' + Hello Xtext! + ''') + Assertions.assertNotNull(result) + val errors = result.eResource.errors + Assertions.assertTrue(errors.isEmpty, '''Unexpected errors:«errors.join(", ")»''') + } +} diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/TestUtils.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/TestUtils.xtend new file mode 100644 index 0000000..f262500 --- /dev/null +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/TestUtils.xtend @@ -0,0 +1,17 @@ +package hu.elte.refjava.lang.tests + +import org.eclipse.jdt.core.dom.AST +import org.eclipse.jdt.core.dom.ASTParser +import org.eclipse.jdt.core.dom.CompilationUnit + +class TestUtils { + + def static getCompliationUnit(String str) { + val parser = ASTParser.newParser(AST.JLS12); + parser.resolveBindings = true + parser.source = str.toCharArray + val newCompUnit = parser.createAST(null) as CompilationUnit + newCompUnit + } + +} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..4841bd062d4ac2639757f272366e7342a90a75b3 GIT binary patch literal 1754 zcmZwGUuau(6bJBo?#)eZo0x>8Sz~hBrfbtCO`4=G&aF+GU((!vDRTq2H>(tyZMsm# z+6~?I;Cz}>U&bC~xD6~mOhJW;=z~lYhe$Up6-HqoDEPAB1_Mjg^E)?b(&6JL-*e9I zB)?w-L68Be?*OX^V)@bZq|+YxSjC_EhcY>vL!3vh}%zW7(zJ;?iQa^wQz- z>DTJ>wNr<=GjA-_7UspuHSLcmn{JK}Ix07xjYdH%{~HVj1*rVetEwPQ$HHA*0%%?S z-d;hRHvORxDmmI0L%rJH-7QF3ArRv_7O>^9YEqQo5n?W~<$;TdS}mCwbW!_ph_Q;ic?bFZJCn?;9G!Ut^Ws!9zrCy|gi$!BcEIv~{*MoWgvK z%|@d*d7XVXJc9Xe>>wKJ8-B=2|6_+9-kV5Z`@4q>4J)qjLV)3-gV`I$IjXW#?=sI@B1mc8f*znFT0+90UJMJPhxRFGIz=O z{5HXiI*6Y+@LvGtO6lkQtc*|PdZ{>^7aZmf^7uIN6FHF(#2o_jCxx=l70kfgDBYM~ zC9M6XG?>5>p8mjTZsaB=K-6x>`MsJCdPsMBP?Gt;J28R1cfBYuw|u1gKFYS7w)lGh zOH!!scZC#S*9wz3^sjw*8}N)j`<-PfK7eu*&2luG84=EyWgpV_;oOPV&uZRmr;8 zN1{z7>r#kU>fR6yZ5LP{I%!JdOW3l%1X#{C*I}*p zlZq-zvR37(DLjt^)|%RqWUaYvxv>(g`+n-H`bkgn#UjppWhk2!#A+Z+s)tchHQ*~2 zac12|*)BKfq#Fg*euZ>Sp{!j{&9Os_u@a8`zI)Fe9F$9;8TyW!e8|zX0}a(9P5)~9 aL>DXZm)Pt-;clAuL-mZ(FwGO6GW-W*@>Nv; literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..51a1bea77a57c0ae6543ebea53ecc2d7959bbb15 GIT binary patch literal 4869 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 L{MjX_|9bxdNcj%M literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..916dc0e35d6ac2682a87a1e4df06f50842a3057c GIT binary patch literal 1170 zcmZwFJ!lhQ7zgls?s7@WC25*m`jK3dToSBp^Hq_mlW%hOUOKec!9j;2L8C=VhBk_{ zi-R4C3U<-KL06%;i9?5q)VZh>L=Y@Up@O>(TAzE~Y7%k$-T(PY?j%W40cvMqLXs=H z)l@JC(#iQ7rN%<5QCe(Vy+*bK@x1%2c&pWD zUXiUcwyKx^Op$yRAJTP@D|^vkPy%Zq8H<5jl?Ov1)P_DVAj#D+y|)+jrZ6~!;$~l; zq*xy!L#}2bLII%w3al?G>7t5~y9Cx(A7z((RQaR2k~ofIn(UW8D5*C16N$eByGJ7~ zYq~ChttUvUF_dD*eL_Bz+$FHh5M}p5)OV_S+8DuK^_acIC9-W-J`Lw^i?GMG+0S7U z^QUYs7Q@Ll+a6A1{+yjdWBrjgS>-?W*sGJtB(`rJ!xZe-=~N2!IYhPZLa7vvB7uF7 zN~baV*6UXCoMF0a#Ttd@0)jpaQL1UWH@E^m>T65x67X`EvKMTM8p~cmFEvi~&`@zY z@G15zlLgt5Shc?&w@k6QOa|Xkq>PjWF^q%ki&OvO$S8QA#k)9Wf#J3=4jEjz*%9h#!A@OV#|q)5dGmuW>nEmlW0rgRHRr7j;JSeDXLVH4{UUZKYeKk`P Pa{Hi`_mgOf+$H!8tk}&b literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..f6c555b5dbdfb873991ceb8841e488f07a8303a0 GIT binary patch literal 3820 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/ASTBuilderTests.class b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/ASTBuilderTests.class new file mode 100644 index 0000000000000000000000000000000000000000..b7da3d8840af87b19068d3ab9f1e6c8f90dccbb0 GIT binary patch literal 3906 zcmb7HYj+dZ72Ve_iLoe&fD)$(ojky@EIhU>8!QnLV@xrTfgl5cv~|bQwKYbXQD#Q2 zN!z5ar0@6p`5W4`y1PCVwlBB+z>-CaP2Z{+*OcHTS!+nQAaI~$ZP=#Ybfv%> z|A*??VppFTz-1M{MXM$Y=V*WAdeio;y1Z$5)>=)@+qUDIzUA1Sz_Z1&Q#UpoXQL(! z%T|FHOTnTXGd(|Wl`*}%$Fa?dZ+RfLSalFWw^mldUt4jR? zU>Xt_#E^!QNX0O^-^(7AmcSU&0)s)73e0uxxllFTl6<=#r(J;+yJ>byt{iwhN>c+8I_|&(J!;xZbSE81e!} zPmNN!D(iB|_I#7@Dy3n};cNo0fQ^zQG|Q%6RvB&;Z;I&jw7FZV8eYTs80G~|_5x^e zyDS?)%O|ja3j)KQEzP_4R;sS^Wr68Ve1dlh%{>4`9MUqxD!3?cxQ$>-P2gZ7Y{IZr zRExL8qD~Zuudaoh+J!HB^cved7MT}#sW(Ug1G3^*!z!5QE&W7dxzTV(^9oG$R^Ojx zTIgFP!yWAizl9P%9xVA}i)FJBkzT*)Rbn7(9%{q2=(>&@$D0D?4cnETQ`?diosH74 zY617?4cB3=>Rw)3sY<;r{i;I&SCXAb%&D-j$8^inn|4L6lYT4uy5s6TrTu#iski7` z!wuX~JWXnfDUO|*$_hLeu)$`Nv~FxR8x~v5FdLSkMqwe2FA`tN_H|Rkm#`Lt*=3X} z@hE2=XJ0_j;lxm!bZi(Etj9p4Uj8ICpTLHql;Jknb0S-8^4`je+YREU$RUQi%w})t z-Fb9@Q`~d|q=&JIdIB~a!o$s12%c)4y*w6DQ^aHnU(dL_RadgCFX;vZtKn_XXHM18 zUQN4XH=6#{rq62vKANiXIY;~&r`yTSj*ZBx3!lZo?miggM=$7VUDG&4?j`VP9E;&A z^x#Px_9Ux)^3m`PzNU)fU4gMw?^cLXTo~gB`?`QIK%TiIBz>#)- zf|KclB92`?-5);Bq2YKmf;=OMn2e>@iP z8VjD{IKXv?U$x+Q7zy5Yz8m0s9!UB25bq4Gg6m-V0iOD6ppxWO832ysFt5r01#kpM zx%R34;Txs=Z$1riz4Qpr+ z6!Ms$w86|nJx{t)E|r0R0!F*YB9G_Zrlt#oqhKDMts!aKK5J-}D<1IhQ2 z-`K&oW(SWB?%;dv+`UM@fdZ|br5~?A$2pARRZQ`~l*c^p&IkUT3-^uu8{)U0;HQl2 zFmYYR&*x)-Qu}vrL6q@({6XE9 z@kjiLLjNi)&tKEJwXF6g8?&ONOL}y3Q5)AM)nxAc-8rG!x1v2s*dP5vHBv|ywW+y$ z_OzCr%xBMN+1dOwuc!0VbD0?}dnTXDWwKg!E}xrK-*Trj(^_siKQpK0a{1Xwe#_0~ UXL&uHpPklbrt-5&KE0^@55o*n=>Px# literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/PatternMatcherTests.class b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/PatternMatcherTests.class new file mode 100644 index 0000000000000000000000000000000000000000..58c599720d652e0a09d76435d7c884faf934890c GIT binary patch literal 2941 zcmb7GYf}?f7=BI!5|=18Ua?+Qtr%itA;AlYmm*@p21PVuY5mrj{*wNKe(Ur(nGVVP?4I*ppYy!$n?L{gHE@i7EHffmEN-2i=t29z>eU9(uOSi0t0o^Ye-KZU2wgM zAU={G$o@bG`AUN3Zwn@QYLN!+z; znZHT>FD=0)Eln)%W0Hn$-Nb@Ndi6-a$>Db9Mvu&t8OGBx8mWz(0u2Lhwv z2!>)fE^wx9mS30^sn_$mt#Z?8+bsL8aFP^JD}2%L?h9|Iab!$=h8cSqTSI&oY;QlLMeoxoJ5&zY*}73IsObjp$_b*3(B z&&f^Klg4a|xr8UhO#hQigBV3Rj!PKh)$?YSc97upo=@&}LvGbvr^Wf%g4OWz8pe@{ zVuD528B?o9HcKY!Mcv6fYfdp}mIqElQ8kV%Cdt97G>LDrGuLfl=D9n;7k#nRDW zNAU_w^j6<}%d`+#W0yPJk$xK`9_}mp>=p}VJ#2jas<)BqCxZIhXtJ3a8_l{!avNsd zGSoE5$M6+3EyveQJ+G^^q_HnNisKLt$M8fzm@z!%!u@Zs7R57xQypD9EV7_>TC8WW zd<&B}u>qL2z=cjWgoV+OLbx-!s-X<>pY^3H?(GhEy21GtvhF!5Y-VP#v+OkqOJ8zT zjftU}nw6d8AL$MBHuXt_wIE`46R}F;MYrjdrMh&1W1&>%ARbdJ+#a{PqvhCbH4h_b zBkPYWzsg(ce`VS#+^P4v;`>v&t=b5uAzM(p7tzK@58c-I44qAOPrWttNYH!Cprzn? zi=O++V*Swmp;qd5WT{zc`-M(k?BV|w(ohWzKBN4KAcnnM2e_|sRT3P}{MyGigR9`$ zpL&D+Kk+4k1AHoB;3z)fQ;AXl2^{1aQM}`hQvQoy16=2R#gQj(aBLx+7=DdU(-+kv zahlK6&p4BQjdSlXdjHZ}Tol-X@eY@BeZzh4a5dLI-2WC+0zWRKw{YY4z!UowW*DZ5 zBNc>vk|~_Rew=0mI)-ru=W&(|{~U50jJNqUgOMQCxgh1aFjhu}S=^=77$v{pSA?=B zF^_w+pT!WqL;-y~i(vuxnd1z953oqNhx8tU_#3yQ+!a_N4v{vHMV=}Io^ekBdMK4x zevOqv;&Ebi3t!(jv4zqOnhE*<(v0mAeU32;BZyXS>4wopX|W26zJ?gZ23`cVZE8kP z3p^j?o5OSWDMT4{yj1UHcxX`QkK)4gqV};e&>oZQ>sqR)hc9=vi~6|UO?#8H&yYuDjju8h#w0BrmsMcCT5E=;7j%s2L=>ogy@TWPx{Dcs z@=3s!X{Ql+DC3HY%L4cQzpy^8VoqRckkL-6t?JQ$SKv0MHIj1J<3Hea5A#@Xaa~~c zWU9|n6_SrB+z@zFeLdo~gP`?O3nAdOOd5yuRAtSX`^S9V$>x~5`9z12NtEtvk?oqc zk7Y~?%qVRs)-r1R)dhc3Yl<6@OcLVuj&1WBcy1Dl1s<6^KN(RhW^=<*j+cuuwvV&4 z&U$9?R#rdo_6h#GK4y~l0%L$B6nXdivWJT(vBp)$^pIf#PXDare8r_#`IYzZK4P}@ q8Q0!2GKXJG%fB&|hD;6?`=}*U`0wyM+{7)GJm$=zXJ3_94&|Q%CK0v( literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class new file mode 100644 index 0000000000000000000000000000000000000000..a868499c6c3738f1b11d00d735c4457b9702bec9 GIT binary patch literal 905 zcmbVKO>fgc5Ph2(yEP^ap#cKrJBI{BO`{4b6>+IR1i4jJs@^yDG}+4CmF!J_7aRbI z13!Qtg_yN05mf<+9(HzSH1pnk{rvU)2Y_w#0yG4+rn8uGOL0Lbr}A9Jxzv-`QfbTh zkWN0ZYot#pwWc^I%(=>_=nVsS0)vH_b>QCm_|eRYl-?;ff%U(fz=i{3%(pttO{w%`kL=WB5gy`^ zz>TyZY3afZJm=;XHn8Yqcu>(uYbvVRhzGvB&o}wrl$JSoWqiV-)pDC;t-&wAGW%Cp z+hW^!!l%!^u=s}Pa}~47(&rdp11*+OrH8nVHd|aa)@p=p{#~5k?tI0qPpmcIvYQp} lCR;;h-kd}6YZMRbRrEdF=ifsI5Ac|^utsDRPxv*^`3;Qk>UIDC literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..454e68b303d5368e84ad6f7d1ebe6932599cf898 GIT binary patch literal 1991 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..90885dce2bae06b3206307971cc22421620624ed GIT binary patch literal 6476 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..98e66ef3716d56d80a4b4a2decfe078ae0e82aac GIT binary patch literal 5294 zcmZXXdvH|s70377n|pV&A#pbwh#L|hfjl+Y1VRi6=#i%pd8I<4*Ei)?Ev5b%EKnrxrl(tBFe&_tw z-A(!LbH1N*eviA{3oe(-0LYDjNVv3-r2QY?jo|9vc3)_EW_CJs&-5MJC+8+ZGn2dS z49!m8J9}@)nVg-SzGqi@a&~Il^gUmZwVvIx)4R56k=9ISP{a#kTvd_2U@!>UNIu~6 zxghe@6%7qY_h0MxBmJPRu@TiD*VWb{y)3MzCdA*h*VVZyBClOjB#6A@A$rw=8ARR- zHZ|dxqd_D+@?L@&WfPTtntrgUr(g(Z7N#SKgC;l>Q2BAi-%9ird*&9y6B6;a1nvj(xr z2nMmUlpwlgC1ouuF@xxyaAj*3s$uJ!!4>G1vk~1RQmw6^h2tXH(14To7_F_SGeYzs z52FV|h(0z!$2!lgXs)CvDVsM;p;`k#B3mCBG}2<;!u& z<3?K>F3AYdKe!p)7((>4ut`2BY-Bxp+Dqv{FQuPsB098*vQGj`0m?3SQsd!HNwE%b zuDuf%{YXsXZ$(FbzP$riJuhySznw4ng2)va{R^9v9&K+&{lcJ1885aL5#@`ugvl0i zuNu^vGl~SU@w)bQX;xDil(fJ@YAE3T^KlRP~ ziv+Q=9i8&h`I7b6*%gF*$9n9qwVj=~(_X%{QUcrMkr`jVrijl3cBPm4!t#WgT}fty z2<)J>v#SfVNJ`u<|1#TatjR9?{VUe(HC2pNn1UU$wve3{JCJodRLv+~5=aKQc}ZaR zdy1r$5!f58IE52p3SFWXG9uV zPsF^G&Uh(xM3`_+gei3bi~&lgLe%>05Ya)gzi%xr`^o@*LiEHz5$)^4WfxlI7ljei zg<8TREfl^lKSg@t4WmeqI9k`&C(UZgjxJ$xGqJfK2@=QMyo4mJj39B+L)jlq%1)X^ zf@DR*TDeo&nw~U$YuDmN&-kQSMv$yGDdSxih;|LhHP+m^bvWjd*eAbN$&j^u9sVE` z>&Z|RV-=>59I_^)9dn6UWIZ`l%_zT-NQQJ{E=iEQ$x|e)j38-SSqeR323>E`HW}qN z6Ow73TEkP*Je3HNIi5UA znzB}&SW7OB;OMWQj@Hn9Uzq{RmUn3q+0sP z%#)c~-%O^W1e-*V8XqF_b~d-Sld0%oHi;nh1YRLNwO#UGHjw&7xM^S$KBot*S37!K z6{*9<4L2Zu$B^HYGJ@2RCdv*pVFsx)BYzs)i0X^h#+7su?{@2DxuYg7lQ9NLm>|dWV&z@R*oE*PGs9GMdzRH%~pmQ}5=fM3A22 zsYF^CL3(c^?dDVi?PhN!%{*0!q@_y<(vJiv`^Zn(BmN>m`k7vua!H<8OTW}anWESD zHi#g7yhoaGVDrz*rCFfAk;w$8eldy5CmUXUoz*UhsWeEI(g*1J}7BOT# zT&nWiQv6&&=8JGbSR#fEU$frq8*pj=S1~eQh&#}+aMfMnHvCvsWWF$D0h_o0W16Q> z@Sp%=OGI9^>=t>f=wnN2l(D;pj0O=`h5aH$S)#{t&&K~J|--xY!eTN5ix=r zIU(-D7iz`WHbWM0BV2&7o$f-xjRK6#i5b;$O3YwIADi21) zRX?$|h{0LyQTc?4zUHhpOBtN}u!zvHALso{7^Mu(RJUY#WO+i}nQBl>2h^QupYmsX zG{2m|nKMJwM7ih6)UcU--{{i@H$t_Lcx?1 zvRYwya))$cT@R%q4a)()8Vg5-uUt7eGT}JESC7hCH*0ReA zcR&o;HN9%yr<~u=r1q=WF8IWd-O{7{zq7w>x$+gy6?|gIJ}eTd;VL&gHJ}<4zg}n{ whU`22>?ghKpJ`^lz?YQI3^{#B`OC=9Eo)c4;@*N!47nTW!a+;681jMq4~CHT5&!@I literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..adbd320b68d766bf18843503b6ab48f78eae68a6 GIT binary patch literal 4973 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 Jxs-ob{{u{|Dpmjh literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..6b5705648ef7c8b3765fe60192eb5f02a53c6787 GIT binary patch literal 1041 zcmZwFJ!lhQ7zgn8xy$9+7Gf4fQz{jiT)mRMmaBf^@ zf+bJKRVLbx-8wbLae}|DiLtFqOkr3c=aT<^4g_DLR`mE+v^{C@G)!r}_ftk#a0yNZ@QoDO=6? z$8olUTtVu4HcB&(_U+~i1>Col!$%aI-Eg6R8@9qIaJm}liAGs>jBAXtJ(;v4qXcJA z;CwNcibWjy(wLZFf-7Z7-4sf6C6z12B^Qghuq*S*0fDP1l)Vj6ri6|KZi;6gd0&cW zByg+sGe!m1@0(ZCX(qWBy*B~j&fnWXa53<}&|Scy}z zROyZA;>ct@fOgLgrz J`0qwHgg-;?xJm#3 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..2d8b8fa3c930e63dc0ac5395d0b82306a22735e7 GIT binary patch literal 3400 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..be78925570d28f6a1808985911c002a717c02b7d GIT binary patch literal 775 zcmY+CziSjh6vy|??%uewzh>`;0TJ(nh!7IDJ`kKYAc)um45U5C`imolw;m~st!0A$ zf>o@96jmwHSy-fto!D4tBif`1@y%Njv(3VX&-=db%&?y4g#h+1EO^3vz+4vKEj@cx zR@1sFUsg|EOy-kvI@x?$*43<@m5=GWRzIK4?rhc7=7um|?X@dc&$FIy&Quf;epFI= zfEj*Q1Hwb|C(6ALuWO|)5OBH2_@ze~zUUoI4-_ zfpkWfI|z8Pa0dZA>@W>FM50B2M>n&Ka-$n@>;-rvvy4VYl1Q`&@VLkBwk8MoGvwSj zWIDN(=d=Y!NkUsrWS&zTC6QnGvb#)Rjb^v4dD5tc+$)297-~&h-iA!C yhlT6o2H(EXML~VLE+<+9b|+@X?c$uao1LGMZkKZJ6Zfw6GJ!qr_WKwA2>b&m7I#ko literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..5ccd552244fbf6ff3767d48fe9c0390eafe81311 GIT binary patch literal 2595 zcmaKuc|6qH8^^!MK9(%mcL`0*wUlJ9v1GY3V`MCem{7J5vVZ6f-!B;L7aWv(<(BQFsZef+eV*^T#oTy-%U)Sk+SaGp-#2T1dxLS(g=9cx zj}Ha!xt(bk66holHAbRGqNj;jXC#zFJxzB}#7_phQ$g!{h9`C(@ATQR6fM4QM^KBd ztZZ(+LEj?@Qm0VcPWH*r>1ARK`ilN{_k4Dcc31($L`w78hK`BXoZska8i4_$I+hY_ z-g?S9Ef%+iDhwi|cS0L+7{*Bph>7LJw-kcia7A4Nb3MmBZSBW0iEffDyUQ`9Qa4$? zy<^jz{BHd9R7$~z7cLt81Ke+;N5d!DV-C>VgWUEaR~Po0T>Z}RPJf=uZt*Tka1&3s zpJ7L?a`Sz?wv)s~rEKlXIUJLa&yh1(&KFZ?o`cL9_kQuF(0c1gU~#>-)STQc``D%LqB|;g-mWmCV)(q*lR| z$|qfJRoM*yiG{2>3N*;trZjty6`{`4GHrK&mw5SDwg70wLy2?6KjMaBzi0O(=k>!m z8K^8$f<5<-1P4cIpgs;WY6GD%zgBL{uFI=b3_EllI=+;0;7m+?jBGs1!;D;8P~Q@z z88@s8T68Ban;T7X+xcvDa;aI`99U$nr3EXPl~EfzPPM>7H;jH#q)0yYD)~5s#glY%a1AYl}w6&MjXq0xB`Onjk#$GL9>fI zE*K+X^uymEhW=by5WFdd-}Z{;vaRX}xDX4MOZimjK-SJEmX-Ko zQsF>D)BS;O$R@igiii>A+`}Qog{N0zWeF2+q&HRxGju_lc471DN zL}XEpAS1dm3Ljod0K)?K$0dU5U0p86M5S9JCDNhTd!#?mHM1d2NFl!S?!_sedn9UB zUp?`eQXyzjxprfd&Cd-prk!BqcKGSCWj4%!aK62)V}17RK_8LHILS-Ftt+@9rQ2-I zo4kB&1bn(pDDUq3JcU_xW75n_8(8&$Rd%rx)`f{!Bs;_?d79k-o^t6Q_>B8*!yhdFHO|N!W6JEcTIzobIGe zYuvO=Vd1m;ao7#Nk3Ez)k(Qvs}&{7`+J>V?yW~1 zV6D3URGrfB?-r)O`W!*KWo)w3laBGY1e>u6qO z%}Hqg97MfsEAxOr;qHJR{v&NF4*;C1qr?1O6v?{v-!z5LAsi{ysJNf+EcQ#N`@u>c!yT0YtzP_c+ zXSLmFt;w_~a3$?tCf}%6x;_g|g(jmeVb*(QaX$x0w85;WcQJ~zzD3B#Mu&?IHyp^e zT;P5wF$%Lc#Cl0sJ05!>u9(N{y7T9@+LX90yu7b*h_G@(IWFhY?AbKSCcz)bA!+J<`U!RJoc1gB5mkHe{@#8WbnTMwm#1^0nzizpWIqE99U zukMjsy4JeUxsms<&)rw5lFWt-i}|b(i%YTqyTL9ZPG#zS4hw0332q0oy=OqHU2ZK5 zZnR`+VkczFY5r|$I4|-uVR`Grqbg$OXh(2e5@G=WE6)E{RX;y?x1b<@cW<|!#T4YU zl^5I6mSn7Vx(N(#XjarT8$P9}enGoOp-JcExhB$l%(Yab*RgafP%0cWg{4w!dwPCA zRcfKaP!NVgA4aQNZRM3dVcFI{NSf~@>M5xh|zX?&iq zU!W$}>Lkc&FTra~qej^+qj&CPBkmo1(Crv!6R_j(fhQS5c|@5S69|?@shqfIDcTGp zb2l&<4QONWl0@G(VLnetVh(j5AQWL`A7R-ni7qW}HE-$0Wy literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/ASTBuilderTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/ASTBuilderTests.java new file mode 100644 index 0000000..1e3bd8d --- /dev/null +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/ASTBuilderTests.java @@ -0,0 +1,127 @@ +package hu.elte.refjava.lang.tests; + +import hu.elte.refjava.api.patterns.ASTBuilder; +import hu.elte.refjava.api.patterns.PatternParser; +import hu.elte.refjava.lang.refJava.PExpression; +import hu.elte.refjava.lang.refJava.PVariableDeclaration; +import hu.elte.refjava.lang.refJava.Pattern; +import hu.elte.refjava.lang.refJava.Visibility; +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; +import hu.elte.refjava.lang.tests.TestUtils; +import java.util.List; +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.core.dom.Expression; +import org.eclipse.jdt.core.dom.FieldDeclaration; +import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.SingleVariableDeclaration; +import org.eclipse.jdt.core.dom.Type; +import org.eclipse.jdt.core.dom.TypeDeclaration; +import org.eclipse.jdt.core.dom.VariableDeclarationFragment; +import org.eclipse.jdt.core.dom.VariableDeclarationStatement; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.extensions.InjectionExtension; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@ExtendWith(InjectionExtension.class) +@InjectWith(RefJavaInjectorProvider.class) +@SuppressWarnings("all") +class ASTBuilderTests { + private final ASTBuilder builder = new ASTBuilder(null); + + private Pattern pattern; + + private CompilationUnit source; + + private String typeRefString; + + private List replacement; + + @Test + public void variableDeclarationBuilderTest() { + this.pattern = PatternParser.parse("public void f() { int a ; char b ; }"); + this.source = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }"); + this.typeRefString = "void|int|char|"; + this.replacement = this.builder.build(this.pattern, this.source.getAST(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), this.typeRefString); + Object _head = IterableExtensions.head(this.source.types()); + Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); + final List variableDeclarations = ((MethodDeclaration) _head_1).getBody().statements(); + ASTNode _head_2 = IterableExtensions.head(this.replacement); + final Function1 _function = new Function1() { + public Boolean apply(final Object it) { + return Boolean.valueOf((it instanceof VariableDeclarationStatement)); + } + }; + Assertions.assertTrue(IterableExtensions.forall(((MethodDeclaration) _head_2).getBody().statements(), _function)); + PExpression _head_3 = IterableExtensions.head(this.pattern.getPatterns()); + ASTNode _head_4 = IterableExtensions.head(this.replacement); + Object _head_5 = IterableExtensions.head(((MethodDeclaration) _head_4).getBody().statements()); + Object _head_6 = IterableExtensions.head(((VariableDeclarationStatement) _head_5).fragments()); + Assertions.assertEquals(((PVariableDeclaration) _head_3).getName(), ((VariableDeclarationFragment) _head_6).getName().getIdentifier()); + PExpression _last = IterableExtensions.last(this.pattern.getPatterns()); + ASTNode _head_7 = IterableExtensions.head(this.replacement); + Object _last_1 = IterableExtensions.last(((MethodDeclaration) _head_7).getBody().statements()); + Object _head_8 = IterableExtensions.head(((VariableDeclarationStatement) _last_1).fragments()); + Assertions.assertEquals(((PVariableDeclaration) _last).getName(), ((VariableDeclarationFragment) _head_8).getName().getIdentifier()); + Object _head_9 = IterableExtensions.head(variableDeclarations); + ASTNode _head_10 = IterableExtensions.head(this.replacement); + Object _head_11 = IterableExtensions.head(((MethodDeclaration) _head_10).getBody().statements()); + Assertions.assertEquals(((VariableDeclarationStatement) _head_9).getType().toString(), ((VariableDeclarationStatement) _head_11).getType().toString()); + Object _last_2 = IterableExtensions.last(variableDeclarations); + ASTNode _head_12 = IterableExtensions.head(this.replacement); + Object _last_3 = IterableExtensions.last(((MethodDeclaration) _head_12).getBody().statements()); + Assertions.assertEquals(((VariableDeclarationStatement) _last_2).getType().toString(), ((VariableDeclarationStatement) _last_3).getType().toString()); + } + + @Test + public void fieldDeclarationBuilderTest() { + this.pattern = PatternParser.parse("int a; char b;"); + this.source = TestUtils.getCompliationUnit("class A { public int a; private char b; }"); + this.typeRefString = "int|char|"; + this.replacement = this.builder.build(this.pattern, this.source.getAST(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), this.typeRefString); + Object _head = IterableExtensions.head(this.source.types()); + final List fieldDeclarations = ((TypeDeclaration) _head).bodyDeclarations(); + final Function1 _function = new Function1() { + public Boolean apply(final ASTNode it) { + return Boolean.valueOf((it instanceof FieldDeclaration)); + } + }; + Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function)); + PExpression _head_1 = IterableExtensions.head(this.pattern.getPatterns()); + ASTNode _head_2 = IterableExtensions.head(this.replacement); + Object _head_3 = IterableExtensions.head(((FieldDeclaration) _head_2).fragments()); + Assertions.assertEquals(((PVariableDeclaration) _head_1).getName(), + ((VariableDeclarationFragment) _head_3).getName().getIdentifier()); + PExpression _last = IterableExtensions.last(this.pattern.getPatterns()); + ASTNode _last_1 = IterableExtensions.last(this.replacement); + Object _head_4 = IterableExtensions.head(((FieldDeclaration) _last_1).fragments()); + Assertions.assertEquals(((PVariableDeclaration) _last).getName(), + ((VariableDeclarationFragment) _head_4).getName().getIdentifier()); + Object _head_5 = IterableExtensions.head(fieldDeclarations); + ASTNode _head_6 = IterableExtensions.head(this.replacement); + Assertions.assertEquals(((FieldDeclaration) _head_5).getType().toString(), ((FieldDeclaration) _head_6).getType().toString()); + Object _last_2 = IterableExtensions.last(fieldDeclarations); + ASTNode _last_3 = IterableExtensions.last(this.replacement); + Assertions.assertEquals(((FieldDeclaration) _last_2).getType().toString(), ((FieldDeclaration) _last_3).getType().toString()); + } + + @Test + public void methodDeclarationBuilderTest() { + Assertions.fail("not implemented"); + } + + @Test + public void constructorCallBuilderTest() { + Assertions.fail("not implemented"); + } + + @Test + public void methodInvocationBuilderTest() { + Assertions.fail("not implemented"); + } +} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/PatternMatcherTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/PatternMatcherTests.java new file mode 100644 index 0000000..3c96265 --- /dev/null +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/PatternMatcherTests.java @@ -0,0 +1,72 @@ +package hu.elte.refjava.lang.tests; + +import hu.elte.refjava.api.patterns.PatternMatcher; +import hu.elte.refjava.api.patterns.PatternParser; +import hu.elte.refjava.lang.refJava.Pattern; +import hu.elte.refjava.lang.refJava.Visibility; +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; +import hu.elte.refjava.lang.tests.TestUtils; +import java.util.List; +import org.eclipse.jdt.core.dom.Block; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.core.dom.Expression; +import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.SingleVariableDeclaration; +import org.eclipse.jdt.core.dom.Type; +import org.eclipse.jdt.core.dom.TypeDeclaration; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.extensions.InjectionExtension; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@ExtendWith(InjectionExtension.class) +@InjectWith(RefJavaInjectorProvider.class) +@SuppressWarnings("all") +class PatternMatcherTests { + private final PatternMatcher matcher = new PatternMatcher(null); + + private Pattern pattern; + + private CompilationUnit source; + + @Test + public void variableDeclarationMatcherTest() { + this.pattern = PatternParser.parse("type#T1 name#N1 ; type#T2 name#N2 ;"); + this.source = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }"); + Object _head = IterableExtensions.head(this.source.types()); + Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); + final Block block = ((MethodDeclaration) _head_1).getBody(); + Assertions.assertTrue(this.matcher.match(this.pattern, block.statements(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), null)); + } + + @Test + public void fieldDeclarationMatcherTest() { + this.pattern = PatternParser.parse("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;"); + this.source = TestUtils.getCompliationUnit("class A { public int a ; private char b; } }"); + Object _head = IterableExtensions.head(this.source.types()); + final TypeDeclaration typeDecl = ((TypeDeclaration) _head); + Assertions.assertTrue(this.matcher.match(this.pattern, typeDecl.bodyDeclarations(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), null)); + } + + @Test + public void methodDeclarationMatcherTest() { + this.pattern = PatternParser.parse("visibility#V1 type#T1 name#N1() {} ; visibility#V2 type#T2 name#N2() {} ;"); + this.source = TestUtils.getCompliationUnit("class A { public void f() {} private int g() {} }"); + Object _head = IterableExtensions.head(this.source.types()); + final TypeDeclaration typeDecl = ((TypeDeclaration) _head); + Assertions.assertTrue(this.matcher.match(this.pattern, typeDecl.bodyDeclarations(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), null)); + } + + @Test + public void methodInvocationTest() { + this.pattern = PatternParser.parse("new name#N1() { visibility#V1 type#T1 name#N2() {} }.name#N3()"); + this.source = TestUtils.getCompliationUnit("class A { public void f() { new F() { public void apply() {} }.apply(); } }"); + Object _head = IterableExtensions.head(this.source.types()); + Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); + final Block block = ((MethodDeclaration) _head_1).getBody(); + Assertions.assertTrue(this.matcher.match(this.pattern, block.statements(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), null)); + } +} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java new file mode 100644 index 0000000..a7a8f15 --- /dev/null +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java @@ -0,0 +1,47 @@ +/** + * generated by Xtext + */ +package hu.elte.refjava.lang.tests; + +import com.google.inject.Inject; +import hu.elte.refjava.lang.refJava.File; +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.extensions.InjectionExtension; +import org.eclipse.xtext.testing.util.ParseHelper; +import org.eclipse.xtext.xbase.lib.Exceptions; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@ExtendWith(InjectionExtension.class) +@InjectWith(RefJavaInjectorProvider.class) +@SuppressWarnings("all") +public class RefJavaParsingTest { + @Inject + private ParseHelper parseHelper; + + @Test + public void loadModel() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("Hello Xtext!"); + _builder.newLine(); + final File result = this.parseHelper.parse(_builder); + Assertions.assertNotNull(result); + final EList errors = result.eResource().getErrors(); + boolean _isEmpty = errors.isEmpty(); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("Unexpected errors:"); + String _join = IterableExtensions.join(errors, ", "); + _builder_1.append(_join); + Assertions.assertTrue(_isEmpty, _builder_1.toString()); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } +} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/TestUtils.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/TestUtils.java new file mode 100644 index 0000000..400487e --- /dev/null +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/TestUtils.java @@ -0,0 +1,22 @@ +package hu.elte.refjava.lang.tests; + +import org.eclipse.jdt.core.dom.AST; +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.ASTParser; +import org.eclipse.jdt.core.dom.CompilationUnit; + +@SuppressWarnings("all") +public class TestUtils { + public static CompilationUnit getCompliationUnit(final String str) { + CompilationUnit _xblockexpression = null; + { + final ASTParser parser = ASTParser.newParser(AST.JLS12); + parser.setResolveBindings(true); + parser.setSource(str.toCharArray()); + ASTNode _createAST = parser.createAST(null); + final CompilationUnit newCompUnit = ((CompilationUnit) _createAST); + _xblockexpression = newCompUnit; + } + return _xblockexpression; + } +} diff --git a/hu.elte.refjava.lang.ui.tests/.classpath b/hu.elte.refjava.lang.ui.tests/.classpath new file mode 100644 index 0000000..c6a6482 --- /dev/null +++ b/hu.elte.refjava.lang.ui.tests/.classpath @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hu.elte.refjava.lang.ui.tests/.project b/hu.elte.refjava.lang.ui.tests/.project new file mode 100644 index 0000000..fd6c591 --- /dev/null +++ b/hu.elte.refjava.lang.ui.tests/.project @@ -0,0 +1,34 @@ + + + hu.elte.refjava.lang.ui.tests + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.core.resources.prefs b/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..fdaa299 --- /dev/null +++ b/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=windows-1250 diff --git a/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..c537b63 --- /dev/null +++ b/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/hu.elte.refjava.lang.ui.tests/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.ui.tests/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e93b746 --- /dev/null +++ b/hu.elte.refjava.lang.ui.tests/META-INF/MANIFEST.MF @@ -0,0 +1,19 @@ +Manifest-Version: 1.0 +Automatic-Module-Name: org.xtext.example.mydsl.ui.tests +Bundle-ManifestVersion: 2 +Bundle-Name: hu.elte.refjava.lang.ui.tests +Bundle-Vendor: My Company +Bundle-Version: 1.0.0.qualifier +Bundle-SymbolicName: hu.elte.refjava.lang.ui.tests;singleton:=true +Bundle-ActivationPolicy: lazy +Require-Bundle: hu.elte.refjava, + org.junit.jupiter.api;bundle-version="[5.0.0,6.0.0)", + org.eclipse.xtext.testing, + org.eclipse.xtext.xbase.testing, + org.eclipse.xtext.xbase.junit, + org.eclipse.core.runtime, + org.eclipse.xtext.ui.testing, + org.eclipse.ui.workbench;resolution:=optional, + hu.elte.refjava.lang.ui +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Export-Package: hu.elte.refjava.lang.ui.tests;x-internal=true diff --git a/hu.elte.refjava.lang.ui.tests/build.properties b/hu.elte.refjava.lang.ui.tests/build.properties new file mode 100644 index 0000000..5c6bbf9 --- /dev/null +++ b/hu.elte.refjava.lang.ui.tests/build.properties @@ -0,0 +1,6 @@ +source.. = src/,\ + src-gen/,\ + xtend-gen/ +bin.includes = .,\ + META-INF/ +bin.excludes = **/*.xtend diff --git a/hu.elte.refjava.lang.ui.tests/src-gen/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.java b/hu.elte.refjava.lang.ui.tests/src-gen/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.java new file mode 100644 index 0000000..3063cd3 --- /dev/null +++ b/hu.elte.refjava.lang.ui.tests/src-gen/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.java @@ -0,0 +1,17 @@ +/* + * generated by Xtext + */ +package hu.elte.refjava.lang.ui.tests; + +import com.google.inject.Injector; +import hu.elte.refjava.lang.ui.internal.LangActivator; +import org.eclipse.xtext.testing.IInjectorProvider; + +public class RefJavaUiInjectorProvider implements IInjectorProvider { + + @Override + public Injector getInjector() { + return LangActivator.getInstance().getInjector("hu.elte.refjava.lang.RefJava"); + } + +} diff --git a/hu.elte.refjava.lang.ui.tests/test-bin/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.class b/hu.elte.refjava.lang.ui.tests/test-bin/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..e8d8f3d54c6ff5fbf467c005970a83326d22f38c GIT binary patch literal 747 zcmbVKO-md>5PiL_JMK8~V-urBvmv)tVLIp`$cBIjf-;z(iTB>IoNXDWrKe}{XC)UC zJop3rQIeW*SA$?69=fWls_Ru(y}G%*x(2Y0cOGg2ANz%*)RDAwa;gSOrYcKhp{1kT zOR^TM$5(&B|5=3tmW|5k x;|1S?y9b!UG+Vq@m}OZeZ&YAF^EX - + diff --git a/hu.elte.refjava.lang/META-INF/MANIFEST.MF b/hu.elte.refjava.lang/META-INF/MANIFEST.MF index 91196fa..1790a5e 100644 --- a/hu.elte.refjava.lang/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang/META-INF/MANIFEST.MF @@ -38,5 +38,6 @@ Export-Package: hu.elte.refjava.api, hu.elte.refjava.lang.serializer, hu.elte.refjava.lang.services, hu.elte.refjava.lang.typesystem, - hu.elte.refjava.lang.validation + hu.elte.refjava.lang.validation, + hu.elte.refjava.tests Import-Package: org.apache.log4j diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend index 09d96ea..f1e8707 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend @@ -3,8 +3,10 @@ package hu.elte.refjava.api import hu.elte.refjava.api.patterns.ASTBuilder import hu.elte.refjava.api.patterns.PatternMatcher import hu.elte.refjava.api.patterns.PatternParser +import hu.elte.refjava.api.patterns.Utils import java.util.List import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.SimpleName import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jface.text.IDocument @@ -22,6 +24,12 @@ class BlockRefactoring implements Refactoring { List replacement protected new(String matchingPatternString, String replacementPatternString) { + nameBindings.clear + typeBindings.clear + parameterBindings.clear + visibilityBindings.clear + argumentBindings.clear + setMetaVariables() matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) } @@ -36,7 +44,6 @@ class BlockRefactoring implements Refactoring { } override apply() { - setMetaVariables() return if(!safeTargetCheck) { Status.TARGET_MATCH_FAILED } else if (!safeMatch) { @@ -54,17 +61,16 @@ class BlockRefactoring implements Refactoring { def private safeMatch() { try { - if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString) ) { + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, matchingTypeReferenceString) ) { return false } target = matcher.modifiedTarget.toList bindings.putAll(matcher.bindings) - return true + true } catch (Exception e) { println(e) - return false + false } - } def protected void setMetaVariables() { @@ -72,19 +78,19 @@ class BlockRefactoring implements Refactoring { } def protected safeTargetCheck() { - return true + true } def protected targetCheck(String targetPatternString) { try { - if(!matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString)) { + if(!matcher.match(PatternParser.parse(targetPatternString), target, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, targetTypeReferenceString)) { return false } bindings.putAll(matcher.bindings) - return true + true } catch (Exception e) { println(e) - return false + false } } @@ -104,28 +110,53 @@ class BlockRefactoring implements Refactoring { def private safeBuild() { try { - replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, replacementTypeReferenceString) + true } catch (Exception e) { println(e) - return false + false } - return true } def private safeReplace() { try { + val targetTypeDecl = Utils.getTypeDeclaration(target.head) + val assignmentBeforeReplacement = Check.getAssignmentsInClass(targetTypeDecl) + val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] - val group = rewrite.createGroupNode(replacement) + val group = rewrite.createGroupNode(replacement) rewrite.replace( target.head, group, null) val edits = rewrite.rewriteAST(document, null) edits.apply(document) + + val iCompUnit = Utils.getICompilationUnit(target.head) + val compUnit = Utils.parseSourceCode(iCompUnit) + val assignmentsAfterReplacement = Check.getAssignmentsInClass(compUnit.types.findFirst[ + (it as TypeDeclaration).resolveBinding.qualifiedName == targetTypeDecl.resolveBinding.qualifiedName] as TypeDeclaration) + + compUnit.recordModifications + val it1 = assignmentBeforeReplacement.iterator + val it2 = assignmentsAfterReplacement.iterator + + while (it1.hasNext) { + val value1 = it1.next + val value2 = it2.next + if(!(value1.leftHandSide as SimpleName).resolveBinding.isEqualTo((value2.leftHandSide as SimpleName).resolveBinding)) { + val thisExpression = compUnit.AST.newThisExpression + val fieldAccess = compUnit.AST.newFieldAccess + fieldAccess.name.identifier = (value2.leftHandSide as SimpleName).identifier + fieldAccess.expression = thisExpression + value2.leftHandSide = fieldAccess + } + } + Utils.applyChanges(compUnit, document) + true } catch (Exception e) { println(e) - return false + false } - return true } } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend index 668ff1a..110d697 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend @@ -6,7 +6,9 @@ import java.util.List import java.util.Queue import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.ASTVisitor +import org.eclipse.jdt.core.dom.AnonymousClassDeclaration import org.eclipse.jdt.core.dom.ArrayType +import org.eclipse.jdt.core.dom.Assignment import org.eclipse.jdt.core.dom.Block import org.eclipse.jdt.core.dom.ClassInstanceCreation import org.eclipse.jdt.core.dom.ExpressionStatement @@ -16,6 +18,7 @@ import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.MethodInvocation import org.eclipse.jdt.core.dom.Name import org.eclipse.jdt.core.dom.QualifiedName +import org.eclipse.jdt.core.dom.ReturnStatement import org.eclipse.jdt.core.dom.SimpleName import org.eclipse.jdt.core.dom.SingleVariableDeclaration import org.eclipse.jdt.core.dom.Statement @@ -25,9 +28,13 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment import org.eclipse.jdt.core.dom.VariableDeclarationStatement class Check { + + protected static List allTypeDeclarationInWorkSpace - public static List allTypeDeclarationInWorkSpace - + def static isSingle(List target) { + target.size == 1 + } + def static isInsideBlock(ASTNode node) { node.parent instanceof Block } @@ -39,7 +46,7 @@ class Check { def dispatch static isVariableDeclaration(ASTNode node) { node instanceof VariableDeclarationStatement } - + def dispatch static isVariableDeclaration(List nodes) { nodes.forall[it instanceof VariableDeclarationStatement] } @@ -49,17 +56,10 @@ class Check { node } } - + def dispatch static asVariableDeclaration(List nodes) { - var Boolean l - for (node : nodes) { - if ( !(node instanceof VariableDeclarationStatement) ) { - l = false - } - } - - if (l) { - return nodes + if (nodes.isVariableDeclaration) { + nodes as List } } @@ -92,9 +92,25 @@ class Check { } def dispatch static boolean isReferencedIn(List varDeclList, List nodes) { - varDeclList.forall[!isReferencedIn(nodes)] + varDeclList.exists[it.isReferencedIn(nodes)] } + //block checks + def static getAssignmentsInClass(TypeDeclaration typeDecl) { + val List assignments = newArrayList + val visitor = new ASTVisitor() { + override visit(Assignment assignment) { + if (assignment.leftHandSide instanceof SimpleName) { + assignments.add(assignment) + } + return true + } + } + typeDecl.accept(visitor) + assignments + } + + //lambda checks def static isFresh(String name) { !allTypeDeclarationInWorkSpace.exists[it.name.identifier == name] @@ -112,14 +128,13 @@ class Check { def static references(TypeDeclaration typeDecl) { val List refs = newArrayList val binding = typeDecl.name.resolveBinding - allTypeDeclarationInWorkSpace.forEach[ val visitor = new ASTVisitor() { override visit(SimpleName name) { if (name.resolveBinding.isEqualTo(binding) && name != typeDecl.name) { refs.add(name) } - return true + true } } it.accept(visitor) @@ -142,6 +157,185 @@ class Check { return false } + def static getLambdaName(ExpressionStatement exprStatement) { + ((exprStatement.expression as MethodInvocation).expression as ClassInstanceCreation).type.toString + } + + def static getLambdaBody(ExpressionStatement exprStatement) { + ((exprStatement.expression as MethodInvocation).expression as ClassInstanceCreation).anonymousClassDeclaration + } + + def static lambdaVariableWrites(AnonymousClassDeclaration anonClass) { + val List variableWrites = newArrayList + anonClass.bodyDeclarations.forEach [ + val visitor = new ASTVisitor() { + override visit(Assignment assignment) { + variableWrites.add(assignment) + } + } + (it as ASTNode).accept(visitor) + ] + variableWrites + } + + def static getVariableDeclarations(AnonymousClassDeclaration anonClass) { + val List variableDeclarations = newArrayList + anonClass.bodyDeclarations.forEach [ + val visitor = new ASTVisitor() { + override visit(VariableDeclarationStatement varDecl) { + variableDeclarations.add(varDecl) + } + } + (it as ASTNode).accept(visitor) + ] + variableDeclarations + } + + def static getAllFieldDeclarationsInClass(TypeDeclaration typeDecl) { + val List fieldDeclarations = newArrayList + typeDecl.bodyDeclarations.forEach[ + val visitor = new ASTVisitor() { + override visit(FieldDeclaration fieldDecl) { + + fieldDeclarations.add(fieldDecl) + } + } + (it as ASTNode).accept(visitor) + ] + fieldDeclarations + } + + def static isDeclaredIn(Assignment assignment, AnonymousClassDeclaration anonClass) { + if(assignment.leftHandSide instanceof SimpleName) { + val varName = (assignment.leftHandSide as SimpleName) + val List namesList = newArrayList + anonClass.bodyDeclarations.forEach[ + val visitor = new ASTVisitor() { + override visit(SimpleName name) { + if(name.identifier == varName.identifier) { + namesList.add(name) + return true + } + true + } + } + (it as ASTNode).accept(visitor) + ] + for (name : namesList) { + if (name == varName) { + return false + } else if (name.parent instanceof VariableDeclarationFragment) { + return true + } + } + return false + } + true + } + + def static isOnlyHaveAssignmentsWithFieldAccess(List target) { + + val List fieldDeclarations = newArrayList + allTypeDeclarationInWorkSpace.forEach[ + it.bodyDeclarations.forEach[ + if (it instanceof FieldDeclaration) { + fieldDeclarations.add(it) + } + ] + ] + + !target.exists[ + val visitor = new ASTVisitor(){ + public boolean found = false + override visit(SimpleName name) { + if (Utils.getAssignment(name) !== null && name == Utils.getAssignment(name).leftHandSide && !fieldDeclarations.exists[ + ((it as FieldDeclaration).fragments as List).exists[ + it.name.resolveBinding.isEqualTo(name.resolveBinding)] ]) { + found = true + return false + } + true + } + } + it.accept(visitor) + return visitor.found + ] + } + + def static containsValueReturn(List target) { + target.exists [ + val visitor = new ASTVisitor() { + public var found = false + override visit(ReturnStatement statement) { + if (statement.expression !== null) { + found = true + return false + } + true + } + } + it.accept(visitor) + visitor.found + ] + } + + def static containsVoidReturn(List target) { + target.exists [ + val visitor = new ASTVisitor() { + public var found = false + override visit(ReturnStatement statement) { + if (statement.expression === null) { + found = true + return false + } + true + } + } + it.accept(visitor) + visitor.found + ] + } + + def static getVoidReturn(List target) { + val List result = newArrayList + target.exists [ + val visitor = new ASTVisitor() { + public var found = false + override visit(ReturnStatement statement) { + if (statement.expression === null) { + found = true + result.add(statement) + return false + } + true + } + } + it.accept(visitor) + visitor.found + ] + result.head as ReturnStatement + } + + def static isLastExecutionPath(ReturnStatement statement) { + var firstLevelNodeInMethod = statement as ASTNode + while (!((firstLevelNodeInMethod.parent instanceof Block) && ((firstLevelNodeInMethod.parent as Block).parent instanceof MethodDeclaration))) { + firstLevelNodeInMethod = firstLevelNodeInMethod.parent + } + val node = firstLevelNodeInMethod + val nodesAfterReturnStatement = (firstLevelNodeInMethod.parent as Block).statements.dropWhile[it != node] + nodesAfterReturnStatement.size == 1 && nodesAfterReturnStatement.head == node + } + + + def static allExecutionPathContainsValueReturn(List target) { + + + + + + } + + //method or field property getters def static String getMethodName(List target) { if (target.head instanceof MethodDeclaration) { @@ -218,8 +412,9 @@ class Check { //class checks def static enclosingClass(List target) { - val typeDecl = Utils.getTypeDeclaration(target.head) - allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] + //val typeDecl = + Utils.getTypeDeclaration(target.head) + //allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] } def static superClass(TypeDeclaration typeDecl) { @@ -244,6 +439,7 @@ class Check { if (target.head instanceof FieldDeclaration) { val fieldDecl = target.head as FieldDeclaration + //val fieldDecl = getFieldFromClass(getFragmentNames(target), typeDecl) val fragments = fieldDecl.fragments as List for(fragment : fragments) { val binding = fragment.resolveBinding @@ -261,6 +457,7 @@ class Check { } } else if (target.head instanceof MethodDeclaration) { val methodDecl = target.head as MethodDeclaration + //val methodDecl = getMethodFromClass(targetMethod.name.identifier, targetMethod.parameters, typeDecl) val binding = methodDecl.resolveBinding for(declaration : bodyDeclarations) { val visitor = new ASTVisitor() { @@ -403,7 +600,20 @@ class Check { method } - def private static getMethodFromClass(String methodName, List parameters, TypeDeclaration typeDecl) { + def static getFieldFromClass(List fragmentNames, TypeDeclaration typeDecl) { + typeDecl.bodyDeclarations.findFirst[ + val iter = fragmentNames.iterator + it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments as List).forall[ + if (iter.hasNext){ + it.name.identifier == iter.next + } else { + false + } + ] + ] as FieldDeclaration + } + + def static getMethodFromClass(String methodName, List parameters, TypeDeclaration typeDecl) { val methodsInClass = typeDecl.bodyDeclarations.filter[it instanceof MethodDeclaration] var MethodDeclaration result @@ -594,6 +804,8 @@ class Check { for(fragmentName : fragmentNames) { val allReferences = referencesThatCanGetViolated(fragmentName, targetTypeDecl) + println("Allrefs: " +allReferences) + val Queue methodsToCheck = newLinkedList for(ref : allReferences) { @@ -662,6 +874,7 @@ class Check { tmp.add(method) methodRefs.addAll(references(tmp, t)) } + if(!methodRefs.empty) { for(methodRef : methodRefs) { if(Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility != "private") { @@ -703,5 +916,30 @@ class Check { } + def static getAllSubClasses(TypeDeclaration typeDecl) { + val binding = typeDecl.resolveBinding + val List subClasses = newArrayList + + allTypeDeclarationInWorkSpace.forEach[ + if(it.resolveBinding.isSubClassOf(binding) && typeDecl != it) { + subClasses.add(it) + } + ] + subClasses + } + + def static overridesOf(String methodName, List methodParameters, TypeDeclaration targetTypeDeclaration) { + val subClasses = targetTypeDeclaration.allSubClasses + val List overriddenMethods = newArrayList + subClasses.forEach[ + if(!isUniqueMethodIn(methodName, methodParameters, it)) { + overriddenMethods.add(getMethodFromClass(methodName, methodParameters, it)) + } + ] + overriddenMethods + } + + + } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend index cd0901b..ecd77ad 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend @@ -6,11 +6,7 @@ import hu.elte.refjava.api.patterns.PatternParser import hu.elte.refjava.api.patterns.Utils import hu.elte.refjava.lang.refJava.PMethodDeclaration import java.util.List -import org.eclipse.jdt.core.ICompilationUnit -import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode -import org.eclipse.jdt.core.dom.ASTParser -import org.eclipse.jdt.core.dom.CompilationUnit import org.eclipse.jdt.core.dom.FieldDeclaration import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.TypeDeclaration @@ -23,7 +19,6 @@ import static hu.elte.refjava.api.Check.* class ClassRefactoring implements Refactoring { List target - List typeDeclList IDocument document val PatternMatcher matcher @@ -46,8 +41,14 @@ class ClassRefactoring implements Refactoring { } protected new(String matchingPatternString, String replacementPatternString) { - matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) - builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) + nameBindings.clear + typeBindings.clear + parameterBindings.clear + visibilityBindings.clear + argumentBindings.clear + setMetaVariables() + this.matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) + this.builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) this.matchingString = matchingPatternString this.replacementString = replacementPatternString this.refactoringType = if(replacementPatternString != "nothing") { @@ -59,20 +60,20 @@ class ClassRefactoring implements Refactoring { RefactoringType.FIELD_LIFT } } + + if (replacementString == "nothing" && definitionString == "target") { + this.definitionString = matchingString + this.definitionTypeReferenceString = matchingTypeReferenceString + } } override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document - this.typeDeclList = allTypeDeclInWorkspace - } - - def setTarget(List newTarget) { - this.target = newTarget + Check.allTypeDeclarationInWorkSpace = allTypeDeclInWorkspace } override apply() { - setMetaVariables() return if(!safeTargetCheck) { Status.TARGET_MATCH_FAILED } else if (!safeMatch) { @@ -90,16 +91,15 @@ class ClassRefactoring implements Refactoring { def private safeMatch() { try { - if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, matchingTypeReferenceString)) { return false } target = matcher.modifiedTarget.toList bindings.putAll(matcher.bindings) - - return true + true } catch (Exception e) { println(e) - return false + false } } @@ -108,126 +108,101 @@ class ClassRefactoring implements Refactoring { } def protected safeTargetCheck() { - return true + true } def protected targetCheck(String targetPatternString) { try { this.targetString = targetPatternString - if(!matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString)) { + if(!matcher.match(PatternParser.parse(targetPatternString), target, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, targetTypeReferenceString)) { return false } bindings.putAll(matcher.bindings) - return true + true } catch (Exception e) { println(e) - return false - } + false + } } def private safeCheck() { try { - return check() + check() } catch (Exception e) { println(e) - return false + false } } def protected check() { - Check.allTypeDeclarationInWorkSpace = typeDeclList - - if (replacementString == "nothing" && definitionString == "target" && matchingString == "target") { - definitionString = targetString - definitionTypeReferenceString = targetTypeReferenceString - } else if (replacementString == "nothing" && definitionString == "target" && matchingString != "target") { - definitionString = matchingString - definitionTypeReferenceString = matchingTypeReferenceString - } - if(refactoringType == RefactoringType.NEW_METHOD) { - val compUnit = Utils.getCompilationUnit(target.head) - val iCompUnit = compUnit.getJavaElement as ICompilationUnit - - val parser = ASTParser.newParser(AST.JLS12); - parser.resolveBindings = true - parser.source = iCompUnit - val newCompUnit = parser.createAST(null) as CompilationUnit - newCompUnit.recordModifications + val iCompUnit = Utils.getICompilationUnit(target.head) + val compUnit = Utils.parseSourceCode(iCompUnit) + compUnit.recordModifications val definitionPattern = PatternParser.parse(definitionString) - val newMethod = builder.build(definitionPattern, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head as MethodDeclaration - - val targetClass = newCompUnit.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == Utils.getTypeDeclaration(target.head).resolveBinding.qualifiedName ] as TypeDeclaration + val newMethod = builder.build(definitionPattern, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, definitionTypeReferenceString).head as MethodDeclaration + val targetClass = compUnit.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == Utils.getTypeDeclaration(target.head).resolveBinding.qualifiedName ] as TypeDeclaration targetClass.bodyDeclarations.add(newMethod) - - val edits2 = newCompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true)) - edits2.apply(document) - val newSource = document.get; - iCompUnit.getBuffer.setContents(newSource) - - val parser2 = ASTParser.newParser(AST.JLS12) - parser2.resolveBindings = true - parser2.source = iCompUnit - val newCompUnit2 = parser2.createAST(null) as CompilationUnit - - val targetClass2 = newCompUnit2.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == Utils.getTypeDeclaration(target.head).resolveBinding.qualifiedName] as TypeDeclaration - val newMethodInClass = targetClass2.bodyDeclarations.findFirst[it instanceof MethodDeclaration && (it as MethodDeclaration).name.identifier == (newMethod as MethodDeclaration).name.identifier] as MethodDeclaration + Utils.applyChanges(compUnit, document) + val compUnit2 = Utils.parseSourceCode(iCompUnit) + val targetClass2 = compUnit2.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == Utils.getTypeDeclaration(target.head).resolveBinding.qualifiedName] as TypeDeclaration + val newMethodInClass = targetClass2.bodyDeclarations.last val List definition = newArrayList definition.add(newMethodInClass) - val safeCheck = Check.isUniqueMethodIn(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)) - && if(Check.isOverrideIn(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target))) { - !Check.isLessVisible(Check.visibility(definition), Check.visibility(Check.overridenMethodFrom(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)))) - && Check.isSubTypeOf(Check.type(definition), Check.type(Check.overridenMethodFrom(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)))) - && Check.visibility(Check.overridenMethodFrom(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target))) != "public" - && Check.publicReferences(Check.getMethodName(definition), Check.parameters(definition), Check.enclosingClass(target)).empty - //&& false - } else { - true - } - - newCompUnit2.recordModifications - targetClass2.bodyDeclarations.remove(newMethodInClass) - val edits3 = newCompUnit2.rewrite(document, iCompUnit.javaProject.getOptions(true)) - edits3.apply(document) - val newSource2 = document.get - iCompUnit.getBuffer.setContents(newSource2) + val overrideCheck = if(isOverrideIn(getMethodName(definition), parameters(definition), enclosingClass(target))) { + !isLessVisible(visibility(definition), visibility(overridenMethodFrom(getMethodName(definition), parameters(definition), enclosingClass(target)))) + && isSubTypeOf(type(definition), type(overridenMethodFrom(getMethodName(definition), parameters(definition), enclosingClass(target)))) + && visibility(overridenMethodFrom(getMethodName(definition), parameters(definition), enclosingClass(target))) != "public" + && publicReferences(getMethodName(definition), parameters(definition), enclosingClass(target)).empty } else { true } - return safeCheck + val safeCheck = isUniqueMethodIn(getMethodName(definition), parameters(definition), enclosingClass(target)) + && overrideCheck + && overridesOf(getMethodName(definition), parameters(definition), enclosingClass(target)).forall[ + !isLessVisible(visibility(it), visibility(definition)) && + isSubTypeOf(type(it), type(definition))] + + compUnit2.recordModifications + targetClass2.bodyDeclarations.remove(newMethodInClass) + Utils.applyChanges(compUnit2, document) + safeCheck } else { if(refactoringType == RefactoringType.METHOD_LIFT) { - return Check.hasSuperClass(Check.enclosingClass(target)) - && if (Check.isPrivate(target)) Check.references(target, Check.enclosingClass(target)).empty else true - && Check.accessedFieldsOfEnclosingClass(target, Check.enclosingClass(target)).empty - && Check.accessedMethodsOfEnclosingClass(target, Check.enclosingClass(target)).empty - && Check.isUniqueMethodIn(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))) - && if(Check.isOverrideIn(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target)))) { - !Check.isLessVisible(Check.visibility(target), Check.visibility(Check.overridenMethodFrom(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))))) - && Check.isSubTypeOf(Check.type(target), Check.type(Check.overridenMethodFrom(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))))) - && Check.visibility(Check.overridenMethodFrom(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target)))) != "public" - && Check.publicReferences(Check.getMethodName(target), Check.parameters(target), Check.superClass(Check.enclosingClass(target))).empty - } else { - true - } - //TODO - + val privateCheck = if (isPrivate(target)) { references(target, enclosingClass(target)).empty } else { true } + val overrideCheck = if(isOverrideIn(getMethodName(target), parameters(target), superClass(enclosingClass(target)))) { + !isLessVisible(visibility(target), visibility(overridenMethodFrom(getMethodName(target), parameters(target), superClass(enclosingClass(target))))) + && isSubTypeOf(type(target), type(overridenMethodFrom(getMethodName(target), parameters(target), superClass(enclosingClass(target))))) + && visibility(overridenMethodFrom(getMethodName(target), parameters(target), superClass(enclosingClass(target)))) != "public" + && publicReferences(getMethodName(target), parameters(target), superClass(enclosingClass(target))).empty } else { true } + + return hasSuperClass(enclosingClass(target)) + && privateCheck + && accessedFieldsOfEnclosingClass(target, enclosingClass(target)).empty + && accessedMethodsOfEnclosingClass(target, enclosingClass(target)).empty + && isUniqueMethodIn(getMethodName(target), parameters(target), superClass(enclosingClass(target))) + && overrideCheck + && overridesOf(getMethodName(target), parameters(target), superClass(enclosingClass(target))).forall[ + !isLessVisible(visibility(it), visibility(target)) && + isSubTypeOf(type(it), type(target))] + } else if (refactoringType == RefactoringType.FIELD_LIFT) { - return Check.hasSuperClass(Check.enclosingClass(target)) - && if (Check.isPrivate(target)) Check.references(target, Check.enclosingClass(target)).empty else true - && Check.isUniqueFieldIn(Check.getFragmentNames(target), Check.superClass(Check.enclosingClass(target))) - && Check.publicReferences(Check.getFragmentNames(target), Check.superClass(Check.enclosingClass(target))).empty - && Check.privateReferences(Check.getFragmentNames(target), Check.superClass(Check.enclosingClass(target))).forall [ - Check.isSubTypeOf(Check.type(target), Check.referredField(it).type) ] + val privateCheck = if (isPrivate(target)) { references(target, enclosingClass(target)).empty } else { true } + return hasSuperClass(enclosingClass(target)) + && privateCheck + && isUniqueFieldIn(getFragmentNames(target), superClass(enclosingClass(target))) + && publicReferences(getFragmentNames(target), superClass(enclosingClass(target))).empty + && privateReferences(getFragmentNames(target), superClass(enclosingClass(target))).forall [ + isSubTypeOf(Check.type(target), type(referredField(it))) ] } - return false + false } } @@ -235,13 +210,13 @@ class ClassRefactoring implements Refactoring { try { if(refactoringType == RefactoringType.NEW_METHOD) { val replacementPattern = PatternParser.parse(replacementString) - replacement = builder.build(replacementPattern, target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString) + replacement = builder.build(replacementPattern, target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, definitionTypeReferenceString) } + true } catch (Exception e) { println(e) - return false + false } - return true } def private safeReplace() { @@ -251,83 +226,55 @@ class ClassRefactoring implements Refactoring { val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] - val group = rewrite.createGroupNode( replacement ) + val group = rewrite.createGroupNode(replacement) rewrite.replace( target.head, group, null) var edits = rewrite.rewriteAST(document, null) edits.apply(document) } - val compUnit = Utils.getCompilationUnit(target.head) - val targetICompUnit = compUnit.getJavaElement as ICompilationUnit + val targetTypeDeclaration = Utils.getTypeDeclaration(target.head) + var superClass = superClass(targetTypeDeclaration) + val superCompUnit = Utils.getCompilationUnit(superClass) + val superICompUnit = Utils.getICompilationUnit(superCompUnit) - val parser = ASTParser.newParser(AST.JLS12) - parser.resolveBindings = true - parser.source = targetICompUnit - val targetCompUnit = parser.createAST(null) as CompilationUnit + val targetICompUnit = Utils.getICompilationUnit(target.head) + val targetCompUnit = Utils.parseSourceCode(targetICompUnit) targetCompUnit.recordModifications val definitionPattern = PatternParser.parse(definitionString) - var objectToInsertOrMove = builder.build(definitionPattern, targetCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head - - val targetTypeDeclaration = Utils.getTypeDeclaration(target.head) - val targetClass = targetCompUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == targetTypeDeclaration.name.identifier ] as TypeDeclaration - - var CompilationUnit superCompUnit - var ICompilationUnit superICompUnit = null + var objectToInsertOrMove = builder.build(definitionPattern, targetCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, definitionTypeReferenceString).head + val targetClass = targetCompUnit.types.findFirst[(it as TypeDeclaration).name.identifier == targetTypeDeclaration.name.identifier] as TypeDeclaration if(refactoringType == RefactoringType.NEW_METHOD) { targetClass.bodyDeclarations.add(objectToInsertOrMove) } else { - val superClassType = targetTypeDeclaration.superclassType - val superClassTypeBinding = superClassType.resolveBinding - - var TypeDeclaration superClass - for(t : typeDeclList) { - if (t.resolveBinding.toString == superClassTypeBinding.toString) { - superClass = t - } - } - - val compUnit2 = Utils.getCompilationUnit(superClass) - superICompUnit = compUnit2.getJavaElement as ICompilationUnit - - if (superICompUnit != targetICompUnit) { - superCompUnit = Utils.getCompilationUnit(superClass) - superICompUnit = superCompUnit.getJavaElement() as ICompilationUnit - superClass = superCompUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + if(superICompUnit != targetICompUnit) { superCompUnit.recordModifications - objectToInsertOrMove = builder.build(definitionPattern, superCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, definitionTypeReferenceString).head + objectToInsertOrMove = builder.build(definitionPattern, superCompUnit.AST , bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, definitionTypeReferenceString).head } else { - superClass = targetCompUnit.types.findFirst[ (it as TypeDeclaration).name.identifier == superClassType.toString] as TypeDeclaration + superClass = targetCompUnit.types.findFirst[(it as TypeDeclaration).resolveBinding.isEqualTo(targetClass.superclassType.resolveBinding)] } - var Object methodOrFieldToDelete - if(refactoringType == RefactoringType.METHOD_LIFT){ - methodOrFieldToDelete = targetClass.bodyDeclarations.findFirst[ it instanceof MethodDeclaration && (it as MethodDeclaration).name.identifier == (target.head as MethodDeclaration).name.identifier ] + val methodOrFieldToDelete = if(refactoringType == RefactoringType.METHOD_LIFT){ + getMethodFromClass(getMethodName(target), parameters(target), targetClass) } else if (refactoringType == RefactoringType.FIELD_LIFT) { - methodOrFieldToDelete = targetClass.bodyDeclarations.findFirst[ it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == ((target.head as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier ] + targetClass.bodyDeclarations.findFirst[it instanceof FieldDeclaration && + ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == ((target.head as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier] } - superClass.bodyDeclarations.add(objectToInsertOrMove) targetClass.bodyDeclarations.remove(methodOrFieldToDelete) + + if(superICompUnit != targetICompUnit) { + val superDocument = new Document(superICompUnit.source) + Utils.applyChanges(superCompUnit, superDocument) + superICompUnit.getBuffer.setContents(superDocument.get) + } } - - val edits2 = targetCompUnit.rewrite(document, targetICompUnit.javaProject.getOptions(true)) - edits2.apply(document) - val newSource = document.get - targetICompUnit.getBuffer.setContents(newSource) - - if(superICompUnit !== null && superICompUnit != targetICompUnit) { - val superDocument = new Document(superICompUnit.source) - val edits3 = superCompUnit.rewrite(superDocument, superICompUnit.javaProject.getOptions(true)) - edits3.apply(superDocument) - val superSource = superDocument.get - superICompUnit.getBuffer.setContents(superSource) - } + Utils.applyChanges(targetCompUnit, document) + true } catch (Exception e) { println(e) return false } - return true } } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend index a31ea43..3ae676f 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend @@ -8,11 +8,8 @@ import hu.elte.refjava.lang.refJava.PConstructorCall import hu.elte.refjava.lang.refJava.PMemberFeatureCall import hu.elte.refjava.lang.refJava.PMetaVariable import java.util.List -import org.eclipse.jdt.core.ICompilationUnit -import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode -import org.eclipse.jdt.core.dom.ASTParser -import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.dom.ExpressionStatement import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jface.text.Document import org.eclipse.jface.text.IDocument @@ -22,7 +19,6 @@ import static hu.elte.refjava.api.Check.* class LambdaRefactoring implements Refactoring { List target - List typeDeclList IDocument document val PatternMatcher matcher @@ -42,13 +38,19 @@ class LambdaRefactoring implements Refactoring { MODIFICATION, NEW } - + protected new(String matchingPatternString, String replacementPatternString) { - matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) - builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) - val matchingPatternsFirstElement = PatternParser.parse(matchingPatternString).patterns.get(0) + nameBindings.clear + typeBindings.clear + parameterBindings.clear + visibilityBindings.clear + argumentBindings.clear + setMetaVariables() + this.matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) + this.builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) this.matchingString = matchingPatternString this.replacementString = replacementPatternString + val matchingPatternsFirstElement = PatternParser.parse(matchingPatternString).patterns.get(0) if (matchingPatternsFirstElement instanceof PMemberFeatureCall && (matchingPatternsFirstElement as PMemberFeatureCall).memberCallTarget instanceof PConstructorCall && ((matchingPatternsFirstElement as PMemberFeatureCall).memberCallTarget as PConstructorCall).anonInstance) { this.refactoringType = RefactoringType.MODIFICATION @@ -61,7 +63,7 @@ class LambdaRefactoring implements Refactoring { override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document - this.typeDeclList = allTypeDeclInWorkspace + Check.allTypeDeclarationInWorkSpace = allTypeDeclInWorkspace if(refactoringType == RefactoringType.MODIFICATION) { val matchingLambdaExpression = PatternParser.parse(matchingString).patterns.get(0) as PMemberFeatureCall @@ -74,12 +76,7 @@ class LambdaRefactoring implements Refactoring { } } - def setTarget(List newTarget) { - this.target = newTarget - } - override apply() { - setMetaVariables() return if(!safeTargetCheck) { Status.TARGET_MATCH_FAILED } else if (!safeMatch) { @@ -97,18 +94,16 @@ class LambdaRefactoring implements Refactoring { def private safeMatch() { try { - if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, matchingTypeReferenceString)) { return false } target = matcher.modifiedTarget.toList bindings.putAll(matcher.bindings) - - return true + true } catch (Exception e) { println(e) - return false + false } - } def protected void setMetaVariables() { @@ -116,126 +111,114 @@ class LambdaRefactoring implements Refactoring { } def protected safeTargetCheck() { - return true + true } def protected targetCheck(String targetPatternString) { try { - if(!matcher.match(PatternParser.parse(targetPatternString), target, targetTypeReferenceString)) { + if(!matcher.match(PatternParser.parse(targetPatternString), target, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, targetTypeReferenceString)) { return false } bindings.putAll(matcher.bindings) - return true + true } catch (Exception e) { println(e) - return false + false } } def private safeCheck() { try { - return check() + check() } catch (Exception e) { println(e) - return false + false } } def protected check() { - Check.allTypeDeclarationInWorkSpace = typeDeclList - if(refactoringType == RefactoringType.NEW) { - val replacementLambdaExpression = PatternParser.parse(replacementString).patterns.get(0) as PMemberFeatureCall - var boolean isMetaName = false - var String metaVarName - var String interfaceName - if((replacementLambdaExpression.memberCallTarget as PConstructorCall).metaName !== null) { - isMetaName = true - metaVarName = ((replacementLambdaExpression.memberCallTarget as PConstructorCall).metaName as PMetaVariable).name - } else { - interfaceName = (replacementLambdaExpression.memberCallTarget as PConstructorCall).name - } - return if (isMetaName) { nameBindings.put(metaVarName, Check.generateNewName) true } else { Check.isFresh(interfaceName) } && - true - //TODO + val iCompUnit = Utils.getICompilationUnit(target.head) + val compUnit = Utils.parseSourceCode(iCompUnit) + + val replacementPattern = PatternParser.parse(replacementString) + val replacementLambdaExpression = replacementPattern.patterns.head + if (((replacementLambdaExpression as PMemberFeatureCall).memberCallTarget as PConstructorCall).metaName !== null) { + val metaVarName = (((replacementLambdaExpression as PMemberFeatureCall).memberCallTarget as PConstructorCall).metaName as PMetaVariable).name + nameBindings.put(metaVarName, generateNewName) + } + val newLambdaExpression = builder.build(replacementPattern, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, replacementTypeReferenceString).head as ExpressionStatement + + println("ASD") + return isFresh(getLambdaName(newLambdaExpression)) + && (lambdaVariableWrites(getLambdaBody(newLambdaExpression)).forall[isDeclaredIn(it, getLambdaBody(newLambdaExpression))] + || isOnlyHaveAssignmentsWithFieldAccess(target)) + } else { - return Check.references(interfaceToModify).size == 1 && - Check.contains(Check.references(interfaceToModify), target) + + return references(interfaceToModify).size == 1 && + contains(references(interfaceToModify), target) } } def private safeBuild() { try { - replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, replacementTypeReferenceString) + true } catch (Exception e) { println(e) - return false - } - return true + false + } } def private safeReplace() { try { val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] - val group = rewrite.createGroupNode(replacement) - rewrite.replace( target.head, group, null) + rewrite.replace(target.head, group, null) var edits = rewrite.rewriteAST(document, null) edits.apply(document) - val compUnit = Utils.getCompilationUnit(target.head) - val iCompUnit= compUnit.getJavaElement() as ICompilationUnit - - val parser = ASTParser.newParser(AST.JLS12) - parser.resolveBindings = true - parser.source = iCompUnit - val newCompUnit = parser.createAST(null) as CompilationUnit + val iCompUnit= Utils.getICompilationUnit(target.head) + val compUnit = Utils.parseSourceCode(iCompUnit) + compUnit.recordModifications - newCompUnit.recordModifications val replacementLambdaExpression = PatternParser.parse(replacementString).patterns.get(0) as PMemberFeatureCall - if(refactoringType == RefactoringType.NEW) { //if we are defining a new lambda expression, we just simply add a new interface to the target document - val newInterface = builder.buildNewInterface(replacementLambdaExpression, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) - newCompUnit.types.add(newInterface) + val newInterface = builder.buildNewInterface(replacementLambdaExpression, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, replacementTypeReferenceString) + compUnit.types.add(newInterface) } else { //if we modifying an existing lambda expression, we have to find out where is the existing interface declaration on the workspace val interfaceCompUnit = Utils.getCompilationUnit(interfaceToModify) - val interfaceICompUnit = interfaceCompUnit.getJavaElement() as ICompilationUnit + val interfaceICompUnit = Utils.getICompilationUnit(interfaceCompUnit) if(interfaceICompUnit != iCompUnit) { //if the interface's document isn't the same as the target document, we are going to remove that interface from that document and then add the new interfaceCompUnit.recordModifications - val newInterface = builder.buildNewInterface(replacementLambdaExpression, interfaceCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + val newInterface = builder.buildNewInterface(replacementLambdaExpression, interfaceCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, replacementTypeReferenceString) interfaceCompUnit.types.remove(interfaceToModify) interfaceCompUnit.types.add(newInterface) val interfaceDocument = new Document(interfaceICompUnit.source) - val edits3 = interfaceCompUnit.rewrite(interfaceDocument, interfaceICompUnit.javaProject.getOptions(true)) - edits3.apply(interfaceDocument) - val interfaceSource = interfaceDocument.get - interfaceICompUnit.getBuffer.setContents(interfaceSource) + Utils.applyChanges(interfaceCompUnit, interfaceDocument) + interfaceICompUnit.getBuffer.setContents(interfaceDocument.get) } else { //if the interface's document is the same as the target document, we just simply remove the interface from the target document and then add the new - val newInterface = builder.buildNewInterface(replacementLambdaExpression, newCompUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) - val interfaceToRemove = newCompUnit.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == interfaceToModify.resolveBinding.qualifiedName] as TypeDeclaration - newCompUnit.types.remove(interfaceToRemove) - newCompUnit.types.add(newInterface) + val newInterface = builder.buildNewInterface(replacementLambdaExpression, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, replacementTypeReferenceString) + val interfaceToRemove = compUnit.types.findFirst[(it as TypeDeclaration).resolveBinding.qualifiedName == interfaceToModify.resolveBinding.qualifiedName] as TypeDeclaration + compUnit.types.remove(interfaceToRemove) + compUnit.types.add(newInterface) } } - - val edits2 = newCompUnit.rewrite(document, iCompUnit.javaProject.getOptions(true)) - edits2.apply(document) - val String newSource = document.get - iCompUnit.getBuffer.setContents(newSource) - + Utils.applyChanges(compUnit, document) + true } catch (Exception e) { println(e) return false } - return true } } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend index 508ab24..7a213db 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend @@ -8,6 +8,8 @@ import org.eclipse.jdt.core.dom.ASTNode import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jface.text.IDocument +import static hu.elte.refjava.api.Check.* + class LocalRefactoring implements Refactoring { List target @@ -22,8 +24,14 @@ class LocalRefactoring implements Refactoring { List replacement protected new(String matchingPatternString, String replacementPatternString) { - matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) - builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) + nameBindings.clear + typeBindings.clear + parameterBindings.clear + visibilityBindings.clear + argumentBindings.clear + setMetaVariables() + this.matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) + this.builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) } override init(List target, IDocument document, List allTypeDeclInWorkspace) { @@ -32,7 +40,6 @@ class LocalRefactoring implements Refactoring { } override apply() { - setMetaVariables() return if (!safeMatch) { Status.MATCH_FAILED } else if (!safeCheck) { @@ -47,18 +54,18 @@ class LocalRefactoring implements Refactoring { } def private safeMatch() { - if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, matchingTypeReferenceString)) { + if (!matcher.match(target, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, matchingTypeReferenceString)) { return false } - bindings.putAll(matcher.bindings) - return true + true } def private safeCheck() { try { check() } catch (Exception e) { + println(e) false } } @@ -68,33 +75,32 @@ class LocalRefactoring implements Refactoring { } def protected check() { - Check.isInsideBlock(target) + isInsideBlock(target) } def private safeBuild() { try { - replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, replacementTypeReferenceString) + replacement = builder.build(target.head.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, replacementTypeReferenceString) + true } catch (Exception e) { - return false + println(e) + false } - - return true } def private safeReplace() { try { val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] - + val group = rewrite.createGroupNode(replacement) rewrite.replace(target.head, group, null) - val edits = rewrite.rewriteAST(document, null) edits.apply(document) + true } catch (Exception e) { - return false + println(e) + false } - - return true } } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend index 3d4277b..34e86ef 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend @@ -1,9 +1,12 @@ package hu.elte.refjava.api -import java.lang.reflect.Type +import hu.elte.refjava.lang.refJava.Visibility import java.util.List import java.util.Map import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.Expression +import org.eclipse.jdt.core.dom.SingleVariableDeclaration +import org.eclipse.jdt.core.dom.Type import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jface.text.IDocument @@ -12,7 +15,10 @@ interface Refactoring { val Map> bindings = newHashMap val Map nameBindings = newHashMap val Map typeBindings = newHashMap - val Map>> parameterBindings = newHashMap + val Map> parameterBindings = newHashMap + val Map visibilityBindings = newHashMap + val Map> argumentBindings = newHashMap + enum Status { SUCCESS, @@ -22,7 +28,7 @@ interface Refactoring { REPLACEMENT_FAILED, TARGET_MATCH_FAILED } - + def void init(List target, IDocument document, List allTypeDeclInWorkspace) def Status apply() diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend index d57b5f2..d07aca2 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend @@ -12,15 +12,18 @@ import hu.elte.refjava.lang.refJava.PNothingExpression import hu.elte.refjava.lang.refJava.PTargetExpression import hu.elte.refjava.lang.refJava.PVariableDeclaration import hu.elte.refjava.lang.refJava.Pattern -import java.lang.reflect.Type +import hu.elte.refjava.lang.refJava.Visibility import java.util.List import java.util.Map import java.util.Queue import org.eclipse.jdt.core.dom.AST import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.Block import org.eclipse.jdt.core.dom.Expression import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword +import org.eclipse.jdt.core.dom.SingleVariableDeclaration +import org.eclipse.jdt.core.dom.Type import org.eclipse.jdt.core.dom.rewrite.ASTRewrite class ASTBuilder { @@ -31,7 +34,9 @@ class ASTBuilder { Map> bindings Map nameBindings Map typeBindings - Map>> parameterBindings + Map> parameterBindings + Map visibilityBindings + Map> argumentBindings Queue typeReferenceQueue new(Pattern pattern) { @@ -42,17 +47,42 @@ class ASTBuilder { rewrite } - def build(Pattern pattern, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { + def build(Pattern pattern, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map> parameterBindings, Map visibilityBindings, Map> argumentBindings, String typeRefString) { this.pattern = pattern - build(ast, bindings, nameBindings, typeBindings, parameterBindings, typeRefString) + build(ast, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) } - def buildNewInterface(PMemberFeatureCall lambdaExpr, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString){ + def build(AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map> parameterBindings, Map visibilityBindings, Map> argumentBindings, String typeRefString) { + this.ast = ast + this.rewrite = ASTRewrite.create(ast) + this.bindings = bindings + this.nameBindings = nameBindings + this.typeBindings = typeBindings + this.parameterBindings = parameterBindings + this.visibilityBindings = visibilityBindings + this.argumentBindings = argumentBindings + + if(typeRefString !== null) { + val tmp = typeRefString.split("\\|") + this.typeReferenceQueue = newLinkedList + this.typeReferenceQueue.addAll(tmp) + } + + if(pattern instanceof PNothingExpression) { + null + } else { + pattern.patterns.doBuildPatterns + } + } + + def buildNewInterface(PMemberFeatureCall lambdaExpr, AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map> parameterBindings, Map visibilityBindings, Map> argumentBindings, String typeRefString){ this.ast = ast this.bindings = bindings this.nameBindings = nameBindings this.typeBindings = typeBindings this.parameterBindings = parameterBindings + this.visibilityBindings = visibilityBindings + this.argumentBindings = argumentBindings val newInterface = ast.newTypeDeclaration newInterface.interface = true @@ -74,37 +104,17 @@ class ASTBuilder { newInterfaceBodyDeclarations.forEach[ if(it instanceof MethodDeclaration) { - (it as MethodDeclaration).body = null + it.body = null } ] - newInterface.bodyDeclarations.addAll(newInterfaceBodyDeclarations) - return newInterface + newInterface.bodyDeclarations.addAll(newInterfaceBodyDeclarations.filter[it instanceof MethodDeclaration]) + newInterface } - - - def build(AST ast, Map> bindings, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { - this.ast = ast - this.rewrite = ASTRewrite.create(ast) - this.bindings = bindings - this.nameBindings = nameBindings - this.typeBindings = typeBindings - this.parameterBindings = parameterBindings - - if(typeRefString !== null) { - val tmp = typeRefString.split("\\|") - this.typeReferenceQueue = newLinkedList - this.typeReferenceQueue.addAll(tmp) - } - - if(pattern instanceof PNothingExpression) { - return null - } else { - return pattern.patterns.doBuildPatterns - } - } - - //meta variable builder + + /////////////////////// + // doBuild overloads // + /////////////////////// def private dispatch doBuild(PMetaVariable metaVar) { val binding = bindings.get(metaVar.name) if (!binding.empty) { @@ -113,7 +123,6 @@ class ASTBuilder { } } - //target expression builder def private dispatch doBuild(PTargetExpression targetExpr) { val binding = bindings.get("target") if (!binding.empty) { @@ -137,17 +146,15 @@ class ASTBuilder { //adding constructor call anonymous class declaration (body) if(constCall.anonInstance) { val anonClass = ast.newAnonymousClassDeclaration - val buildDeclarations = constCall.elements.doBuildPatterns anonClass.bodyDeclarations.addAll(buildDeclarations) - class.anonymousClassDeclaration = anonClass } - return class + class } - //method builder + //method declaration builder def private dispatch ASTNode doBuild(PMethodDeclaration methodDecl) { val method = ast.newMethodDeclaration @@ -160,11 +167,21 @@ class ASTBuilder { } //adding method visibility - switch methodDecl.prefix.visibility { - case PUBLIC: method.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) - case PRIVATE: method.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) - case PROTECTED: method.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) - default: {} + if (methodDecl.prefix.metaVisibility !== null) { + val metaVarName = (methodDecl.prefix.metaVisibility as PMetaVariable).name + switch visibilityBindings.get(metaVarName) { + case PUBLIC: method.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: method.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: method.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + default: {} + } + } else { + switch methodDecl.prefix.visibility { + case PUBLIC: method.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: method.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: method.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + default: {} + } } //adding method return type @@ -172,14 +189,13 @@ class ASTBuilder { method.returnType2 = Utils.getTypeFromId(typeReferenceQueue.remove, ast) } else { val name = (methodDecl.prefix.metaType as PMetaVariable).name - method.returnType2 = Utils.getTypeFromId(typeBindings.get(name).typeName, ast) + method.returnType2 = ASTNode.copySubtree(ast, typeBindings.get(name)) as Type } //adding method parameters if (methodDecl.arguments.size > 0) { for(argument : methodDecl.arguments) { val typeName = typeReferenceQueue.remove - val methodParameterDeclaration = ast.newSingleVariableDeclaration methodParameterDeclaration.type = Utils.getTypeFromId(typeName, ast) methodParameterDeclaration.name.identifier = argument.name @@ -187,12 +203,7 @@ class ASTBuilder { } } else if (methodDecl.metaArguments !== null) { val parameterList = parameterBindings.get((methodDecl.metaArguments as PMetaVariable).name) - for (parameter : parameterList) { - val methodParameterDeclaration = ast.newSingleVariableDeclaration - methodParameterDeclaration.type = Utils.getTypeFromId(parameter.key.toString, ast) - methodParameterDeclaration.name.identifier = parameter.value - method.parameters.add(methodParameterDeclaration) - } + method.parameters.addAll(ASTNode.copySubtrees(ast, parameterList)) } //adding method body @@ -201,22 +212,53 @@ class ASTBuilder { var List methodBodyList = newArrayList for(element : methodBody) { if(element instanceof PMetaVariable) { - val binding = bindings.get( (element as PMetaVariable).name ) + val binding = bindings.get((element as PMetaVariable).name) val copies = binding.map[ASTNode.copySubtree(ast, it)] methodBodyList.addAll(copies) } else if (element instanceof PTargetExpression) { - val binding = bindings.get( "target" ) + val binding = bindings.get("target") val copies = binding.map[ASTNode.copySubtree(ast, it)] methodBodyList.addAll(copies) + } else if (element instanceof PVariableDeclaration) { + methodBodyList.add(element.doBuildVariableDeclarationStatement) } else { methodBodyList.add(element.doBuild) } } - block.statements.addAll(methodBodyList) - method.body = block - return method + + if (methodBodyList.size == 1 && methodBodyList.head instanceof Block) { + method.body = (methodBodyList.head as Block) + } else { + block.statements.addAll(methodBodyList) + method.body = block + } + method + } + + //variable declaration builder + def private doBuildVariableDeclarationStatement(PVariableDeclaration varDecl) { + val fragment = ast.newVariableDeclarationFragment + + //adding variable name + if(varDecl.metaName !== null) { + fragment.name.identifier = nameBindings.get((varDecl.metaName as PMetaVariable).name) + } else { + fragment.name.identifier = varDecl.name + } + + val newVar = ast.newVariableDeclarationStatement(fragment) + + //adding variable type + if(varDecl.type !== null) { + newVar.type = Utils.getTypeFromId(typeReferenceQueue.remove, ast) + } else { + val name = (varDecl.metaType as PMetaVariable).name + newVar.type = ASTNode.copySubtree(ast, typeBindings.get(name) as ASTNode) as Type + } + newVar } + //field declaration builder def private dispatch doBuild(PVariableDeclaration varDecl) { val fragment = ast.newVariableDeclarationFragment @@ -230,13 +272,22 @@ class ASTBuilder { val newVar = ast.newFieldDeclaration(fragment) - //adding variable visibility - switch varDecl.visibility { - case PUBLIC: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) - case PRIVATE: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) - case PROTECTED: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) - default: {} + if (varDecl.metaVisibility !== null) { + val metaVarName = (varDecl.metaVisibility as PMetaVariable).name + switch visibilityBindings.get(metaVarName) { + case PUBLIC: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + default: {} + } + } else { + switch varDecl.visibility { + case PUBLIC: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + default: {} + } } //adding variable type @@ -244,10 +295,10 @@ class ASTBuilder { newVar.type = Utils.getTypeFromId(typeReferenceQueue.remove, ast) } else { val name = (varDecl.metaType as PMetaVariable).name - newVar.type = Utils.getTypeFromId(typeBindings.get(name).typeName, ast) + newVar.type = ASTNode.copySubtree(ast, typeBindings.get(name)) as Type + //newVar.type = Utils.getTypeFromId(typeBindings.get(name).resolveBinding.qualifiedName, ast) } - - return newVar + newVar } //method invocation (with expression) builder @@ -262,11 +313,12 @@ class ASTBuilder { methodInv.name.identifier = nameBindings.get(name) } - //adding method invocation parameters + //adding method invocation arguments if(featureCall.memberCallArguments !== null) { - val parameterList = parameterBindings.get((featureCall.memberCallArguments as PMetaVariable).name) - for (parameter : parameterList) { - methodInv.arguments.add(ast.newSimpleName(parameter.value)) + val argumentList = argumentBindings.get((featureCall.memberCallArguments as PMetaVariable).name) + for (argument : argumentList) { + val expression = ASTNode.copySubtree(ast, argument) + methodInv.arguments.add(expression) } } @@ -275,7 +327,7 @@ class ASTBuilder { methodInv.expression = buildInvocationExpression as Expression val statement = ast.newExpressionStatement(methodInv) - return statement + statement } //method invocation (without expression) builder @@ -285,22 +337,25 @@ class ASTBuilder { //adding method invocation name methodInv.name.identifier = featureCall.feature - //adding method parameters - //TODO - + //adding method arguments + if(featureCall.featureCallArguments !== null) { + val argumentList = argumentBindings.get((featureCall.featureCallArguments as PMetaVariable).name) + for (argument : argumentList) { + val expression = ASTNode.copySubtree(ast, argument) + methodInv.arguments.add(expression) + } + } val statement = ast.newExpressionStatement(methodInv) - return statement + statement } //block builder def private dispatch doBuild(PBlockExpression blockPattern) { val block = ast.newBlock - val builtStatements = blockPattern.expressions.doBuildPatterns block.statements.addAll(builtStatements) - - return block + block } def private List doBuildPatterns(List patterns) { diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend index aa64043..dca7c9f 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend @@ -9,7 +9,7 @@ import hu.elte.refjava.lang.refJava.PMethodDeclaration import hu.elte.refjava.lang.refJava.PTargetExpression import hu.elte.refjava.lang.refJava.PVariableDeclaration import hu.elte.refjava.lang.refJava.Pattern -import java.lang.reflect.Type +import hu.elte.refjava.lang.refJava.Visibility import java.util.ArrayList import java.util.List import java.util.Map @@ -23,9 +23,12 @@ import org.eclipse.jdt.core.dom.MethodDeclaration import org.eclipse.jdt.core.dom.MethodInvocation import org.eclipse.jdt.core.dom.Modifier import org.eclipse.jdt.core.dom.SingleVariableDeclaration +import org.eclipse.jdt.core.dom.Type import org.eclipse.jdt.core.dom.VariableDeclarationFragment import org.eclipse.jdt.core.dom.VariableDeclarationStatement import org.eclipse.xtext.EcoreUtil2 +import org.eclipse.jdt.core.dom.Expression +import hu.elte.refjava.lang.refJava.PFeatureCall class PatternMatcher { @@ -34,7 +37,9 @@ class PatternMatcher { Map> bindings = newHashMap Map nameBindings Map typeBindings - Map>> parameterBindings + Map> parameterBindings + Map visibilityBindings + Map> argumentBindings Queue typeReferenceQueue new(Pattern pattern) { @@ -49,8 +54,14 @@ class PatternMatcher { modifiedTarget } - def match(Pattern targetPattern, List target, String typeRefString) { + def match(Pattern targetPattern, List target, Map nameBindings, Map typeBindings, Map> parameterBindings, Map visibilityBindings, Map> argumentBindings, String typeRefString) { bindings.clear + this.nameBindings = nameBindings + this.typeBindings = typeBindings + this.parameterBindings = parameterBindings + this.visibilityBindings = visibilityBindings + this.argumentBindings = argumentBindings + if (typeRefString !== null) { val tmp = typeRefString.split("\\|") this.typeReferenceQueue = newLinkedList @@ -60,10 +71,12 @@ class PatternMatcher { } //this function gets called during the matching - def match(List target, Map nameBindings, Map typeBindings, Map>> parameterBindings, String typeRefString) { + def match(List target, Map nameBindings, Map typeBindings, Map> parameterBindings, Map visibilityBindings, Map> argumentBindings, String typeRefString) { this.nameBindings = nameBindings this.typeBindings = typeBindings this.parameterBindings = parameterBindings + this.visibilityBindings = visibilityBindings + this.argumentBindings = argumentBindings if (typeRefString !== null) { val tmp = typeRefString.split("\\|") @@ -93,8 +106,10 @@ class PatternMatcher { } def private dispatch doMatch(PMetaVariable multiMetavar, List nodes) { - bindings.put(multiMetavar.name, nodes) - true + if(multiMetavar.multi) { + bindings.put(multiMetavar.name, nodes) + true + } } def private dispatch boolean doMatch(PBlockExpression blockPattern, Block block) { @@ -107,7 +122,14 @@ class PatternMatcher { //matching constructor call name var boolean nameCheck if (constCall.metaName !== null) { - nameCheck = nameBindings.get((constCall.metaName as PMetaVariable).name) == classInstance.type.toString + val name = nameBindings.get((constCall.metaName as PMetaVariable).name) + if (name === null) { + val className = classInstance.type.toString + nameBindings.put((constCall.metaName as PMetaVariable).name, className) + nameCheck = true + } else { + nameCheck = name == classInstance.type.toString + } } else { nameCheck = constCall.name == classInstance.type.toString } @@ -129,25 +151,60 @@ class PatternMatcher { //matching method name var boolean nameCheck if(pMethodDecl.prefix.metaName !== null) { - nameCheck = nameBindings.get((pMethodDecl.prefix.metaName as PMetaVariable).name) == methodDecl.name.identifier + val name = nameBindings.get((pMethodDecl.prefix.metaName as PMetaVariable).name) + if (name === null) { + val methodName = methodDecl.name.identifier + nameBindings.put((pMethodDecl.prefix.metaName as PMetaVariable).name, methodName) + nameCheck = true + } else { + nameCheck = name == methodDecl.name.identifier + } } else { nameCheck = pMethodDecl.prefix.name == methodDecl.name.identifier } //matching method visibility - var boolean visibilityCheck + var boolean visibilityCheck val modifiers = methodDecl.getModifiers - switch pMethodDecl.prefix.visibility { - case PUBLIC: visibilityCheck = Modifier.isPublic(modifiers) - case PRIVATE: visibilityCheck = Modifier.isPrivate(modifiers) - case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) - default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 + if (pMethodDecl.prefix.metaVisibility !== null) { + val metaVarName = (pMethodDecl.prefix.metaVisibility as PMetaVariable).name + if (visibilityBindings.get(metaVarName) === null) { + switch modifiers { + case Modifier.isPublic(modifiers) : visibilityBindings.put(metaVarName, Visibility.PUBLIC) + case Modifier.isPrivate(modifiers) : visibilityBindings.put(metaVarName, Visibility.PRIVATE) + case Modifier.isProtected(modifiers) : visibilityBindings.put(metaVarName, Visibility.PROTECTED) + default : visibilityBindings.put(metaVarName, Visibility.PACKAGE) + } + visibilityCheck = true + } else { + switch visibilityBindings.get(metaVarName) { + case PUBLIC: visibilityCheck = Modifier.isPublic(modifiers) + case PRIVATE: visibilityCheck = Modifier.isPrivate(modifiers) + case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) + default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 + } + } + } else { + switch pMethodDecl.prefix.visibility { + case PUBLIC: visibilityCheck = Modifier.isPublic(modifiers) + case PRIVATE: visibilityCheck = Modifier.isPrivate(modifiers) + case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) + default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 + } } + //matching method return value var boolean returnCheck if(pMethodDecl.prefix.metaType !== null) { - returnCheck = typeBindings.get((pMethodDecl.prefix.metaType as PMetaVariable).name).typeName == methodDecl.returnType2.resolveBinding.qualifiedName + val type = typeBindings.get((pMethodDecl.prefix.metaType as PMetaVariable).name) + if (type === null) { + val returnType = methodDecl.returnType2 + typeBindings.put((pMethodDecl.prefix.metaType as PMetaVariable).name, returnType) + returnCheck = true + } else { + returnCheck = type.resolveBinding.qualifiedName == methodDecl.returnType2.resolveBinding.qualifiedName + } } else { returnCheck = methodDecl.returnType2.resolveBinding.qualifiedName == typeReferenceQueue.remove } @@ -160,18 +217,33 @@ class PatternMatcher { } else { val argIt = pMethodDecl.arguments.iterator val paramIt = (methodDecl.parameters as List).iterator - while(argIt.hasNext && parameterCheck) { val arg = argIt.next val param = paramIt.next parameterCheck = param.name.identifier == arg.name && param.type.resolveBinding.qualifiedName == typeReferenceQueue.remove } - } } else if (pMethodDecl.metaArguments !== null) { - //TODO - parameterBindings.get("ASD") - parameterCheck = true + val metaVar = pMethodDecl.metaArguments as PMetaVariable + val parameters = parameterBindings.get((pMethodDecl.metaArguments as PMetaVariable).name) + if (parameters === null) { + parameterBindings.put(metaVar.name, methodDecl.parameters) + parameterCheck = true + } else { + if (parameters.size != methodDecl.parameters.size) { + parameterCheck = false + } else { + val it1 = parameters.iterator + val it2 = (methodDecl.parameters as List).iterator + while(it1.hasNext && parameterCheck) { + val param1 = it1.next + val param2 = it2.next + parameterCheck = param1.name.identifier == param2.name.identifier && param1.type.resolveBinding.qualifiedName == param2.type.resolveBinding.qualifiedName + } + } + } + } else { + parameterCheck = methodDecl.parameters.size == 0 } //matching method body @@ -180,7 +252,7 @@ class PatternMatcher { return nameCheck && visibilityCheck && parameterCheck && returnCheck && bodyCheck } - //method invocation matching + //method invocation matching (with expression) def private dispatch boolean doMatch(PMemberFeatureCall featureCall, ExpressionStatement expStatement) { if (expStatement.expression instanceof MethodInvocation) { val methodInv = expStatement.expression as MethodInvocation @@ -190,35 +262,112 @@ class PatternMatcher { if (featureCall.feature !== null) { nameCheck = featureCall.feature == methodInv.name.identifier } else { - nameCheck = nameBindings.get((featureCall.metaFeature as PMetaVariable).name) == methodInv.name.identifier + val name = nameBindings.get((featureCall.metaFeature as PMetaVariable).name) + if (name === null) { + val methodName = methodInv.name.identifier + nameBindings.put((featureCall.metaFeature as PMetaVariable).name, methodName) + nameCheck = true + } else { + nameCheck = name == methodInv.name.identifier + } } //matching method invocation parameters - var boolean parameterCheck + var boolean argumentCheck = true if(featureCall.memberCallArguments !== null) { //TODO - parameterCheck = true + + + val metaVarName = (featureCall.memberCallArguments as PMetaVariable).name + if (argumentBindings.get(metaVarName) === null) { + argumentBindings.put(metaVarName, methodInv.arguments) + argumentCheck = true + } else { + val arguments = argumentBindings.get(metaVarName) + if(methodInv.arguments.size != arguments.size) { + argumentCheck = false + } else { + //TODO + argumentCheck = true + } + } } else { - //TODO - parameterCheck = true + argumentCheck = methodInv.arguments.size == 0 } //matching method invocation expression val boolean expressionCheck = doMatch(featureCall.memberCallTarget, methodInv.expression) - return nameCheck && parameterCheck && expressionCheck + return nameCheck && argumentCheck && expressionCheck } else { return false } } + + //method invocation matching (without expression) + def private dispatch boolean doMatch(PFeatureCall featureCall, ExpressionStatement expStatement) { + if (expStatement.expression instanceof MethodInvocation) { + val methodInv = expStatement.expression as MethodInvocation + + //matching method invocation name + var boolean nameCheck + if (featureCall.feature !== null) { + nameCheck = featureCall.feature == methodInv.name.identifier + } else { + val name = nameBindings.get((featureCall.metaFeature as PMetaVariable).name) + if (name === null) { + val methodName = methodInv.name.identifier + nameBindings.put((featureCall.metaFeature as PMetaVariable).name, methodName) + nameCheck = true + } else { + nameCheck = name == methodInv.name.identifier + } + } + + //matching method invocation parameters + var boolean argumentCheck = true + if(featureCall.featureCallArguments !== null) { + //TODO + val metaVarName = (featureCall.featureCallArguments as PMetaVariable).name + if (argumentBindings.get(metaVarName) === null) { + argumentBindings.put(metaVarName, methodInv.arguments) + argumentCheck = true + } else { + val arguments = argumentBindings.get(metaVarName) + if(methodInv.arguments.size != arguments.size) { + argumentCheck = false + } else { + //TODO + argumentCheck = true + } + } + } else { + argumentCheck = methodInv.arguments.size == 0 + } + + return nameCheck && argumentCheck + } else { + return false + } + } + + + //variable declaration matching def private dispatch boolean doMatch(PVariableDeclaration varDecl, VariableDeclarationStatement varDeclStatement) { //matching variable declaration name var boolean nameCheck if (varDecl.metaName !== null) { - nameCheck = nameBindings.get((varDecl.metaName as PMetaVariable).name) == (varDeclStatement.fragments.head as VariableDeclarationFragment).name.identifier + val name = nameBindings.get((varDecl.metaName as PMetaVariable).name) + if(name === null) { + val varName = (varDeclStatement.fragments.head as VariableDeclarationFragment).name.identifier + nameBindings.put((varDecl.metaName as PMetaVariable).name, varName) + nameCheck = true + } else { + nameCheck = name == (varDeclStatement.fragments.head as VariableDeclarationFragment).name.identifier + } } else { nameCheck = varDecl.name == (varDeclStatement.fragments.head as VariableDeclarationFragment).name.identifier } @@ -228,18 +377,33 @@ class PatternMatcher { if(varDecl.type !== null) { typeCheck = varDeclStatement.type.resolveBinding.qualifiedName == typeReferenceQueue.remove } else { - typeCheck = varDeclStatement.type.resolveBinding.qualifiedName == typeBindings.get((varDecl.metaType as PMetaVariable).name).typeName + val type = typeBindings.get((varDecl.metaType as PMetaVariable).name) + if (type === null) { + val varType = varDeclStatement.type + typeBindings.put((varDecl.metaType as PMetaVariable).name, varType) + typeCheck = true + } else { + typeCheck = type.resolveBinding.qualifiedName == varDeclStatement.type.resolveBinding.qualifiedName + } } return nameCheck && typeCheck } + //field declaration matching def private dispatch boolean doMatch(PVariableDeclaration varDecl, FieldDeclaration fieldDecl) { //matching field declaration name var boolean nameCheck if (varDecl.metaName !== null) { - nameCheck = nameBindings.get((varDecl.metaName as PMetaVariable).name) == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier + val name = nameBindings.get((varDecl.metaName as PMetaVariable).name) + if (name === null) { + val fieldName = (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier + nameBindings.put((varDecl.metaName as PMetaVariable).name, fieldName) + nameCheck = true + } else { + nameCheck = name == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier + } } else { nameCheck = varDecl.name == (fieldDecl.fragments.head as VariableDeclarationFragment).name.identifier } @@ -247,11 +411,31 @@ class PatternMatcher { //matching field declaration visibility var boolean visibilityCheck val modifiers = fieldDecl.getModifiers - switch varDecl.visibility { - case PUBLIC: visibilityCheck = Modifier.isPublic(modifiers) - case PRIVATE: visibilityCheck = Modifier.isPrivate(modifiers) - case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) - default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 + if (varDecl.metaVisibility !== null) { + val metaVarName = (varDecl.metaVisibility as PMetaVariable).name + if (visibilityBindings.get(metaVarName) === null) { + switch modifiers { + case Modifier.isPublic(modifiers) : visibilityBindings.put(metaVarName, Visibility.PUBLIC) + case Modifier.isPrivate(modifiers) : visibilityBindings.put(metaVarName, Visibility.PRIVATE) + case Modifier.isProtected(modifiers) : visibilityBindings.put(metaVarName, Visibility.PROTECTED) + default : visibilityBindings.put(metaVarName, Visibility.PACKAGE) + } + visibilityCheck = true + } else { + switch visibilityBindings.get(metaVarName) { + case PUBLIC: visibilityCheck = Modifier.isPublic(modifiers) + case PRIVATE: visibilityCheck = Modifier.isPrivate(modifiers) + case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) + default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 + } + } + } else { + switch varDecl.visibility { + case PUBLIC: visibilityCheck = Modifier.isPublic(modifiers) + case PRIVATE: visibilityCheck = Modifier.isPrivate(modifiers) + case PROTECTED: visibilityCheck = Modifier.isProtected(modifiers) + default: visibilityCheck = modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 + } } //matching field declaration type @@ -259,7 +443,14 @@ class PatternMatcher { if(varDecl.type !== null) { typeCheck = fieldDecl.type.resolveBinding.qualifiedName == typeReferenceQueue.remove } else { - typeCheck = fieldDecl.type.resolveBinding.qualifiedName == typeBindings.get((varDecl.metaType as PMetaVariable).name).typeName + val type = typeBindings.get((varDecl.metaType as PMetaVariable).name) + if (type === null) { + val fieldType = fieldDecl.type + typeBindings.put((varDecl.metaType as PMetaVariable).name, fieldType) + typeCheck = true + } else { + typeCheck = type.resolveBinding.qualifiedName == fieldDecl.type.resolveBinding.qualifiedName + } } return nameCheck && visibilityCheck && typeCheck @@ -274,6 +465,7 @@ class PatternMatcher { /////////////////////// def private doMatchChildren(List patterns, List nodes) { if (patterns.size == 1 && patterns.head instanceof PMetaVariable && (patterns.head as PMetaVariable).multi) { + bindings.put("target", nodes) bindings.put((patterns.head as PMetaVariable).name , nodes) return true } @@ -323,11 +515,11 @@ class PatternMatcher { var List preSelectedNodes = (targetEnvironment as List).clone.takeWhile[ it != selectedNodes.head ].toList var List postSelectedNodes = (targetEnvironment as List).clone.reverse.takeWhile[ it != selectedNodes.last ].toList.reverse - var Boolean pre - var Boolean post - - if (!preTargetExpression.exists[ it instanceof PMetaVariable && (it as PMetaVariable).isMulti] ) { - val preSelectedNodesToMatch = preSelectedNodes.clone.take(preTargetExpression.size).toList + var boolean pre + var boolean post + + if (!preTargetExpression.exists[ it instanceof PMetaVariable && (it as PMetaVariable).isMulti] ) { + val preSelectedNodesToMatch = preSelectedNodes.clone.reverse.take(preTargetExpression.size).toList.reverse pre = doMatchChildren(preTargetExpression, preSelectedNodesToMatch) modifiedTarget.addAll(0, preSelectedNodesToMatch) } else { @@ -335,7 +527,7 @@ class PatternMatcher { modifiedTarget.addAll(0, preSelectedNodes) } - if (!postTargetExpression.exists[ it instanceof PMetaVariable && (it as PMetaVariable).isMulti] ) { + if (!postTargetExpression.exists[ it instanceof PMetaVariable && (it as PMetaVariable).isMulti] ) { val postSelectedNodesToMatch = postSelectedNodes.clone.take(postTargetExpression.size).toList post = doMatchChildren(postTargetExpression, postSelectedNodesToMatch) modifiedTarget.addAll(postSelectedNodesToMatch) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend index 587687a..b7cd406 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternParser.xtend @@ -13,7 +13,7 @@ class PatternParser { @Inject static XtextResourceSet resourceSet static Resource resource static boolean initialized = false - + def static parse(String patternString) { if (!initialized) { resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE) @@ -24,15 +24,13 @@ class PatternParser { if (resource.loaded) { resource.unload } - + val paddedPatternString = '''package p; local refactoring l() «patternString» ~ nothing''' val inputStream = new ByteArrayInputStream(paddedPatternString.bytes) - resource.load(inputStream, resourceSet.loadOptions) - + resource.load(inputStream, resourceSet.loadOptions) val file = resource.contents.head as File val refact = file.refactorings.head as SchemeInstanceRule return refact.matchingPattern - } + } } - diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend index 1388e00..a27fa4a 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend @@ -11,6 +11,11 @@ import org.eclipse.jdt.core.dom.TypeDeclaration import org.eclipse.jdt.core.dom.VariableDeclarationStatement import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.common.types.JvmTypeReference +import org.eclipse.jdt.core.dom.ASTParser +import org.eclipse.jdt.core.ICompilationUnit +import org.eclipse.jface.text.IDocument +import org.eclipse.jdt.core.dom.Assignment +import org.eclipse.jdt.core.dom.Block class Utils { @@ -49,8 +54,6 @@ class Utils { } } - - def static getTypeReferenceString(Pattern pattern) { var String typeReferenceString = "" val types = EcoreUtil2.getAllContentsOfType(pattern, JvmTypeReference) @@ -76,6 +79,10 @@ class Utils { tmp as CompilationUnit } + def static getICompilationUnit(ASTNode node) { + node.compilationUnit.getJavaElement as ICompilationUnit + } + def static getMethodDeclaration(ASTNode node) { var tmp = node while (!(tmp instanceof MethodDeclaration) && tmp !== null) { @@ -84,6 +91,14 @@ class Utils { tmp as MethodDeclaration } + def static getBlock(ASTNode node) { + var tmp = node + while (!(tmp instanceof Block) && tmp !== null) { + tmp = tmp.parent + } + tmp as Block + } + def static getFieldDeclaration(ASTNode node) { var tmp = node while (!(tmp instanceof FieldDeclaration) && tmp !== null) { @@ -100,5 +115,25 @@ class Utils { tmp as VariableDeclarationStatement } + def static getAssignment(ASTNode node) { + var tmp = node + while (!(tmp instanceof Assignment) && tmp !== null) { + tmp = tmp.parent + } + tmp as Assignment + } + + def static parseSourceCode(ICompilationUnit iCompUnit) { + val parser = ASTParser.newParser(AST.JLS12); + parser.resolveBindings = true + parser.source = iCompUnit + parser.createAST(null) as CompilationUnit + } + + def static applyChanges(CompilationUnit compUnit, IDocument document) { + compUnit.rewrite(document, null).apply(document) + } + + } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/GenerateRefJava.mwe2 b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/GenerateRefJava.mwe2 index d3decd5..8213c61 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/GenerateRefJava.mwe2 +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/GenerateRefJava.mwe2 @@ -11,10 +11,18 @@ Workflow { project = StandardProjectConfig { baseName = "hu.elte.refjava.lang" rootPath = rootPath - + + runtimeTest = { + enabled = true + } + eclipsePlugin = { enabled = true } + + eclipsePluginTest = { + enabled = true + } createEclipseMetaData = true } @@ -36,6 +44,10 @@ Workflow { validator = { generateDeprecationValidation = true } + + junitSupport = { + junitVersion = "5" + } } } } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext index d1bb110..d9a9655 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext @@ -68,14 +68,13 @@ CompositeRefactoringRule: // Patterns // ////////////// -PMetaVariable returns PExpression: - {PMetaVariable} type=MetaVariableType name=ID multi?='..'? -; - enum MetaVariableType : - SIMPLE='#' | NAME='name#' | TYPE='type#' | PARAMETER='parameter#' + SIMPLE='#' | NAME='name#' | TYPE='type#' | PARAMETER='parameter#' | VISIBILITY="visibility#" | ARGUMENT="argument#" ; +PMetaVariable returns PExpression: + {PMetaVariable} type=MetaVariableType name=ID multi?='..'? +; Pattern: patterns+=PExpressionOrVarDeclaration =>(';' patterns+=PExpressionOrVarDeclaration)* ';'? @@ -116,7 +115,8 @@ PMemberFeatureCall returns PExpression: PPrimaryExpression ( =>({PMemberFeatureCall.memberCallTarget=current} ".") (feature=IdOrSuper | metaFeature=PMetaVariable) ( - =>'(' memberCallArguments=PMetaVariable? ')' + //=>'(' (memberCallArguments+=PMetaVariable (',' memberCallArguments+=PMetaVariable)*)? ')' //currently restricted to PMetaVariable, should be PExpression + =>'(' memberCallArguments=PMetaVariable? ')' )? )* ; @@ -134,7 +134,8 @@ PPrimaryExpression returns PExpression PConstructorCall returns PExpression: {PConstructorCall} 'new' (name=ValidID | metaName=PMetaVariable) //constructor=[types::JvmConstructor|QualifiedName] - =>'(' (arguments+=PExpression (',' arguments+=PExpression)*)? ')' ( + //=>'(' (arguments+=PMetaVariable (',' arguments+=PMetaVariable)*)? ')' ( //currently restricted to PMetaVariable, should be PExpression + =>'(' arguments=PMetaVariable? ')' ( anonInstance?='{' (elements+=PDeclaration =>(';' elements+=PDeclaration)* ';'?)? '}' // =>: local, distinguishes semicolons )? @@ -150,11 +151,13 @@ PBlockExpression returns PExpression: PFeatureCall returns PExpression: {PFeatureCall} ( feature=IdOrSuper ( - =>'(' (featureCallArguments+=PExpression (',' featureCallArguments+=PExpression)*)? ')' + //=>'(' (featureCallArguments+=PExpression (',' featureCallArguments+=PExpression)*)? ')' //currently restricted to PMetaVariable, should be PExpression + =>'(' featureCallArguments=PMetaVariable? ')' )? ) | ( metaFeature=PMetaVariable - =>'(' (featureCallArguments+=PExpression (',' featureCallArguments+=PExpression)*)? ')' + //=>'(' (featureCallArguments+=PExpression (',' featureCallArguments+=PExpression)*)? ')' //currently restricted to PMetaVariable, should be PExpression + =>'(' featureCallArguments=PMetaVariable? ')' ) ; @@ -194,25 +197,10 @@ XPrimaryExpression returns xbase::XExpression | XParenthesizedExpression | MetaVariable | TargetExpression - | TypeMetaVariable - | NameMetaVariable - | ParameterMetaVariable ; MetaVariable returns xbase::XExpression: - {MetaVariable} '#' name=ID multi?='..'? -; - -TypeMetaVariable returns xbase::XExpression: - {TypeMetaVariable} 'type#' name=ID -; - -NameMetaVariable returns xbase::XExpression: - {NameMetaVariable} 'name#' name=ID -; - -ParameterMetaVariable returns xbase::XExpression: - {ParameterMetaVariable} 'parameter#' name=ID multi?='..'? + {MetaVariable} type=MetaVariableType name=ID multi?='..'? ; TargetExpression returns xbase::XExpression: diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend index 875eb86..c51265d 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend @@ -1,10 +1,8 @@ package hu.elte.refjava.lang.compiler import hu.elte.refjava.lang.refJava.MetaVariable -import hu.elte.refjava.lang.refJava.NameMetaVariable -import hu.elte.refjava.lang.refJava.ParameterMetaVariable +import hu.elte.refjava.lang.refJava.MetaVariableType import hu.elte.refjava.lang.refJava.TargetExpression -import hu.elte.refjava.lang.refJava.TypeMetaVariable import org.eclipse.xtext.xbase.XExpression import org.eclipse.xtext.xbase.compiler.XbaseCompiler import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable @@ -17,12 +15,6 @@ class RefJavaCompiler extends XbaseCompiler { expression.toJavaStatement(builder) TargetExpression: expression.toJavaStatement(builder) - NameMetaVariable: - expression.toJavaStatement(builder) - TypeMetaVariable: - expression.toJavaStatement(builder) - ParameterMetaVariable: - expression.toJavaStatement(builder) default: super.doInternalToJavaStatement(expression, builder, isReferenced) } @@ -32,18 +24,6 @@ class RefJavaCompiler extends XbaseCompiler { // do nothing, a metavariable is strictly an expression } - def void toJavaStatement(NameMetaVariable metaVar, ITreeAppendable it) { - // do nothing, a metavariable is strictly an expression - } - - def void toJavaStatement(TypeMetaVariable metaVar, ITreeAppendable it) { - // do nothing, a metavariable is strictly an expression - } - - def void toJavaStatement(ParameterMetaVariable metaVar, ITreeAppendable it) { - // do nothing, a metavariable is strictly an expression - } - def void toJavaStatement(TargetExpression targetExpr, ITreeAppendable it) { // do nothing, a metavariable is strictly an expression } @@ -54,34 +34,26 @@ class RefJavaCompiler extends XbaseCompiler { expression.toJavaExpression(builder) TargetExpression: expression.toJavaExpression(builder) - NameMetaVariable: - expression.toJavaExpression(builder) - TypeMetaVariable: - expression.toJavaExpression(builder) - ParameterMetaVariable: - expression.toJavaExpression(builder) default: super.internalToConvertedExpression(expression, builder) } } def dispatch void toJavaExpression(MetaVariable metaVar, ITreeAppendable it) { - append('''bindings.get("«metaVar.name»")''') - if (!metaVar.multi) { - append(".get(0)") + if(metaVar.type == MetaVariableType.SIMPLE) { + append('''bindings.get("«metaVar.name»")''') + if (!metaVar.multi) { + append(".get(0)") + } + } else if (metaVar.type == MetaVariableType.NAME) { + append('''nameBindings.get("«metaVar.name»")''') + } else if (metaVar.type == MetaVariableType.TYPE) { + append('''typeBindings.get("«metaVar.name»")''') + } else if (metaVar.type == MetaVariableType.PARAMETER) { + append('''parameterBindings.get("«metaVar.name»")''') + } else if (metaVar.type == MetaVariableType.VISIBILITY) { + append('''visibilityBindings.get("«metaVar.name»")''') } - } - - def dispatch void toJavaExpression(NameMetaVariable metaVar, ITreeAppendable it) { - append('''nameBindings.get("«metaVar.name»")''') - } - - def dispatch void toJavaExpression(TypeMetaVariable metaVar, ITreeAppendable it) { - append('''typeBindings.get("«metaVar.name»")''') - } - - def dispatch void toJavaExpression(ParameterMetaVariable metaVar, ITreeAppendable it) { - append('''parameterBindings.get("«metaVar.name»")''') } def dispatch void toJavaExpression(TargetExpression targetExpr, ITreeAppendable it) { diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend index 1d3279c..03bc4ba 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend @@ -1,58 +1,45 @@ package hu.elte.refjava.lang.typesystem import hu.elte.refjava.lang.refJava.MetaVariable -import hu.elte.refjava.lang.refJava.NameMetaVariable -import hu.elte.refjava.lang.refJava.ParameterMetaVariable +import hu.elte.refjava.lang.refJava.MetaVariableType import hu.elte.refjava.lang.refJava.TargetExpression -import hu.elte.refjava.lang.refJava.TypeMetaVariable -import java.lang.reflect.Type import java.util.List import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.Type import org.eclipse.xtext.xbase.typesystem.computation.ITypeComputationState import org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer import org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference +import org.eclipse.jdt.core.dom.SingleVariableDeclaration class RefJavaTypeComputer extends XbaseTypeComputer { def dispatch computeTypes(MetaVariable metaVar, ITypeComputationState state) { - val astNodeType = getTypeForName(ASTNode, state) - - val type = if (!metaVar.multi) { - astNodeType - } else { + if (metaVar.type == MetaVariableType.SIMPLE) { + val astNodeType = getTypeForName(ASTNode, state) + val type = if (!metaVar.multi) { + astNodeType + } else { + val listType = getTypeForName(List, state) as ParameterizedTypeReference + listType.addTypeArgument(astNodeType) + listType + } + state.acceptActualType(type) + + } else if (metaVar.type == MetaVariableType.NAME) { + val stringType = getTypeForName(String, state) + state.acceptActualType(stringType) + + } else if (metaVar.type == MetaVariableType.TYPE) { + val typeType = getTypeForName(Type, state) + state.acceptActualType(typeType) + + } else if (metaVar.type == MetaVariableType.PARAMETER) { + val parameterType = getTypeForName(SingleVariableDeclaration, state) val listType = getTypeForName(List, state) as ParameterizedTypeReference - listType.addTypeArgument(astNodeType) - listType + listType.addTypeArgument(parameterType) + state.acceptActualType(listType) } - - state.acceptActualType(type) - } - - def dispatch computeTypes(NameMetaVariable metaVar, ITypeComputationState state) { - val stringType = getTypeForName(String, state) - state.acceptActualType(stringType) - } - - def dispatch computeTypes(TypeMetaVariable metaVar, ITypeComputationState state) { - val typeType = getTypeForName(Type, state) - state.acceptActualType(typeType) - } - - def dispatch computeTypes(ParameterMetaVariable metaVar, ITypeComputationState state) { - val pairType = getTypeForName(Pair, state) as ParameterizedTypeReference - val typeType = getTypeForName(Type, state) - val stringType = getTypeForName(String, state) - pairType.addTypeArgument(typeType) - pairType.addTypeArgument(stringType) - val type = if(!metaVar.multi) { - pairType - } else { - val listType = getTypeForName(List, state) as ParameterizedTypeReference - listType.addTypeArgument(pairType) - listType - } - state.acceptActualType(type) } def dispatch computeTypes(TargetExpression targetExpr, ITypeComputationState state) { diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend index 7d7ce56..948bfc7 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend @@ -13,9 +13,17 @@ import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.validation.Check import static hu.elte.refjava.lang.refJava.RefJavaPackage.Literals.* +import hu.elte.refjava.lang.refJava.SchemeType +import hu.elte.refjava.lang.refJava.PNothingExpression +import hu.elte.refjava.lang.refJava.PFeatureCall +import hu.elte.refjava.lang.refJava.PMethodDeclaration +import hu.elte.refjava.lang.refJava.PVariableDeclaration +import hu.elte.refjava.lang.refJava.PMemberFeatureCall +import hu.elte.refjava.lang.refJava.PConstructorCall +import hu.elte.refjava.lang.refJava.Pattern class RefJavaValidator extends AbstractRefJavaValidator { - +/* @Check def checkMetaVariableUniqueness(SchemeInstanceRule schemeInstanceRule) { val matchingMetaVars = EcoreUtil2.getAllContentsOfType(schemeInstanceRule.matchingPattern, PMetaVariable) @@ -27,6 +35,7 @@ class RefJavaValidator extends AbstractRefJavaValidator { ] } + @Check def checkMetaVariableReferences(SchemeInstanceRule schemeInstanceRule) { val matchingMetaVars = EcoreUtil2.getAllContentsOfType(schemeInstanceRule.matchingPattern, PMetaVariable) @@ -47,6 +56,7 @@ class RefJavaValidator extends AbstractRefJavaValidator { metaVarChecker.apply(it, name, multi, META_VARIABLE__NAME, META_VARIABLE__MULTI) ] } + */ @Check def multiMetavariableCountValidation(SchemeInstanceRule schemeInstanceRule) { @@ -81,5 +91,55 @@ metavariable with multiplicity before, and after the target expression.", it, Re blocks.forEach[multiMetavarCountChecker( (it as PBlockExpression).expressions )] } + + @Check + def patternLimitationsChecker(SchemeInstanceRule schemeInstanceRule) { + + if(schemeInstanceRule.type == SchemeType.CLASS) { + if (!(schemeInstanceRule.replacementPattern.patterns.head instanceof PNothingExpression) + && !(schemeInstanceRule.replacementPattern.patterns.head instanceof PFeatureCall) + || schemeInstanceRule.replacementPattern.patterns.size > 1) { + error("A class refactoring's replacement pattern can only be either a single PNothingExpression or a single PFeatureCall.", + schemeInstanceRule.replacementPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + + } else if (schemeInstanceRule.replacementPattern.patterns.head instanceof PNothingExpression + && !(schemeInstanceRule.matchingPattern.patterns.head instanceof PMethodDeclaration) + && !(schemeInstanceRule.matchingPattern.patterns.head instanceof PVariableDeclaration) + || schemeInstanceRule.matchingPattern.patterns.size > 1) { + error("The matching pattern can only be either a single PMethodDeclaration or a single PVariableDeclaration, if the replacement pattern is a PNothingExpression.", + schemeInstanceRule.matchingPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + } + } else if (schemeInstanceRule.type == SchemeType.LAMBDA) { + + if (!isValidLambdaExpression(schemeInstanceRule.replacementPattern.patterns.head) || schemeInstanceRule.replacementPattern.patterns.size > 1) { + error("A lambda refactoring's replacement pattern can only be a single valid lambda expression. + +Example: new F() { public void apply() { } }.apply()", schemeInstanceRule.replacementPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + + } else if (!((schemeInstanceRule.replacementPattern.patterns.head as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.exists[ + it instanceof PMethodDeclaration && ((it as PMethodDeclaration).prefix.name == (schemeInstanceRule.replacementPattern.patterns.head as PMemberFeatureCall).feature + && ((it as PMethodDeclaration).prefix.metaName as PMetaVariable).name == ((schemeInstanceRule.replacementPattern.patterns.head as PMemberFeatureCall).metaFeature as PMetaVariable).name)]) { + + error("The feature call's name can only be an existing method inside the lambda expression.", schemeInstanceRule.replacementPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + + } else if (isValidLambdaExpression(schemeInstanceRule.matchingPattern.patterns.head) && !((schemeInstanceRule.matchingPattern.patterns.head as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.exists[ + it instanceof PMethodDeclaration && ((it as PMethodDeclaration).prefix.name == (schemeInstanceRule.matchingPattern.patterns.head as PMemberFeatureCall).feature + && ((it as PMethodDeclaration).prefix.metaName as PMetaVariable).name == ((schemeInstanceRule.matchingPattern.patterns.head as PMemberFeatureCall).metaFeature as PMetaVariable).name)]) { + + error("The feature call's name can only be an existing method inside the lambda expression.", schemeInstanceRule.matchingPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + + } else if (isValidLambdaExpression(schemeInstanceRule.matchingPattern.patterns.head) && schemeInstanceRule.matchingPattern.patterns.size > 1) { + error("The matching pattern's length can only be single, if the matching pattern is meant to be a lambda expression.", schemeInstanceRule.matchingPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + } + } + } + + def private isValidLambdaExpression (PExpression expression) { + (expression instanceof PMemberFeatureCall) + && ((expression as PMemberFeatureCall).memberCallTarget instanceof PConstructorCall) + && (((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).anonInstance) + && ((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.exists[it instanceof PMethodDeclaration] + && ((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.forall[it instanceof PMethodDeclaration || it instanceof PVariableDeclaration] + } } From 513fe58ef193f5b663ec0e5a7d0562aa1ed5f194 Mon Sep 17 00:00:00 2001 From: Tamas Dancs Date: Thu, 18 Jun 2020 16:15:20 +0200 Subject: [PATCH 09/14] Final commit --- hu.elte.refjava.control/.classpath | 4 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- hu.elte.refjava.control/META-INF/MANIFEST.MF | 2 +- hu.elte.refjava.examples/.classpath | 6 +- .../.settings/org.eclipse.jdt.core.prefs | 10 + .../src/hu/elte/refjava/examples/Target.java | 44 +- .../refjava/examples/refactorings.refjava | 97 +- hu.elte.refjava.lang.ide/.classpath | 4 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF | 2 +- hu.elte.refjava.lang.tests/.classpath | 13 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- .../META-INF/MANIFEST.MF | 7 +- .../lang/tests/.ASTBuilderTests.java._trace | Bin 12630 -> 0 bytes .../lang/tests/.ASTBuilderTests.xtendbin | Bin 6476 -> 0 bytes .../tests/.PatternMatcherTests.java._trace | Bin 5294 -> 0 bytes .../lang/tests/.PatternMatcherTests.xtendbin | Bin 4973 -> 0 bytes .../tests/.RefJavaParsingTest.java._trace | Bin 1041 -> 143 bytes .../lang/tests/.RefJavaParsingTest.xtendbin | Bin 3400 -> 2085 bytes .../refjava/lang/tests/.TestUtils.java._trace | Bin 775 -> 0 bytes .../refjava/lang/tests/.TestUtils.xtendbin | Bin 2595 -> 0 bytes .../lang/tests/ASTBuilderTests$1.class | Bin 1706 -> 0 bytes .../lang/tests/ASTBuilderTests$2.class | Bin 1777 -> 0 bytes .../refjava/lang/tests/ASTBuilderTests.class | Bin 6685 -> 0 bytes .../lang/tests/PatternMatcherTests.class | Bin 3808 -> 0 bytes .../tests/RefJavaInjectorProvider$1.class | Bin 1021 -> 1002 bytes .../tests/RefJavaInjectorProvider$2.class | Bin 905 -> 886 bytes .../lang/tests/RefJavaInjectorProvider.class | Bin 1991 -> 1965 bytes .../lang/tests/RefJavaParsingTest.class | Bin 2930 -> 776 bytes .../elte/refjava/lang/tests/TestUtils.class | Bin 1309 -> 0 bytes .../tests/api/.ASTBuilderTest.java._trace | Bin 0 -> 12636 bytes .../tests/api/.ASTBuilderTests.java._trace | Bin 0 -> 32418 bytes .../lang/tests/api/.ASTBuilderTests.xtendbin | Bin 0 -> 10085 bytes .../tests/api/.PatternMatcherTest.java._trace | Bin 0 -> 3162 bytes .../api/.PatternMatcherTests.java._trace | Bin 0 -> 20443 bytes .../tests/api/.PatternMatcherTests.xtendbin | Bin 0 -> 7626 bytes .../tests/api/.PatternParserTest.java._trace | Bin 0 -> 99 bytes .../lang/tests/api/.TestUtils.java._trace | Bin 0 -> 5367 bytes .../lang/tests/api/.TestUtils.xtendbin | Bin 0 -> 5741 bytes .../lang/tests/api/ASTBuilderTests.class | Bin 0 -> 16137 bytes .../lang/tests/api/PatternMatcherTests.class | Bin 0 -> 11233 bytes .../refjava/lang/tests/api/TestUtils.class | Bin 0 -> 6404 bytes .../compiler/.RefJavaCompilerTest.java._trace | Bin 0 -> 2010 bytes .../.RefJavaCompilerTests.java._trace | Bin 0 -> 2011 bytes .../compiler/.RefJavaCompilerTests.xtendbin | Bin 0 -> 4323 bytes .../tests/compiler/RefJavaCompilerTests.class | Bin 0 -> 11771 bytes .../parser/.RefJavaParsingTest.java._trace | Bin 0 -> 15750 bytes .../parser/.RefJavaParsingTests.java._trace | Bin 0 -> 15751 bytes .../parser/.RefJavaParsingTests.xtendbin | Bin 0 -> 6203 bytes .../tests/parser/RefJavaParsingTests.class | Bin 0 -> 11461 bytes .../refjava/lang/tests/ASTBuilderTests.xtend | 95 -- .../lang/tests/PatternMatcherTests.xtend | 62 -- .../lang/tests/RefJavaParsingTest.xtend | 16 - .../elte/refjava/lang/tests/TestUtils.xtend | 17 - .../lang/tests/api/ASTBuilderTests.xtend | 182 ++++ .../lang/tests/api/PatternMatcherTests.xtend | 242 +++++ .../refjava/lang/tests/api/TestUtils.xtend | 52 ++ .../tests/compiler/RefJavaCompilerTests.xtend | 297 +++++++ .../tests/parser/RefJavaParsingTests.xtend | 164 ++++ .../lang/tests/.ASTBuilderTests.java._trace | Bin 12630 -> 0 bytes .../lang/tests/.ASTBuilderTests.xtendbin | Bin 6476 -> 0 bytes .../tests/.PatternMatcherTests.java._trace | Bin 5294 -> 0 bytes .../lang/tests/.PatternMatcherTests.xtendbin | Bin 4973 -> 0 bytes .../tests/.RefJavaParsingTest.java._trace | Bin 1041 -> 143 bytes .../lang/tests/.RefJavaParsingTest.xtendbin | Bin 3400 -> 2085 bytes .../refjava/lang/tests/.TestUtils.java._trace | Bin 775 -> 0 bytes .../refjava/lang/tests/.TestUtils.xtendbin | Bin 2595 -> 0 bytes .../refjava/lang/tests/ASTBuilderTests.java | 127 --- .../lang/tests/PatternMatcherTests.java | 72 -- .../lang/tests/RefJavaParsingTest.java | 32 - .../hu/elte/refjava/lang/tests/TestUtils.java | 22 - .../tests/api/.ASTBuilderTest.java._trace | Bin 0 -> 12636 bytes .../tests/api/.ASTBuilderTests.java._trace | Bin 0 -> 32418 bytes .../lang/tests/api/.ASTBuilderTests.xtendbin | Bin 0 -> 10085 bytes .../tests/api/.PatternMatcherTest.java._trace | Bin 0 -> 3162 bytes .../api/.PatternMatcherTests.java._trace | Bin 0 -> 20443 bytes .../tests/api/.PatternMatcherTests.xtendbin | Bin 0 -> 7626 bytes .../tests/api/.PatternParserTest.java._trace | Bin 0 -> 99 bytes .../lang/tests/api/.TestUtils.java._trace | Bin 0 -> 5367 bytes .../lang/tests/api/.TestUtils.xtendbin | Bin 0 -> 5741 bytes .../lang/tests/api/ASTBuilderTests.java | 269 ++++++ .../lang/tests/api/PatternMatcherTests.java | 370 ++++++++ .../refjava/lang/tests/api/TestUtils.java | 73 ++ .../compiler/.RefJavaCompilerTest.java._trace | Bin 0 -> 2010 bytes .../.RefJavaCompilerTests.java._trace | Bin 0 -> 2011 bytes .../compiler/.RefJavaCompilerTests.xtendbin | Bin 0 -> 4323 bytes .../tests/compiler/RefJavaCompilerTests.java | 635 +++++++++++++ .../parser/.RefJavaParsingTest.java._trace | Bin 0 -> 15750 bytes .../parser/.RefJavaParsingTests.java._trace | Bin 0 -> 15751 bytes .../parser/.RefJavaParsingTests.xtendbin | Bin 0 -> 6203 bytes .../tests/parser/RefJavaParsingTests.java | 307 +++++++ hu.elte.refjava.lang.ui.tests/.classpath | 26 - hu.elte.refjava.lang.ui.tests/.project | 34 - .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.jdt.core.prefs | 7 - .../META-INF/MANIFEST.MF | 19 - .../build.properties | 6 - .../ui/tests/RefJavaUiInjectorProvider.java | 17 - .../ui/tests/RefJavaUiInjectorProvider.class | Bin 747 -> 0 bytes hu.elte.refjava.lang.ui/.classpath | 4 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF | 2 +- hu.elte.refjava.lang/.classpath | 6 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- hu.elte.refjava.lang/META-INF/MANIFEST.MF | 5 +- .../elte/refjava/api/BlockRefactoring.xtend | 17 +- .../src/hu/elte/refjava/api/Check.xtend | 831 ++++++++++++------ .../elte/refjava/api/ClassRefactoring.xtend | 11 +- .../elte/refjava/api/LambdaRefactoring.xtend | 33 +- .../elte/refjava/api/LocalRefactoring.xtend | 11 +- .../src/hu/elte/refjava/api/Refactoring.xtend | 2 +- .../refjava/api/patterns/ASTBuilder.xtend | 64 +- .../refjava/api/patterns/PatternMatcher.xtend | 43 +- .../hu/elte/refjava/api/patterns/Utils.xtend | 12 + .../hu/elte/refjava/lang/GenerateRefJava.mwe2 | 4 - .../src/hu/elte/refjava/lang/RefJava.xtext | 28 +- .../lang/compiler/RefJavaCompiler.xtend | 2 +- .../jvmmodel/RefJavaJvmModelInferrer.xtend | 64 +- .../lang/typesystem/RefJavaTypeComputer.xtend | 16 +- .../lang/validation/RefJavaValidator.xtend | 198 +++-- hu.elte.refjava.update/.project | 17 + hu.elte.refjava.update/artifacts.jar | Bin 0 -> 646 bytes hu.elte.refjava.update/content.jar | Bin 0 -> 1949 bytes ...lte.refjava.feature_1.0.0.202005151427.jar | Bin 0 -> 342 bytes ...lte.refjava.control_1.0.0.202005151427.jar | Bin 0 -> 61520 bytes ...te.refjava.lang.ide_1.0.0.202005151427.jar | Bin 0 -> 322129 bytes ...lte.refjava.lang.ui_1.0.0.202005151427.jar | Bin 0 -> 33946 bytes .../hu.elte.refjava_1.0.0.202005151427.jar | Bin 0 -> 847076 bytes hu.elte.refjava.update/site.xml | 7 + 129 files changed, 3600 insertions(+), 1141 deletions(-) create mode 100644 hu.elte.refjava.examples/.settings/org.eclipse.jdt.core.prefs delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$1.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$2.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/PatternMatcherTests.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/TestUtils.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternParserTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/ASTBuilderTests.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/PatternMatcherTests.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/TestUtils.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.class create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.class delete mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/ASTBuilderTests.xtend delete mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/PatternMatcherTests.xtend delete mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/TestUtils.xtend create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/ASTBuilderTests.xtend create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/PatternMatcherTests.xtend create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/TestUtils.xtend create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.xtend create mode 100644 hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.xtend delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/ASTBuilderTests.java delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/PatternMatcherTests.java delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/TestUtils.java create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternParserTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/ASTBuilderTests.java create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/PatternMatcherTests.java create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/TestUtils.java create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.java create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTests.java._trace create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTests.xtendbin create mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.java delete mode 100644 hu.elte.refjava.lang.ui.tests/.classpath delete mode 100644 hu.elte.refjava.lang.ui.tests/.project delete mode 100644 hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.core.resources.prefs delete mode 100644 hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.jdt.core.prefs delete mode 100644 hu.elte.refjava.lang.ui.tests/META-INF/MANIFEST.MF delete mode 100644 hu.elte.refjava.lang.ui.tests/build.properties delete mode 100644 hu.elte.refjava.lang.ui.tests/src-gen/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.java delete mode 100644 hu.elte.refjava.lang.ui.tests/test-bin/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.class create mode 100644 hu.elte.refjava.update/.project create mode 100644 hu.elte.refjava.update/artifacts.jar create mode 100644 hu.elte.refjava.update/content.jar create mode 100644 hu.elte.refjava.update/features/hu.elte.refjava.feature_1.0.0.202005151427.jar create mode 100644 hu.elte.refjava.update/plugins/hu.elte.refjava.control_1.0.0.202005151427.jar create mode 100644 hu.elte.refjava.update/plugins/hu.elte.refjava.lang.ide_1.0.0.202005151427.jar create mode 100644 hu.elte.refjava.update/plugins/hu.elte.refjava.lang.ui_1.0.0.202005151427.jar create mode 100644 hu.elte.refjava.update/plugins/hu.elte.refjava_1.0.0.202005151427.jar create mode 100644 hu.elte.refjava.update/site.xml diff --git a/hu.elte.refjava.control/.classpath b/hu.elte.refjava.control/.classpath index 3906c3b..428337e 100644 --- a/hu.elte.refjava.control/.classpath +++ b/hu.elte.refjava.control/.classpath @@ -1,8 +1,8 @@ + + - - diff --git a/hu.elte.refjava.control/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.control/.settings/org.eclipse.jdt.core.prefs index 34bf367..01b2219 100644 --- a/hu.elte.refjava.control/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.control/.settings/org.eclipse.jdt.core.prefs @@ -1,10 +1,10 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 -org.eclipse.jdt.core.compiler.compliance=12 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=12 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/hu.elte.refjava.control/META-INF/MANIFEST.MF b/hu.elte.refjava.control/META-INF/MANIFEST.MF index 5775429..885f6c4 100644 --- a/hu.elte.refjava.control/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.control/META-INF/MANIFEST.MF @@ -17,7 +17,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.xtext.ui;bundle-version="2.15.0", hu.elte.refjava;bundle-version="1.0.0" Automatic-Module-Name: hu.elte.refjava.control -Bundle-RequiredExecutionEnvironment: JavaSE-12 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: hu.elte.refjava.control.handlers, hu.elte.refjava.control.library, hu.elte.refjava.control.utils, diff --git a/hu.elte.refjava.examples/.classpath b/hu.elte.refjava.examples/.classpath index bfbab76..50ec8bc 100644 --- a/hu.elte.refjava.examples/.classpath +++ b/hu.elte.refjava.examples/.classpath @@ -2,12 +2,12 @@ - + + + - - diff --git a/hu.elte.refjava.examples/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.examples/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..34bf367 --- /dev/null +++ b/hu.elte.refjava.examples/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,10 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 +org.eclipse.jdt.core.compiler.compliance=12 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=12 diff --git a/hu.elte.refjava.examples/src/hu/elte/refjava/examples/Target.java b/hu.elte.refjava.examples/src/hu/elte/refjava/examples/Target.java index 1583101..2ba3684 100644 --- a/hu.elte.refjava.examples/src/hu/elte/refjava/examples/Target.java +++ b/hu.elte.refjava.examples/src/hu/elte/refjava/examples/Target.java @@ -1,32 +1,22 @@ package hu.elte.refjava.examples; -public class Target { - int a; +class A { +} - /* - * Insert a new block after the 3rd statement - * and move the first 3 statements into it. - * Change the 4th 'a' reference to 'this.a' - * and try again the last step. - */ - void f() - { - int x; +class B extends A { + int b; + int a; + + void f() { + int x = 1; int a; - { - System.out.println("asd"); - int k; - } - int b; - + a = x; + g(); + int y = 0; + a = y; } -} - - -/*new F() { -public void apply() { - System.out.println("ASD"); -} -}.apply();*/ - -//interface F { void apply(); } \ No newline at end of file + + void g() { + a = b = 0; + } +} \ No newline at end of file diff --git a/hu.elte.refjava.examples/src/hu/elte/refjava/examples/refactorings.refjava b/hu.elte.refjava.examples/src/hu/elte/refjava/examples/refactorings.refjava index 294a85f..10179d1 100644 --- a/hu.elte.refjava.examples/src/hu/elte/refjava/examples/refactorings.refjava +++ b/hu.elte.refjava.examples/src/hu/elte/refjava/examples/refactorings.refjava @@ -1,56 +1,73 @@ package hu.elte.refjava.examples; -block refactoring identity() - { target } - ~~~~~~~~~~~~ - target ; +local refactoring introduceEmptyBlockAfter() + target + ~~~~~~~ + target ; {} -local refactoring insertEmptyBlockAfter() - #s ; #s2 - ~~~~~~~~~ - #s ; {} +block refactoring moveIntoNextBlock() + target ; { #s1.. } ; #s2.. + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + { target ; #s1.. } ; #s2.. when - isInsideBlock(#s) - + precondition + isSingle(target) + && if(isVariableDeclaration(target)) { !isReferencedIn(asVariableDeclaration(target), #s2..) } + else true -local refactoring test() - #s1 ; #s ; #s2.. - ~~~~~~~~~ - #s1 +block refactoring moveToTop() + #s.. ; target + ~~~~~~~~~~~~~ + target ; #s.. +target + type#T name#N -local refactoring moveIntoNextBlock() - #s1.. ; { #s2.. } ; #s3 ; { #s4.. } ; #s5 - ~~~~~~~~~~~~~~~~~~~~~ - { #s1.. ; #s2.. } ; #s3 ; { #s5 ; #s4.. } -/*when - !isVariableDeclaration(#s1) || - !isReferencedIn(asVariableDeclaration(#s1), - blockRemainder(#s3))*/ +lambda refactoring wrapInVoidLambda() + #s.. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + new name#N() { public void apply() { #s.. } }.apply() +when + precondition + !containsValueReturn(#s..) + && if (containsVoidReturn(#s..)) { isLastExecutionNode(getVoidReturn(#s..)) } + else true -block refactoring blockIdentity() - #s1 ; target ; #s2 - ~~~~~~~~ - #s1 ; target ; #s2 - -block refactoring blocktest() - target ; { #s2.. } ; #s3 - ~~~~~~~~~~~~~~~~~~~~~ - { target ; #s2.. } ; #s3 -/*when - !isVariableDeclaration(target) || - !isReferencedIn(asVariableDeclaration(target), - blockRemainder(#s3)) -*/ -lambda refactoring l() - #s2 +lambda refactoring lambdaModfification() + new name#N1() { public void apply() { #s.. } }.apply() ~~~~~~ - #s2 - + new name#N2() { public void apply() { #s.. } }.apply() +when + assignment + name#N2 = "newLambda2" + precondition + isFresh(name#N2) +class refactoring newMethod() + new name#N() { public void apply(parameter#P..) { #s2.. } }.apply(argument#A..) + ~~~~~~ + newMethod(argument#A..) +definition in class + void newMethod(parameter#P..) { #s2.. } + + +class refactoring liftField() + visibility#V type#T name#N ; + ~~~~~~~ + nothing +definition in super + target + +class refactoring liftMethod() + visibility#V type#T name#N(parameter#P..) { #s.. } + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + nothing +definition in super + target + \ No newline at end of file diff --git a/hu.elte.refjava.lang.ide/.classpath b/hu.elte.refjava.lang.ide/.classpath index fc5b6d4..bc001b4 100644 --- a/hu.elte.refjava.lang.ide/.classpath +++ b/hu.elte.refjava.lang.ide/.classpath @@ -1,9 +1,9 @@ + + - - diff --git a/hu.elte.refjava.lang.ide/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang.ide/.settings/org.eclipse.jdt.core.prefs index f5c72b9..3efb014 100644 --- a/hu.elte.refjava.lang.ide/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.lang.ide/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 -org.eclipse.jdt.core.compiler.compliance=12 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.APILeak=warning org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -107,4 +107,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=12 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF index 0db3626..d0f4884 100644 --- a/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang.ide/META-INF/MANIFEST.MF @@ -14,7 +14,7 @@ Require-Bundle: hu.elte.refjava, org.eclipse.xtext.xbase.lib, org.eclipse.xtend.lib, org.eclipse.xtend.lib.macro -Bundle-RequiredExecutionEnvironment: JavaSE-12 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: hu.elte.refjava.lang.ide, hu.elte.refjava.lang.ide.contentassist.antlr, hu.elte.refjava.lang.ide.contentassist.antlr.internal diff --git a/hu.elte.refjava.lang.tests/.classpath b/hu.elte.refjava.lang.tests/.classpath index 8e1099d..6b3cdb9 100644 --- a/hu.elte.refjava.lang.tests/.classpath +++ b/hu.elte.refjava.lang.tests/.classpath @@ -1,5 +1,7 @@ + + @@ -15,16 +17,5 @@ - - - - - - - - - - - diff --git a/hu.elte.refjava.lang.tests/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang.tests/.settings/org.eclipse.jdt.core.prefs index a3f49f6..e50443c 100644 --- a/hu.elte.refjava.lang.tests/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.lang.tests/.settings/org.eclipse.jdt.core.prefs @@ -1,9 +1,9 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=12 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -12,4 +12,4 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=12 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/hu.elte.refjava.lang.tests/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.tests/META-INF/MANIFEST.MF index d2d1a5c..59ac254 100644 --- a/hu.elte.refjava.lang.tests/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang.tests/META-INF/MANIFEST.MF @@ -24,5 +24,8 @@ Require-Bundle: hu.elte.refjava, org.eclipse.jdt.ui;bundle-version="3.15.0", org.eclipse.core.resources;bundle-version="3.13.100", org.eclipse.xtext.ui;bundle-version="2.15.0" -Bundle-RequiredExecutionEnvironment: JavaSE-12 -Export-Package: hu.elte.refjava.lang.tests;x-internal=true +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Export-Package: hu.elte.refjava.lang.tests;x-internal=true, + hu.elte.refjava.lang.tests.api, + hu.elte.refjava.lang.tests.compiler, + hu.elte.refjava.lang.tests.parser diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace deleted file mode 100644 index 025acd7cc1f2386a692f028c5f45c9be58cff372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12630 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 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin deleted file mode 100644 index 90885dce2bae06b3206307971cc22421620624ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6476 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 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace deleted file mode 100644 index 98e66ef3716d56d80a4b4a2decfe078ae0e82aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5294 zcmZXXdvH|s70377n|pV&A#pbwh#L|hfjl+Y1VRi6=#i%pd8I<4*Ei)?Ev5b%EKnrxrl(tBFe&_tw z-A(!LbH1N*eviA{3oe(-0LYDjNVv3-r2QY?jo|9vc3)_EW_CJs&-5MJC+8+ZGn2dS z49!m8J9}@)nVg-SzGqi@a&~Il^gUmZwVvIx)4R56k=9ISP{a#kTvd_2U@!>UNIu~6 zxghe@6%7qY_h0MxBmJPRu@TiD*VWb{y)3MzCdA*h*VVZyBClOjB#6A@A$rw=8ARR- zHZ|dxqd_D+@?L@&WfPTtntrgUr(g(Z7N#SKgC;l>Q2BAi-%9ird*&9y6B6;a1nvj(xr z2nMmUlpwlgC1ouuF@xxyaAj*3s$uJ!!4>G1vk~1RQmw6^h2tXH(14To7_F_SGeYzs z52FV|h(0z!$2!lgXs)CvDVsM;p;`k#B3mCBG}2<;!u& z<3?K>F3AYdKe!p)7((>4ut`2BY-Bxp+Dqv{FQuPsB098*vQGj`0m?3SQsd!HNwE%b zuDuf%{YXsXZ$(FbzP$riJuhySznw4ng2)va{R^9v9&K+&{lcJ1885aL5#@`ugvl0i zuNu^vGl~SU@w)bQX;xDil(fJ@YAE3T^KlRP~ ziv+Q=9i8&h`I7b6*%gF*$9n9qwVj=~(_X%{QUcrMkr`jVrijl3cBPm4!t#WgT}fty z2<)J>v#SfVNJ`u<|1#TatjR9?{VUe(HC2pNn1UU$wve3{JCJodRLv+~5=aKQc}ZaR zdy1r$5!f58IE52p3SFWXG9uV zPsF^G&Uh(xM3`_+gei3bi~&lgLe%>05Ya)gzi%xr`^o@*LiEHz5$)^4WfxlI7ljei zg<8TREfl^lKSg@t4WmeqI9k`&C(UZgjxJ$xGqJfK2@=QMyo4mJj39B+L)jlq%1)X^ zf@DR*TDeo&nw~U$YuDmN&-kQSMv$yGDdSxih;|LhHP+m^bvWjd*eAbN$&j^u9sVE` z>&Z|RV-=>59I_^)9dn6UWIZ`l%_zT-NQQJ{E=iEQ$x|e)j38-SSqeR323>E`HW}qN z6Ow73TEkP*Je3HNIi5UA znzB}&SW7OB;OMWQj@Hn9Uzq{RmUn3q+0sP z%#)c~-%O^W1e-*V8XqF_b~d-Sld0%oHi;nh1YRLNwO#UGHjw&7xM^S$KBot*S37!K z6{*9<4L2Zu$B^HYGJ@2RCdv*pVFsx)BYzs)i0X^h#+7su?{@2DxuYg7lQ9NLm>|dWV&z@R*oE*PGs9GMdzRH%~pmQ}5=fM3A22 zsYF^CL3(c^?dDVi?PhN!%{*0!q@_y<(vJiv`^Zn(BmN>m`k7vua!H<8OTW}anWESD zHi#g7yhoaGVDrz*rCFfAk;w$8eldy5CmUXUoz*UhsWeEI(g*1J}7BOT# zT&nWiQv6&&=8JGbSR#fEU$frq8*pj=S1~eQh&#}+aMfMnHvCvsWWF$D0h_o0W16Q> z@Sp%=OGI9^>=t>f=wnN2l(D;pj0O=`h5aH$S)#{t&&K~J|--xY!eTN5ix=r zIU(-D7iz`WHbWM0BV2&7o$f-xjRK6#i5b;$O3YwIADi21) zRX?$|h{0LyQTc?4zUHhpOBtN}u!zvHALso{7^Mu(RJUY#WO+i}nQBl>2h^QupYmsX zG{2m|nKMJwM7ih6)UcU--{{i@H$t_Lcx?1 zvRYwya))$cT@R%q4a)()8Vg5-uUt7eGT}JESC7hCH*0ReA zcR&o;HN9%yr<~u=r1q=WF8IWd-O{7{zq7w>x$+gy6?|gIJ}eTd;VL&gHJ}<4zg}n{ whU`22>?ghKpJ`^lz?YQI3^{#B`OC=9Eo)c4;@*N!47nTW!a+;681jMq4~CHT5&!@I diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin deleted file mode 100644 index adbd320b68d766bf18843503b6ab48f78eae68a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4973 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 Jxs-ob{{u{|Dpmjh diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace index 6b5705648ef7c8b3765fe60192eb5f02a53c6787..ec3ab882b148c3eebc1bf87f85043bec1a9e4dd6 100644 GIT binary patch delta 85 zcmbQp(a$Kvz`(%D$mqD2QGkKT;h{qc7vDr7XDdf7he_Q0FcAh8M>9!oZbl}Dx58Xp h42+Jkay&eYOpd$~+}uFk5@9|*1|~-xVICd^MgW)J4U7N) literal 1041 zcmZwFJ!lhQ7zgn8xy$9+7Gf4fQz{jiT)mRMmaBf^@ zf+bJKRVLbx-8wbLae}|DiLtFqOkr3c=aT<^4g_DLR`mE+v^{C@G)!r}_ftk#a0yNZ@QoDO=6? z$8olUTtVu4HcB&(_U+~i1>Col!$%aI-Eg6R8@9qIaJm}liAGs>jBAXtJ(;v4qXcJA z;CwNcibWjy(wLZFf-7Z7-4sf6C6z12B^Qghuq*S*0fDP1l)Vj6ri6|KZi;6gd0&cW zByg+sGe!m1@0(ZCX(qWBy*B~j&fnWXa53<}&|Scy}z zROyZA;>ct@fOgLgrz J`0qwHgg-;?xJm#3 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin index 2d8b8fa3c930e63dc0ac5395d0b82306a22735e7..40d181dd44aebb5f65f38749f54f8880654ad491 100644 GIT binary patch delta 1954 zcmZ8iXHb)g7X73~63Rl*m7)+rq}K(40Yt60mw5XE8n1)u;31Oi%v zsZR9N7n6ueTY}$TOR8A2%bt{NE%oHr%f^nap0oYN zfAFU(%2~nbHqmu^IX}Nn|39-QE%$H4Ro}pk#fDcpM$be=L_}x_DB3AAQW>AoBGcUN zr!4)-_5&nOkt&qQv8(`tpmyFCV!5sNbBq@C$jASxUcKVNzmRX+QAaIzBF1IL+vxab zpHMC}pbWoRi9VLZRi@O=FA3KPVW7(Nh#t!FVqG}(CQ9LLRUJN5vNv_$6sZy~FD7wo zCT>M+U4+vO8Y4x)of92R+JjMa^tF(%-CNRBd>#ca<^52_*PELuap&WOzh0Y}c^IgZ z=O?T^dV~G;_H^j4zS(s=azEAVRN!NQ>6s(z(Y$ zH$r}Fm>4vq;a$oU!TJ?%)HCkKJ6}b6leb&QA~rsJQyLIVnde>(!l23>(LlBAHpI{* z37@_a=_O71;9@>!bI&sj#fyogVyhk5&8-xuB!<;&MQIbB4vKqtTsGD^dzr`gf^_Mls3b4^~s* z?ysjVjfNwf^yZ3+IA3ajal||K97zp?a;B=*%N|x+#_U<7#`qmJXC%*)=&NQva1-I( z_VS%)d};R@&b_V$$EP{y;ySrz(&6hiLd9}ZmUmdzQgh)SxFhtYx{)@YlOj@tKyQLKo?z=AsNv^Vvq@eT zui+TQ^d5`8JD9~_U*F#Ub8VL!)B1yEjIMJklhumMvVky+E$+V*DsfmzEJ!fqD6m4~ zA#Q0_tEtff1%(OZRxcAxsT{TV?cFQun{SsY3F$mc2fVgkmGq$ zn*2X#SO5bgBx*FJWYiSE4GvkF_1{4VED@vOAiH;yu!1C+-E_L*bd4U6{2+M?5gD1@ zl~}@k6}7uWDCjZ+{{Sbcnhob(WD!$0GzMFKOOe#B2qN1xxT(z=?)LXg1n^x?+t@0c zFilC#bawfz)#W3`9=$4G#a`uy6?S}&U)gv5Ts%aXaAEhE_DN;?AuA`1Y8~=ml`gEl z=ki0unu;uA!2lxd2W)hqJ+)+a6)Y8y!g_Y_b&vOD^sCb$06?XgX3qQC=P#(TJs~7cr=E; zoKjvWxoP?^mKOHdCyD#L@Xb*0FTEmyx5a;{SLjKsFQUfHzy2^0CWnbxs+nvFsTj+( z;Euv6{JOIKQmFj%!2PV#!)888@^0#c%i`*oB)=iK-KTTk&is_IC*>A@@u7^zh5ld0 z?jrJJ_l?}d21d#S6Lq?VeRVxt|M$_e`r0T1wh|rLZA53zBzUHqk0gGufu!3*-lg{U zKV!2GE~!4dBz*~T8)S+bf3e&ocKQUC(Kp1L>0v&g73EFm=3UG7oatw}X4~huJ<2Mg zIoNxxF##c-oVf+SdhVs7MXVrrB@C=HeaJ4@Uj;TrH|5o=9X1>+)W8n+wje>xhRB8) z^vG7lvxtV7yacp2LtLd}uqxXL ziDOmIRq#3&oBsHqsH?5r0jIXsoDzeCQGwLdL)H>s0*ZlD`a(% zTY5BoY!`Ei8NNs(oedup(A7|SkD`=D^-^WHx^NDPB8{Yp$|4Qv`TUaJ&wwlwMrkvX zv&Sfn>f~53N(GsmCydghPR=7n;nmKcKNbc}N?SPNjsZY6|Ihsx9~AgE6LCjv1wzY* zs45&LCGIFoP~d1S^U3Zm40PtTa%Yu6V delta 3252 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 P2}3pz!gt}`Kk9z~4afcn diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.java._trace deleted file mode 100644 index be78925570d28f6a1808985911c002a717c02b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 775 zcmY+CziSjh6vy|??%uewzh>`;0TJ(nh!7IDJ`kKYAc)um45U5C`imolw;m~st!0A$ zf>o@96jmwHSy-fto!D4tBif`1@y%Njv(3VX&-=db%&?y4g#h+1EO^3vz+4vKEj@cx zR@1sFUsg|EOy-kvI@x?$*43<@m5=GWRzIK4?rhc7=7um|?X@dc&$FIy&Quf;epFI= zfEj*Q1Hwb|C(6ALuWO|)5OBH2_@ze~zUUoI4-_ zfpkWfI|z8Pa0dZA>@W>FM50B2M>n&Ka-$n@>;-rvvy4VYl1Q`&@VLkBwk8MoGvwSj zWIDN(=d=Y!NkUsrWS&zTC6QnGvb#)Rjb^v4dD5tc+$)297-~&h-iA!C yhlT6o2H(EXML~VLE+<+9b|+@X?c$uao1LGMZkKZJ6Zfw6GJ!qr_WKwA2>b&m7I#ko diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.TestUtils.xtendbin deleted file mode 100644 index 5ccd552244fbf6ff3767d48fe9c0390eafe81311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2595 zcmaKuc|6qH8^^!MK9(%mcL`0*wUlJ9v1GY3V`MCem{7J5vVZ6f-!B;L7aWv(<(BQFsZef+eV*^T#oTy-%U)Sk+SaGp-#2T1dxLS(g=9cx zj}Ha!xt(bk66holHAbRGqNj;jXC#zFJxzB}#7_phQ$g!{h9`C(@ATQR6fM4QM^KBd ztZZ(+LEj?@Qm0VcPWH*r>1ARK`ilN{_k4Dcc31($L`w78hK`BXoZska8i4_$I+hY_ z-g?S9Ef%+iDhwi|cS0L+7{*Bph>7LJw-kcia7A4Nb3MmBZSBW0iEffDyUQ`9Qa4$? zy<^jz{BHd9R7$~z7cLt81Ke+;N5d!DV-C>VgWUEaR~Po0T>Z}RPJf=uZt*Tka1&3s zpJ7L?a`Sz?wv)s~rEKlXIUJLa&yh1(&KFZ?o`cL9_kQuF(0c1gU~#>-)STQc``D%LqB|;g-mWmCV)(q*lR| z$|qfJRoM*yiG{2>3N*;trZjty6`{`4GHrK&mw5SDwg70wLy2?6KjMaBzi0O(=k>!m z8K^8$f<5<-1P4cIpgs;WY6GD%zgBL{uFI=b3_EllI=+;0;7m+?jBGs1!;D;8P~Q@z z88@s8T68Ban;T7X+xcvDa;aI`99U$nr3EXPl~EfzPPM>7H;jH#q)0yYD)~5s#glY%a1AYl}w6&MjXq0xB`Onjk#$GL9>fI zE*K+X^uymEhW=by5WFdd-}Z{;vaRX}xDX4MOZimjK-SJEmX-Ko zQsF>D)BS;O$R@igiii>A+`}Qog{N0zWeF2+q&HRxGju_lc471DN zL}XEpAS1dm3Ljod0K)?K$0dU5U0p86M5S9JCDNhTd!#?mHM1d2NFl!S?!_sedn9UB zUp?`eQXyzjxprfd&Cd-prk!BqcKGSCWj4%!aK62)V}17RK_8LHILS-Ftt+@9rQ2-I zo4kB&1bn(pDDUq3JcU_xW75n_8(8&$Rd%rx)`f{!Bs;_?d79k-o^t6Q_>B8*!yhdFHO|N!W6JEcTIzobIGe zYuvO=Vd1m;ao7#Nk3Ez)k(Qvs}&{7`+J>V?yW~1 zV6D3URGrfB?-r)O`W!*KWo)w3laBGY1e>u6qO z%}Hqg97MfsEAxOr;qHJR{v&NF4*;C1qr?1O6v?{v-!z5LAsi{ysJNf+EcQ#N`@u>c!yT0YtzP_c+ zXSLmFt;w_~a3$?tCf}%6x;_g|g(jmeVb*(QaX$x0w85;WcQJ~zzD3B#Mu&?IHyp^e zT;P5wF$%Lc#Cl0sJ05!>u9(N{y7T9@+LX90yu7b*h_G@(IWFhY?AbKSCcz)bA!+J<`U!RJoc1gB5mkHe{@#8WbnTMwm#1^0nzizpWIqE99U zukMjsy4JeUxsms<&)rw5lFWt-i}|b(i%YTqyTL9ZPG#zS4hw0332q0oy=OqHU2ZK5 zZnR`+VkczFY5r|$I4|-uVR`Grqbg$OXh(2e5@G=WE6)E{RX;y?x1b<@cW<|!#T4YU zl^5I6mSn7Vx(N(#XjarT8$P9}enGoOp-JcExhB$l%(Yab*RgafP%0cWg{4w!dwPCA zRcfKaP!NVgA4aQNZRM3dVcFI{NSf~@>M5xh|zX?&iq zU!W$}>Lkc&FTra~qej^+qj&CPBkmo1(Crv!6R_j(fhQS5c|@5S69|?@shqfIDcTGp zb2l&<4QONWl0@G(VLnetVh(j5AQWL`A7R-ni7qW}HE-$0Wy diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$1.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$1.class deleted file mode 100644 index ebab10ea5ec7412a059bb442c71c6cf4583cbdf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1706 zcmb7DZEqVz5T3P@Ts#=!h7jIM0Jn8)lY86UJ8z;&X`2Wnw?%SQA-<|UNtBN4Lgz(pANF26n#9Rak6##EcP&_9P`eI$-aplY!h$shb~YZ_dXU8DxwbD0 zeOcI-{fPV|?%T(cbWp@un%A#9m%&_y{N!)$OVC8W( z)D>Xxb`>mGM<~Na6)I3;P;Qujjc%OkXOpu&Z8_>En!#o_8$`*=XdD|nUtBS*GuV5B z`gNCDUyaVslOGs7XmoFixWBuw^eD>`9i{sge84~~DtkIC>_Ilx_AooMuey3dx<}*4 zDBLTeLZ9ihK==qgvEX9{cdkp#d8_a#++|>0M9D-yf5l+C@%?S(8I2$Vcsy@;E$>@kANpl(l*dg7^^sEA_)y%BZl`qp% z0dpd6k;kD#e*kQ@et~N9H+bh~LM6CE?=^}62w;=m)v1s0E^HBE<|yY32V@Pydh2g^ z|9ANCC-N8bJJbB_SC{P$TgWmmiG1Swgdmo~L{lJzx1AdQ$lUeXe+bzEC_wUn<@~KTyI!KUBhP`^X(7 zcsoGuD(NEkl=RwsiUe|BNr{{*8JIO+1rBnd0*aF=@Ju!#`Vy#sqC*u(vqmUH;j7R` z!Bxmn2o(wxQiT#lpu(W-q3Ecv)0QY5)e$IN)seJnP&h>$l%8@O2c=KOHQx;OXPBep ogeXyvnPwUspp;~YAt2K+NrYVo10rz+hK_PQ2g8tzz~&MD2XHN{761SM diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$2.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/ASTBuilderTests$2.class deleted file mode 100644 index 16f42e1c7d7364faa941286337a04283194a441c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1777 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 E06}37QUCw| diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class index 5796333db3320554ed0aa077ccecbe1abd45e285..90fc003a175e5bc77903667c250174a6fe4ab8d7 100644 GIT binary patch delta 29 lcmey%{)(OJ)W2Q(7#J8#7&JC=$uLhgWM0U~Joz%S5&)y232guX delta 50 zcmaFG{+FHW)W2Q(7#J8V7&JF>$uM&>GI02%7MFPB7ne*{V_wL}GWi6v5(k3@Pze)* F1OSv!4D$d0 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class index a868499c6c3738f1b11d00d735c4457b9702bec9..f7f56f05e9b8bc22ddc22201b89117c3c25590ec 100644 GIT binary patch delta 38 ucmeBV|HdY8>ff$?3=9k=49e^bOpFXB6Av0~bShz*e2{4_BlF~VW+edbX$x%t delta 59 zcmeyy*2yk#>ff$?3=9kw3@YplOpFXB6Av0~bSh!uW@O;-OD!(($S*FLyp3rtBg^Cv OW+e^=WuRIn22lVB7!K3z1CJQndZFKsxi;0nG@?>@m0Qv3<1poj5 delta 68 zcmZ3>f1F?7)W2Q(7#J8V7(Cb+m>3z1CJQndZFKsff$?3=9k=4B`{Hyye(zGV?M^>=+rCH8jH*8Cab2Q&PDYm>D>E7+4wD zCVMg_O^#((pZG~;atr(A$*Vc!>KPaqfe4W(U46It)88|iq1(+DPfFwwo zfq{>K8%Xki*{ndC7sz7p}FDz;50$sr6*X5w5Be^H-Z zt4pEnYWv(j)VHqgGZR8WBCfv7nX_l#_qX?+zyJO94*++t8%BU(a?4e??r_E8o7?J+ zs_3dwQygwPwzA4M9}{UswQS9(tr0DZAj9cHz9;2vUU3)(8pOjNalOGUhGfCCY6`FD zTEphbuETd7Pa`Q&Tu0Ltp|Q!GW9TnxHA8h=i!(g^AEL8`p1xBc!fRzg(|PV5=^t5j z4M(f+N=U{J;YWQM_lX7FXVUgp-CN}3s>1+${+>#C)Rdy^P+wlp%O^mg}CsTPURO|`m2 zMsB8=Au{MQvz`s7fx3a}4n#NjIt~Mc2wo(XlA;^QKWz9Zq?sz$FZ0 zFoFvVGSy5sV=qLFMg{qzjIVHsVpkgtZd4hD#tVn__I2eZ)&*-!#;8a`*x+wPCi=l} zRYnMX60YM$7-QW|9fJfJ)hxox^ug|Lwr|CHlalZP74XU+}aHtvRThv7zhRS#qB5|NRGfJ}`$dCM{_0^Ic; z1_|wT)9|}6U(g6U1Na*E!yuH89yQg)EaL&@sNkBNuQ!}`USn)TFi*gLX7Jqxbq}w` zxMx2bL7pLyj7j(wi(x!sm})oRkA>Z`N+UwRbdeA(nkG*l3|n-kjK}zn+HTv_42B2o zcsO9rwPEuJM!G;NAiE@E8BZ7@j_E_0;S0)A58g>Um9dH+@c+x z;dvM|B*u=5F~3{kjV7XA;3dsX+u-W!cWYag`IaHw9->DR2_d{6`qvy~Eky+OR}5zl z8Cqf#WU1_GdbQ_7K4v(G!AJ0Nb(-r}d(W(n5lifT#RYqN^a8D25F+i7QVTz9gYtXe zW{FxXRPw7GZHu`%bO=l(s=!d&msYT(b+~i%zH1ze-aG)KKu^qO6)9)@$>`*TVZ>R>^3PaGP;KK2!_3#!jGXNy7$?Wno{ z-`x&3{RR^2L+sU-sNLLO)IqIQA{}GL$odPfX>6u<$vf7RFJM|Lmbs%5z(~KmXc*j@ z*G03~VYm#bqgeQSP6-T$38vQcv-yyh-C8Ra+Br0L=nsbQAa)Hs!*mNEf_^&th%R|| z>MqE1J4rW%PDW=a{t>6%d!J9!Q!oSPafY6Pl^77kSvtu$Q35TMLqsD*EZa1v{f6O} zA922rh>m=~mx&L!9RCGZ=)Cq9;!DXrB$N9{G3+D5uspesS%yroDU}V4greV&++_6O z9u~5FBcYK#x()?LLLX4r!^+R-FC_M`_UC)gtrE)EKoG*|dl;nWWr{b3Q}n4rlNM+pg3ki-^oh+tPq8qk`-M(`Zp;|H>I33K?7xC6vD zjh~=WrZc3YOwvKp8bg)%LZtT$I5sJP6}r_(FC%S!5`D>Sl6*~+egytOIgE`EDbR@! zK;6sgIeIfl%zOn_K?85Zdj%G3Vv^|M&<@<`>&IKV|6W|0TaiA|PtptOnyM5pir*OV zvLGd5H)B1xMSE4Ho__`%_-^~-o$_Vk1!?+LHZ?6xXR@i3luBjOH>FfMo1RY2NU2OV ceM?H+&ZaX`>P|L&J4t6MJCjbPrFdTY4|c*mF#rGn diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/TestUtils.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/TestUtils.class deleted file mode 100644 index d29098ce55094fb7e316fd193de8e37fad7d17b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1309 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..e7eba6274acf28458602b3512a71a41ca3ff7a1a GIT binary patch literal 32418 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 Syhd>M4L#brAHm&QME?)8%j#_a literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..b6852cfdbf336631ad9375f1f275d05869f9792b GIT binary patch literal 10085 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..62b83224dc10a8fe1e18440e2afc889973c15674 GIT binary patch literal 20443 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..77f0f81f7d1866febc4b66e3af6f8b18db30c5d5 GIT binary patch literal 5367 zcmZ{mdvH|c8OHZLXK&d}Hpy<*+%KEBgd`+ODj=9-a+2M%XYWt}k*TfF5(P_xAYNfC z7i+O&QEBPL5u9<-(HWeM&M;KbVXD>Eg2Slos8Ff;N0Aw(UaGZXwf6mD@(?Y(gN&R@8~@PS7F|HDf%P{hCN^%JNNkz7?uNCutW9iOJ9&L# z>%>i4Z%VAaaYJGS|Fv@KhK)B3+_rUMa-EjEEC26$BRk!|$&)REhrvj(vu(ggnUezgDCl#8`?a#@}=Bk zA2!8FOAd~8aEQ+QYSX3c5%#Bsm$bC7yl9@9EVZ&7lx%0xQ!4{4EnJ#ZQ&Z~ND5w~P zcCBbd(Kaw~msN`N)CM;ySGnQ)ffw{GFO!zC6Q#DtT3gw-zJo{BQ`>#5t(>Favco`YDctB02KiH0X< z+KJ3u4YcMOROSLg0VXn6cw#Z`68C`aZtqliNYKqaHJzQDH=ul)gUI}K5E|08X=;|9 z&sBDHv2UzWJx9|{WWF1Y$9W6ozn;>rw14gh*It#}AM0~fr9+;%a~aq2R4&ayl#WzF zyRMQoO1C$IwnUlqblfL|U2qVk=Y^o%9)fSE3ACpUzA^Fb5ucqXovA|QeO2&X)ebt) z2;Vj0J0LzgQTlsfR8EEAyQLfSyBK`i>x5LgJH6d4G_QGv=gQGi1r83>_qAN zWzG{a=fOC7o@z(ll+1EU&Eif^N!}^RdrW$sk)C#<^b_(N{vpr7PLw_(dFLhX1;a$( zg;4|^?-x@4s_yi03A`YICnfMp3A7WXU++*p)6;=2uOr^{sCY{M4UfzWG%;xoqV#{T zKywZ@+X@V#%aT6T#j0r#YG86(HJHU*f?2FO%wmpU76*~l5`@nTsyqjgH8%q7n-SK? z8eRyRNFZ;#O{fidWq9}AMvHJ_)>naW-jXkHTN;;nacuw zytZ_6fQd3AF;F}PZ6qQTfwrs)w77~%%h-uB>&CyBH^dRyv5I&PcU?FB%DgL>R~r|Y zeVHGP^!GDf)5>?8p7~9+{SIWh<)_2~}AItN>k9UlN}|4!Q&vcJBUG z^y*TVou2!ZXND+upnB0FRjJ-HdhUP^+9kNq97MS(KeSdaBBs1EM7iUM%P+T0tB{*w zI6Zf~1%%o3+{-m6?W;i>J5lb8A6j|rGGT1WosB>n#yy-nTRTIPZ?0Xkgm+RNh~`Af zFRLCJVpT2<&54wsFb)n6^RO$8ed_kh-)QU`<}13)dj7_sV31YHZ!_*j^%~=DW<9^n z4|Rqeg}| z^270)`@i9;Dzth=M=v53I{gmps|5bHlJ9XUT;8lG&u$Ozy&7nXDj_?UTut$z*n-!h@n+Et;LE@JJPU zuBk%a6SDTncH|wAsVCLc?!pnto0Pnx(sPUSv=bGcm$l!a)~-2-3NK0C4#|7nFcH6Z z6oGH`3-u%LEeYH!f$vD*J_)oF70z|Q_h1LQoRjzmW$XXh1nuD_3}YuMR>%UMQ46GE z%OEOG_Ngw#PI;Us)#G#*J7t!Wn58&JW_b;>IEab^L3BACRCx}f;uR5SXCuffEd+g@ zK;DWrp*G~Lki5?&?`p~WpXAwzifd|>FYB#Emo->>){C_lCooGkD6`m!id)3jpnO!k z3r8p0i=$Kg3G%YNl4mC>K7gZ>9mLToK00>XFbs>dtT7hn1FQ2dhxnH?k0if%if0Cm zabuiI%r5m2Rs1Yk=H*dlz4%$RVm2(VhWC z_4QG@HCE=wW6XN#)_`ITd_2HRrJeO6L+{2Dw=~?ge4_;;}JwM&y@6y4^R60>pj(ksj zrRb#-zOw&4AG0=#sq|V!S%2RR{k7?OFqPh#)<3R*?qn*Rtt$J!#5d9`rqU;6Jr@++ z$+T1pi$B+h@3vV?OQVspJ};v3XE819sV(b9Ep#W-(xFgUzcK{f$+Yx4VZ$;kej@T; GP5%c+amcU$ literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..5d77d4ef82122673325304e14e978e12eeadb243 GIT binary patch literal 5741 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/PatternMatcherTests.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/PatternMatcherTests.class new file mode 100644 index 0000000000000000000000000000000000000000..791051e0ba898c3b6b3219775cf0caaff72825c5 GIT binary patch literal 11233 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 BoNWLA literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/TestUtils.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/TestUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..71d41d35d0c5a4eb041629c39a9347da8cafc613 GIT binary patch literal 6404 zcmcIpX?GLX8GgnHMjnrCVFE#9GZ2U+3uGi&w#PtY8(A+jF3+8jrIBpOI;ZqttULGKcYoeR;}8G+ z{@(y3@V<;D30(_?sFAUasAXKas^8F~89h56wT--;kLpWibegLRwwcMx@JR@iubfL= zHRfyyJC2)K(>^I-TUTgCf^Q_3HWX|_vx@E5A)$TD%o-Dg#gt)9>#2+(p<^sJr)Oq# z%M{PWO`pAB<|Ty38r5fzjOGn{B)7PfF?HL_WiL<<2`9V8%1TbzmYJO&42|Wi`KU3M zF_-d2^lI9U&gCp4n$9go1-+Rm(GM!viCr=}Bpj$oGc+|lsatu&Qt=3OOK8p-FS{EO zp6NPMM_P$;(2qw+DExd>s4K(V=xjCJ4?!8FAviW^}6%L15=? zOQ3cGtR(E5T~1|kbJvXJC7}dCC?MP@YeIO(k^>|OPuHd@gGPcf>v7D1x-^ch3ud&d->6Gi7E>d!->>4J$obN(GOWUMGiUWDHB_uGUU;n@w}^GSij;$*o;-&$GM;BjHX>`iq@Tq{S&^K)l%Q<_zEEQdD3CC& zq7ChSoFhl4P$>8qrevI#@Z=o3&wMV&2(ue4F6Oe)l+Nzt_SL+KXY^O+>O@cXWk387eTxE_WF(%J_tYqh35O+s3jTU3T=y zn5pO)21E4dQ66MPb)#CJ#4M}%f}y8bM7>(AUuFp|SIVMdGW2>SSEP;y-U?pAoQkwC zB9O|ZS3GB&L#{BOUac$o`M6;(lgVmAuW4B|324kLz?l(>0$L(52UG6u7e}3a?Xks{!dmu^PhFQS&_iAIdJV z^DG448cyOZ3W%1N9KDo*3Q9<2zq&H7+D z$BTXYBwaJSHC@eI5=DS5LxQ1&oXs*mBT6Hmz<%h4XP;fyj+C7f_pgS$FC(oj8nf+ z@mu_kHJrl(FR?q;n;m$AlfymyLB+dxkL5ch@=3zq8ys6}hf{E_bo9f2tmkM}W`C;m z5HKxZ@ZkAG7=tfPfr=C z!hC56#(qxr+xQL*@NvbrT>LHbDaucR2HV5;;eU^dCISe~F|ZdcT&wN{ezx+dS$sPv z62C)6+qsvJ#scaZ0^^a6J*(IoktE5tipL}T)fow|;^|d{Bho64P8@lFnC1)m#=74n zohvKsNZiM#$Kl5lm%auvfNN1uc%ldl7N9Ud_x(MOH^2%{eZ zd+O)W@9@ILWh*I5f`+ROh+~p&xk$&nNTwTs1kXSMeI1C-y$emCsqd&XoxGZG4Wa9nR|WTnQxI#urHIr>0-V z7x5*!Hh|Z;{t9>YP}WzeO$&8j#@BF@VA_u*d>!8)sCxJg@tgP-1Al@~x43Gj9f!#A zCigB965r;%cG{!hJ3I~0n!Wh0bNW3>b^&o4ui{Qg<2Ongzgg1wZb{>}sPXqnNr?Q1 zZflcqX#M90GQ29hlHTc#l;XaM-)sJ$U*yC#asVA7ock=FhUtX%4Pnv=oCskOB5*=V(g~bQS#hp!GK8&!)}Qca zTDXfj=!S3~L+6H2xcqr1cBXq`pC3uGBZ3FbJu4oiGTgZ&9i%Yn8H^aG!UZ zu!g_Vf5EBop-H8(q$wBqO+KxJr#g#^(@J+|PiOg(_@R z5-}y7)Dqn3(-H}B(yt}@#Alz@+oQw>wBBQUO7v*G3DS$_q;n?jBw|{!M@jT*NpY4) fYRROM=+lyYN}^v&_A7}2Ejb|0`+9gD9##Ge)iX;< literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..cb721e7c20f3237f6b9c2b24bd2f9c2a81662c95 GIT binary patch literal 2010 zcmZ{lT})GF7{}lDT~A{zA2}_yz(yf6SeVYni-D3YdEWPwet0Mp{6JeVkW$zT>oHK6 zbGVd^T`gJs+OAAohzV|(EsG><3SMuC8gZ9qTe2@Rw+k;M)8NLQb9xHM=`Nq&`};rd zzwJ3GAw;4ycf>`-IAQ$s;e?YnQu5mCqk;5LHXRsF4;kAC^Wd;M;^hkCjkkZ~f z{>D&xIM9_I*o$Y1Iq%2QohP#COg|GZ(%(BZ1U@o__WIbq^QPX$h5v&S+~#oaySfv@qjKJ=9geZ;10 zmAqb@cS$Z6Vb4rdX>c27O>R7+O0avV66PoqYUo23W|`92Emy%TrZ*6D;-UB4&`az} zXXs27sOZG`5qF~=+6c~u;?fK0M{CT2WY2Bvpwk2BR0+AaV2~DUDeO~L6IN;2KLLHizkNgVP;0a-o zd!hwWFoA1sN^l*nBf2j^KlBr3AvCdAYdU|`8V*f7iA=#fJf^KX~+?K(k?zm?+$t{co$hl&lX`}u^(>09X)G$v}dZd7Z%|WWEQD$k zHKy}wjp0yj`ly|EiYm(5laVH5_VhdgKXfF1=Bs@mH zLKkFpUMp+%=UImq_Tg*2Ol-MWvs_@Z@up)m;?U9hdbwDaGtXA*q4!Pu0r7%3N!Y

>%OUY zcp2_w{{w%Hek5ANC|xsYF8P)u#*CVUM##p!R(8&xXWetk4ql44*mB8pa)HT+@b58~ SyyVc)GYykpIP+|^ApH*)$||A& literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..0f15ff193f03d5b5b3317614f6aaaca28c0c70ae GIT binary patch literal 2011 zcmZ{lUrbY19LLW&>8;lCCznD?olv$oN*A<=4~UvAzjH2>*0w;wfwn+wN?|kD5-3F7 zSgO;fC5vpBz4)-{mJx9=iy8?I-nYbmWN+Kz!;CQ_doa;O2OIm{+gm_x_xSsq&-Zt} zZSPG9Arht89vc-O62{LTiCMXal6T%4^CpKfN$*H<;8=V-?j4G!2ECc&XlB%#NFN`5 ze<(TP?MMzB#4|;o52>fSPh^s*ekR_^9(htCK3H2xwuuI3NeN~AqRnb0RPQ0nj?LtNJ4cl7nrqeFrsx4VPh^jW&}hh_&g*@mUDh1P*P+pQ|09@#mxTF$ z75gCpr*X|432wt}L{B8>hkn8gghm%#y7Q+?b7=H$|0VbVUQiY&5nGX+CM>qa-vaaS z96z>!p=aZ(kc2ET$F_(I=-o%p1|K0yso4U|FAl*1+*h-@M|&?fAB6|-46|4GAPnO^ zR**ezu7X8)hS|JF6Wb(suGPy|p@~w50oA&7bb(Jm8ZR&S+DK>EHq^^Dtq-*OVgo7^ZR8tOP5tg2*kwSvX6WfzZT!weHkcYYt633QoX3JVaSA zBz{3Qjk%}6H{f3$z*Po@UPLUyIrx^C6Hk=^^zdZ~M&KH<^J><}`u8Yr!YX&DS>2<9 zeJ#g$CHE5+ataH4hWl7S_En3UJGq~(do*=V;sLE*z6wqK>@c7ucMgS2!UdCffhn~l z=aGzLlF-zOMI{@XrOnnHS}R7=$NPM|O>8HuwcbAfSMXalr6(lb&f5_+N-zU6gc%4; zpQ+NFx2rUVrls9`@DcRl z_()uZIW=2={nfOOck&T6t9vxlaQGn~6%~ZFoom^O@7FS61=-2N7kNfh&~=Yy!#gBl z*ZSqVAbZ_mWR30|Ya4E<#@Bk8n6lwUInQM6O~+`!qN0uUvf)l^j;+;0Z?5%Su|u39 ztm})W2tH_a>b{>OQ6;L7U6x=KRtYmAjNYr!t?3%gLiD1wOjL`Lly&{sqaa?DFXx?qIbHd%kjHWV$W+R$+;W5G@EnW!vlul728r8UN(ro0*zyq;Qj1ks- zN3rt~+{yk2{vP;L>=$En-K5#r2}z7=HS>*-O*o8f%AI4~vr0WL##>C;*p!@SG9vtY U%*MX4sOXi3v1`^GTPsNa1FnTD-~a#s literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..57eb439a66364da7affca7d64939766a731a9577 GIT binary patch literal 4323 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.class new file mode 100644 index 0000000000000000000000000000000000000000..71de075ad4ab3449f93621393d882a3750c88cef GIT binary patch literal 11771 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..f3451a85821176f406522fbab57b95de55ff155a GIT binary patch literal 15750 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.class new file mode 100644 index 0000000000000000000000000000000000000000..6b7a969b4cf6bf7778b2e01ba0954b05cf130dc5 GIT binary patch literal 11461 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 replacement - - @Test - def void variableDeclarationBuilderTest() { - pattern = PatternParser.parse("public void f() { int a ; char b ; }") - source = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }") - typeRefString = "void|int|char|" - replacement = builder.build(pattern, source.AST, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, typeRefString) - val variableDeclarations = (((source.types.head as TypeDeclaration).bodyDeclarations.head) as MethodDeclaration).body.statements - - assertTrue((replacement.head as MethodDeclaration).body.statements.forall[it instanceof VariableDeclarationStatement]) - assertEquals((pattern.patterns.head as PVariableDeclaration).name, - ((((replacement.head as MethodDeclaration).body.statements.head as VariableDeclarationStatement).fragments.head as VariableDeclarationFragment).name.identifier)) - assertEquals((pattern.patterns.last as PVariableDeclaration).name, - ((((replacement.head as MethodDeclaration).body.statements.last as VariableDeclarationStatement).fragments.head as VariableDeclarationFragment).name.identifier)) - assertEquals((variableDeclarations.head as VariableDeclarationStatement).type.toString, - (((replacement.head as MethodDeclaration).body.statements.head as VariableDeclarationStatement).type.toString)) - assertEquals((variableDeclarations.last as VariableDeclarationStatement).type.toString, - (((replacement.head as MethodDeclaration).body.statements.last as VariableDeclarationStatement).type.toString)) - } - - @Test - def void fieldDeclarationBuilderTest() { - pattern = PatternParser.parse("int a; char b;") - source = TestUtils.getCompliationUnit("class A { public int a; private char b; }") - typeRefString = "int|char|" - replacement = builder.build(pattern, source.AST, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, typeRefString) - val fieldDeclarations = (source.types.head as TypeDeclaration).bodyDeclarations - - assertTrue(replacement.forall[it instanceof FieldDeclaration]) - assertEquals((pattern.patterns.head as PVariableDeclaration).name, - ((replacement.head as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier) - assertEquals((pattern.patterns.last as PVariableDeclaration).name, - ((replacement.last as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier) - assertEquals((fieldDeclarations.head as FieldDeclaration).type.toString, - ((replacement.head as FieldDeclaration).type.toString)) - assertEquals((fieldDeclarations.last as FieldDeclaration).type.toString, - ((replacement.last as FieldDeclaration).type.toString)) - } - - @Test - def void methodDeclarationBuilderTest() { - - fail("not implemented") - - } - - @Test - def void constructorCallBuilderTest() { - - fail("not implemented") - - - } - - @Test - def void methodInvocationBuilderTest() { - - fail("not implemented") - - - - } - - -} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/PatternMatcherTests.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/PatternMatcherTests.xtend deleted file mode 100644 index 23f60eb..0000000 --- a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/PatternMatcherTests.xtend +++ /dev/null @@ -1,62 +0,0 @@ -package hu.elte.refjava.lang.tests - -import hu.elte.refjava.api.patterns.PatternMatcher -import hu.elte.refjava.api.patterns.PatternParser -import hu.elte.refjava.lang.refJava.Pattern -import org.eclipse.jdt.core.dom.CompilationUnit -import org.eclipse.jdt.core.dom.MethodDeclaration -import org.eclipse.jdt.core.dom.TypeDeclaration -import org.eclipse.xtext.testing.InjectWith -import org.eclipse.xtext.testing.extensions.InjectionExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.^extension.ExtendWith - -import static org.junit.jupiter.api.Assertions.* - -@ExtendWith(InjectionExtension) -@InjectWith(RefJavaInjectorProvider) -package class PatternMatcherTests { - - val matcher = new PatternMatcher(null) - Pattern pattern - CompilationUnit source - - @Test - def void variableDeclarationMatcherTest() { - pattern = PatternParser.parse("type#T1 name#N1 ; type#T2 name#N2 ;") - source = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }") - val block = ((source.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body - assertTrue(matcher.match(pattern, block.statements, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, null)) - } - - @Test - def void fieldDeclarationMatcherTest() { - pattern = PatternParser.parse("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;") - source = TestUtils.getCompliationUnit("class A { public int a ; private char b; } }") - val typeDecl = (source.types.head as TypeDeclaration) - assertTrue(matcher.match(pattern, typeDecl.bodyDeclarations, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, null)) - } - - @Test - def void methodDeclarationMatcherTest() { - pattern = PatternParser.parse("visibility#V1 type#T1 name#N1() {} ; visibility#V2 type#T2 name#N2() {} ;") - source = TestUtils.getCompliationUnit("class A { public void f() {} private int g() {} }") - val typeDecl = (source.types.head as TypeDeclaration) - assertTrue(matcher.match(pattern, typeDecl.bodyDeclarations, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, null)) - } - - @Test - def void methodInvocationTest() { - pattern = PatternParser.parse("new name#N1() { visibility#V1 type#T1 name#N2() {} }.name#N3()") - source = TestUtils.getCompliationUnit("class A { public void f() { new F() { public void apply() {} }.apply(); } }") - val block = ((source.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body - assertTrue( matcher.match(pattern, block.statements, newHashMap, newHashMap, newHashMap, newHashMap, newHashMap, null)) - } - - - - - - - -} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/RefJavaParsingTest.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/RefJavaParsingTest.xtend index 076d238..5489dda 100644 --- a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/RefJavaParsingTest.xtend +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/RefJavaParsingTest.xtend @@ -3,28 +3,12 @@ */ package hu.elte.refjava.lang.tests -import com.google.inject.Inject -import hu.elte.refjava.lang.refJava.File import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.extensions.InjectionExtension -import org.eclipse.xtext.testing.util.ParseHelper -import org.junit.jupiter.api.Assertions -import org.junit.jupiter.api.Test import org.junit.jupiter.api.^extension.ExtendWith @ExtendWith(InjectionExtension) @InjectWith(RefJavaInjectorProvider) class RefJavaParsingTest { - @Inject - ParseHelper parseHelper - @Test - def void loadModel() { - val result = parseHelper.parse(''' - Hello Xtext! - ''') - Assertions.assertNotNull(result) - val errors = result.eResource.errors - Assertions.assertTrue(errors.isEmpty, '''Unexpected errors:«errors.join(", ")»''') - } } diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/TestUtils.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/TestUtils.xtend deleted file mode 100644 index f262500..0000000 --- a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/TestUtils.xtend +++ /dev/null @@ -1,17 +0,0 @@ -package hu.elte.refjava.lang.tests - -import org.eclipse.jdt.core.dom.AST -import org.eclipse.jdt.core.dom.ASTParser -import org.eclipse.jdt.core.dom.CompilationUnit - -class TestUtils { - - def static getCompliationUnit(String str) { - val parser = ASTParser.newParser(AST.JLS12); - parser.resolveBindings = true - parser.source = str.toCharArray - val newCompUnit = parser.createAST(null) as CompilationUnit - newCompUnit - } - -} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/ASTBuilderTests.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/ASTBuilderTests.xtend new file mode 100644 index 0000000..18643bf --- /dev/null +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/ASTBuilderTests.xtend @@ -0,0 +1,182 @@ +package hu.elte.refjava.lang.tests.api + +import hu.elte.refjava.lang.refJava.Visibility +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider +import java.util.List +import java.util.Map +import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.dom.Expression +import org.eclipse.jdt.core.dom.ExpressionStatement +import org.eclipse.jdt.core.dom.FieldDeclaration +import org.eclipse.jdt.core.dom.MethodDeclaration +import org.eclipse.jdt.core.dom.MethodInvocation +import org.eclipse.jdt.core.dom.SingleVariableDeclaration +import org.eclipse.jdt.core.dom.Type +import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jdt.core.dom.VariableDeclarationStatement +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.extensions.InjectionExtension +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.^extension.ExtendWith + +import static org.junit.jupiter.api.Assertions.* + +@ExtendWith(InjectionExtension) +@InjectWith(RefJavaInjectorProvider) +package class ASTBuilderTests { + + Map> bindings = newHashMap + Map nameBindings = newHashMap + Map typeBindings = newHashMap + Map> parameterBindings = newHashMap + Map visibilityBindings = newHashMap + Map> argumentBindings = newHashMap + String typeRefString = null + + List replacement + CompilationUnit source + + @Test + def void variableDeclarationBuilderTest() { + + source = TestUtils.getCompliationUnit('''class A { public void f() { int a; char b; String str; } }''') + val sourceVariableDeclarations = ((source.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body.statements.map[it as VariableDeclarationStatement] + var List replacementVariableDeclarations + + // #1 + typeRefString = "void|int|char|java.lang.String|" + replacement = TestUtils.testBuilder('''public void f() { int a ; char b ; String str }''', + bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + assertTrue(replacement.head instanceof MethodDeclaration) + replacementVariableDeclarations = (replacement.head as MethodDeclaration).body.statements + for(var int i = 0; i < replacementVariableDeclarations.size; i++) { + assertTrue(replacementVariableDeclarations.get(i) instanceof VariableDeclarationStatement) + assertEquals(replacementVariableDeclarations.get(i).toString, sourceVariableDeclarations.get(i).toString) + } + + // #2 + typeRefString = "void|" + nameBindings.put("N1", "a") + nameBindings.put("N2", "b") + nameBindings.put("N3", "str") + typeBindings.put("T1", sourceVariableDeclarations.get(0).type) + typeBindings.put("T2", sourceVariableDeclarations.get(1).type) + typeBindings.put("T3", sourceVariableDeclarations.get(2).type) + replacement = TestUtils.testBuilder('''public void f() { type#T1 name#N1 ; type#T2 name#N2 ; type#T3 name#N3 }''', + bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + assertTrue(replacement.head instanceof MethodDeclaration) + replacementVariableDeclarations = (replacement.head as MethodDeclaration).body.statements + for(var int i = 0; i < replacementVariableDeclarations.size; i++) { + assertTrue(replacementVariableDeclarations.get(i) instanceof VariableDeclarationStatement) + assertEquals(sourceVariableDeclarations.get(i).toString, replacementVariableDeclarations.get(i).toString) + } + } + + @Test + def void fieldDeclarationBuilderTest() { + + source = TestUtils.getCompliationUnit('''class A { public int a; private char b; String str }''') + val sourceFieldDeclarations = (source.types.head as TypeDeclaration).bodyDeclarations.map[it as FieldDeclaration] + var List replacementFieldDeclarations + + // #1 + typeRefString = "int|char|java.lang.String|" + replacement = TestUtils.testBuilder('''public int a ; private char b ; String str''', + bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + assertTrue(replacement.forall[it instanceof FieldDeclaration]) + replacementFieldDeclarations = replacement.map[it as FieldDeclaration] + for(var int i = 0; i < replacementFieldDeclarations.size; i++) { + assertEquals(sourceFieldDeclarations.get(i).toString, replacementFieldDeclarations.get(i).toString) + } + + // #2 + typeRefString = null + nameBindings.put("N1", "a") + nameBindings.put("N2", "b") + nameBindings.put("N3", "str") + typeBindings.put("T1", sourceFieldDeclarations.get(0).type) + typeBindings.put("T2", sourceFieldDeclarations.get(1).type) + typeBindings.put("T3", sourceFieldDeclarations.get(2).type) + visibilityBindings.put("V1", Visibility.PUBLIC) + visibilityBindings.put("V2", Visibility.PRIVATE) + visibilityBindings.put("V3", Visibility.PACKAGE) + replacement = TestUtils.testBuilder('''visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ; visibility#V3 type#T3 name#N3''', + bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + assertTrue(replacement.forall[it instanceof FieldDeclaration]) + replacementFieldDeclarations = replacement.map[it as FieldDeclaration] + for(var int i = 0; i < replacementFieldDeclarations.size; i++) { + assertEquals(sourceFieldDeclarations.get(i).toString, replacementFieldDeclarations.get(i).toString) + } + } + + @Test + def void methodDeclarationBuilderTest() { + + source = TestUtils.getCompliationUnit('''class A { public void f(int a){ } private short g(boolean l, char b){ } String h(){ } }''') + val sourceMethodDeclarations = (source.types.head as TypeDeclaration).bodyDeclarations.map[it as MethodDeclaration] + var List replacementMethodDeclarations + + // #1 + typeRefString = "void|int|short|boolean|char|java.lang.String|" + replacement = TestUtils.testBuilder('''public void f(int a){ } ; private short g(boolean l, char b){ } ; String h(){ }''', + bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + assertTrue(replacement.forall[it instanceof MethodDeclaration]) + replacementMethodDeclarations = replacement.map[it as MethodDeclaration] + for(var int i = 0; i < replacementMethodDeclarations.size; i++) { + assertEquals(sourceMethodDeclarations.get(i).toString, replacementMethodDeclarations.get(i).toString) + } + + // #2 + typeRefString = null + nameBindings.put("N1", "f") + nameBindings.put("N2", "g") + nameBindings.put("N3", "h") + typeBindings.put("T1", sourceMethodDeclarations.get(0).returnType2) + typeBindings.put("T2", sourceMethodDeclarations.get(1).returnType2) + typeBindings.put("T3", sourceMethodDeclarations.get(2).returnType2) + visibilityBindings.put("V1", Visibility.PUBLIC) + visibilityBindings.put("V2", Visibility.PRIVATE) + visibilityBindings.put("V3", Visibility.PACKAGE) + parameterBindings.put("P1", sourceMethodDeclarations.get(0).parameters) + parameterBindings.put("P2", sourceMethodDeclarations.get(1).parameters) + parameterBindings.put("P3", sourceMethodDeclarations.get(2).parameters) + replacement = TestUtils.testBuilder('''visibility#V1 type#T1 name#N1(parameter#P1..){ } ; visibility#V2 type#T2 name#N2(parameter#P2..){ } ; visibility#V3 type#T3 name#N3(parameter#P3..){ }''', + bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + assertTrue(replacement.forall[it instanceof MethodDeclaration]) + replacementMethodDeclarations = replacement.map[it as MethodDeclaration] + for(var int i = 0; i < replacementMethodDeclarations.size; i++) { + assertEquals(sourceMethodDeclarations.get(i).toString, replacementMethodDeclarations.get(i).toString) + } + } + + @Test + def void methodInvocetionAndConstructorCallBuilderTest() { + + source = TestUtils.getCompliationUnit('''class A { public void f() { new F() { public void apply(int a, char b) {} }.apply(a, b); new G() { public void apply() {} }.apply(); } int a = 1; char b = 'a'; }''') + val sourceMethodInvocations = ((source.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body.statements.map[(it as ExpressionStatement).expression as MethodInvocation] + var List replacementMethodInvocations + + // #1 + typeRefString = "void|int|char|void|" + argumentBindings.put("A1", sourceMethodInvocations.get(0).arguments) + replacement = TestUtils.testBuilder('''new F() { public void apply(int a, char b) {} }.apply(argument#A1..) ; new G() { public void apply() {} }.apply()''', + bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + assertTrue(replacement.forall[it instanceof ExpressionStatement] && replacement.forall[(it as ExpressionStatement).expression instanceof MethodInvocation]) + replacementMethodInvocations = replacement.map[(it as ExpressionStatement).expression as MethodInvocation] + for(var int i = 0; i < replacementMethodInvocations.size; i++) { + assertEquals(sourceMethodInvocations.get(i).toString, replacementMethodInvocations.get(i).toString) + } + + // #2 + nameBindings.put("N1", "F") + nameBindings.put("N2", "G") + replacement = TestUtils.testBuilder('''new name#N1() { public void apply(int a, char b) {} }.apply(argument#A1..) ; new name#N2() { public void apply() {} }.apply()''', + bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + assertTrue(replacement.forall[it instanceof ExpressionStatement] && replacement.forall[(it as ExpressionStatement).expression instanceof MethodInvocation]) + replacementMethodInvocations = replacement.map[(it as ExpressionStatement).expression as MethodInvocation] + for(var int i = 0; i < replacementMethodInvocations.size; i++) { + assertEquals(sourceMethodInvocations.get(i).toString, replacementMethodInvocations.get(i).toString) + } + } +} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/PatternMatcherTests.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/PatternMatcherTests.xtend new file mode 100644 index 0000000..c72fccc --- /dev/null +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/PatternMatcherTests.xtend @@ -0,0 +1,242 @@ +package hu.elte.refjava.lang.tests.api + +import hu.elte.refjava.lang.refJava.Visibility +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider +import java.util.List +import java.util.Map +import org.eclipse.jdt.core.dom.ClassInstanceCreation +import org.eclipse.jdt.core.dom.Expression +import org.eclipse.jdt.core.dom.ExpressionStatement +import org.eclipse.jdt.core.dom.FieldDeclaration +import org.eclipse.jdt.core.dom.MethodDeclaration +import org.eclipse.jdt.core.dom.MethodInvocation +import org.eclipse.jdt.core.dom.SingleVariableDeclaration +import org.eclipse.jdt.core.dom.Type +import org.eclipse.jdt.core.dom.TypeDeclaration +import org.eclipse.jdt.core.dom.VariableDeclarationStatement +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.extensions.InjectionExtension +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.^extension.ExtendWith + +@ExtendWith(InjectionExtension) +@InjectWith(RefJavaInjectorProvider) +package class PatternMatcherTests { + + Map nameBindings = newHashMap + Map typeBindings = newHashMap + Map> parameterBindings = newHashMap + Map visibilityBindings = newHashMap + Map> argumentBindings = newHashMap + String typeRefString = null + + @Test + def void variableDeclarationMatcherTest() { + // #1 + TestUtils.testMatcher('''type#T1 name#N1 ; type#T2 name#N2 ;''', + ''' + class A { + void f(){ + int a; + char b; + } + } + ''', + "block", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + + // #2 + val compUnit = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }") + val methodBody = ((compUnit.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body.statements + nameBindings.put("N1", "a") + nameBindings.put("N2", "b") + typeBindings.put("T1", (methodBody.head as VariableDeclarationStatement).type ) + typeBindings.put("T2", (methodBody.last as VariableDeclarationStatement).type ) + TestUtils.testMatcher('''type#T1 name#N1 ; type#T2 name#N2 ;''', + ''' + class A { + void f(){ + int a; + char b; + } + } + ''', + "block", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + + // #3 + typeRefString="int|char|java.lang.String|" + TestUtils.testMatcher('''int a ; char b ; String c ;''', + ''' + class A { + void f(){ + int a; + char b; + String c; + } + } + ''', + "block", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + } + + @Test + def void fieldDeclarationMatcherTest() { + // #1 + TestUtils.testMatcher('''visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;''', + ''' + class A { + public int a; + private char b; + } + ''', + "class", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + + // #2 + val compUnit = TestUtils.getCompliationUnit("class A { public int a; private char b; }") + val fieldDeclarations = (compUnit.types.head as TypeDeclaration).bodyDeclarations + nameBindings.put("N1", "a") + nameBindings.put("N2", "b") + typeBindings.put("T1", (fieldDeclarations.head as FieldDeclaration).type ) + typeBindings.put("T2", (fieldDeclarations.last as FieldDeclaration).type ) + visibilityBindings.put("V1", Visibility.PUBLIC) + visibilityBindings.put("V2", Visibility.PRIVATE) + TestUtils.testMatcher('''visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;''', + ''' + class A { + public int a ; + private char b; + } + ''', + "class", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + + // #3 + typeRefString = "int|char|" + TestUtils.testMatcher('''public int a ; private char b ;''', + ''' + class A { + public int a ; + private char b; + } + ''', + "class", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + } + + @Test + def void methodDeclarationMatcherTest() { + // #1 + TestUtils.testMatcher('''visibility#V1 type#T1 name#N1(parameter#P1..) {} ; visibility#V2 type#T2 name#N2(parameter#P2..) {} ;''', + ''' + class A { + public void f(int a, String str) {} + private int g() {} + } + ''', + "class", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + + // #2 + val compUnit = TestUtils.getCompliationUnit("class A { public void f(int a, String str) {} private int g() {} }") + val methodDeclarations = (compUnit.types.head as TypeDeclaration).bodyDeclarations + nameBindings.put("N1", "f") + nameBindings.put("N2", "g") + typeBindings.put("T1", (methodDeclarations.head as MethodDeclaration).returnType2 ) + typeBindings.put("T2", (methodDeclarations.last as MethodDeclaration).returnType2 ) + visibilityBindings.put("V1", Visibility.PUBLIC) + visibilityBindings.put("V2", Visibility.PRIVATE) + parameterBindings.put("P1", (methodDeclarations.head as MethodDeclaration).parameters) + parameterBindings.put("P2", (methodDeclarations.last as MethodDeclaration).parameters) + + TestUtils.testMatcher('''visibility#V1 type#T1 name#N1(parameter#P1..) {} ; visibility#V2 type#T2 name#N2(parameter#P2..) {} ;''', + ''' + class A { + public void f(int a, String str) {} + private int g() {} + } + ''', + "class", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + + // #3 + typeRefString = "void|int|java.lang.String|int|" + TestUtils.testMatcher('''public void f(int a, String str) {} ; private int g() {} ;''', + ''' + class A { + public void f(int a, String str) {} + private int g() {} + } + ''', + "class", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + } + + @Test + def void methodInvocationAndConstructorCallMatcherTest() { + // #1 + TestUtils.testMatcher('''new name#N1() { visibility#V1 type#T1 name#N2(parameter#P1..) {} }.name#N2(argument#A1..)''', + ''' + class A { + void f() { + new F() { + public void apply(int a) {} + }.apply(a); + } + public int a = 1; + } + ''', + "block", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + + // #2 + val compUnit = TestUtils.getCompliationUnit("class A { public void f() { new F() { public void apply(int a, char b) {} }.apply(a, b); } int a = 1; char b = 'a'; }") + val methodInvocation = (((compUnit.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body.statements.head as ExpressionStatement).expression as MethodInvocation + val method = (((((compUnit.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body.statements.head as ExpressionStatement) + .expression as MethodInvocation) + .expression as ClassInstanceCreation) + .anonymousClassDeclaration.bodyDeclarations.head as MethodDeclaration + nameBindings.put("N1", "F") + nameBindings.put("N2", "apply") + typeBindings.put("T1", method.returnType2) + visibilityBindings.put("V1", Visibility.PUBLIC) + parameterBindings.put("P1", method.parameters) + argumentBindings.put("A1", methodInvocation.arguments) + TestUtils.testMatcher('''new name#N1() { visibility#V1 type#T1 name#N2(parameter#P1..) {} }.name#N2(argument#A1..)''', + ''' + class A { + void f() { + new F() { + public void apply(int a, char b) {} + }.apply(a, b); + } + int a = 1; + char b = 'a'; + } + ''', + "block", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + + // #3 + typeRefString = "void|int|char|" + TestUtils.testMatcher('''new F() { public void apply(int a, char b) {} }.apply(argument#A1..)''', + ''' + class A { + void f() { + new F() { + public void apply(int a, char b) {} + }.apply(a, b); + } + } + int a = 1; + char b = 'a'; + ''', + "block", + nameBindings , typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + } + + + + +} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/TestUtils.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/TestUtils.xtend new file mode 100644 index 0000000..6217535 --- /dev/null +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/api/TestUtils.xtend @@ -0,0 +1,52 @@ +package hu.elte.refjava.lang.tests.api + +import hu.elte.refjava.api.patterns.ASTBuilder +import hu.elte.refjava.api.patterns.PatternMatcher +import hu.elte.refjava.api.patterns.PatternParser +import hu.elte.refjava.lang.refJava.Visibility +import java.util.List +import java.util.Map +import org.eclipse.jdt.core.dom.AST +import org.eclipse.jdt.core.dom.ASTParser +import org.eclipse.jdt.core.dom.CompilationUnit +import org.eclipse.jdt.core.dom.Expression +import org.eclipse.jdt.core.dom.MethodDeclaration +import org.eclipse.jdt.core.dom.SingleVariableDeclaration +import org.eclipse.jdt.core.dom.Type +import org.eclipse.jdt.core.dom.TypeDeclaration + +import static org.junit.jupiter.api.Assertions.* +import org.eclipse.jdt.core.dom.ASTNode + +class TestUtils { + + def static getCompliationUnit(String str) { + val parser = ASTParser.newParser(AST.JLS12); + parser.setUnitName("test.java"); + parser.setEnvironment(null, null, null, true); + parser.resolveBindings = true + parser.source = str.toCharArray + val newCompUnit = parser.createAST(null) as CompilationUnit + newCompUnit + } + + def static void testMatcher(String patternString, String sourceString, String declarationSource, Map nameBindings, Map typeBindings, Map> parameterBindings, Map visibilityBindings, Map> argumentBindings, String typeRefString) { + val matcher = new PatternMatcher(null) + val pattern = PatternParser.parse(patternString) + val source = TestUtils.getCompliationUnit(sourceString) + val matchings = if(declarationSource == "block") { + ((source.types.head as TypeDeclaration).bodyDeclarations.head as MethodDeclaration).body.statements + } else if(declarationSource == "class") { + (source.types.head as TypeDeclaration).bodyDeclarations + } + assertTrue(matcher.match(pattern, matchings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString)) + } + + def static testBuilder(String patternString, Map> bindings, Map nameBindings, Map typeBindings, Map> parameterBindings, Map visibilityBindings, Map> argumentBindings, String typeRefString) { + val builder = new ASTBuilder(null) + val pattern = PatternParser.parse(patternString) + val source = TestUtils.getCompliationUnit("") + builder.build(pattern, source.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString) + } + +} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.xtend new file mode 100644 index 0000000..b47ee03 --- /dev/null +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.xtend @@ -0,0 +1,297 @@ +package hu.elte.refjava.lang.tests.compiler + +import org.junit.jupiter.api.^extension.ExtendWith +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.extensions.InjectionExtension +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider +import com.google.inject.Inject +import org.eclipse.xtext.xbase.testing.CompilationTestHelper +import org.junit.jupiter.api.Test + +@ExtendWith(InjectionExtension) +@InjectWith(RefJavaInjectorProvider) +class RefJavaCompilerTests { + + @Inject extension CompilationTestHelper + + @Test + def void compileSchemeTypes() { + ''' + package file.test; + + local refactoring localTest() + nothing + ~~~~~~~ + nothing + + block refactoring blockTest() + nothing + ~~~~~~~ + nothing + + lambda refactoring lambdaTest() + nothing + ~~~~~~~ + nothing + + class refactoring classTest() + nothing + ~~~~~~~ + nothing + '''.assertCompilesTo(''' + MULTIPLE FILES WERE GENERATED + + File 1 : /myProject/./src-gen/file/test/blockTest.java + + package file.test; + + import hu.elte.refjava.api.BlockRefactoring; + + @SuppressWarnings("all") + public class blockTest extends BlockRefactoring { + public blockTest() { + super("nothing", "nothing"); + } + } + + File 2 : /myProject/./src-gen/file/test/classTest.java + + package file.test; + + import hu.elte.refjava.api.ClassRefactoring; + + @SuppressWarnings("all") + public class classTest extends ClassRefactoring { + public classTest() { + super("nothing", "nothing"); + } + } + + File 3 : /myProject/./src-gen/file/test/lambdaTest.java + + package file.test; + + import hu.elte.refjava.api.LambdaRefactoring; + + @SuppressWarnings("all") + public class lambdaTest extends LambdaRefactoring { + public lambdaTest() { + super("nothing", "nothing"); + } + } + + File 4 : /myProject/./src-gen/file/test/localTest.java + + package file.test; + + import hu.elte.refjava.api.LocalRefactoring; + + @SuppressWarnings("all") + public class localTest extends LocalRefactoring { + public localTest() { + super("nothing", "nothing"); + } + } + + ''') + } + + @Test + def void compileSchemeWithTargetClosure() { + ''' + package test; + + block refactoring test() + nothing + ~~~~~~~ + nothing + target + nothing + ''' + .assertCompilesTo( + ''' + package test; + + import hu.elte.refjava.api.BlockRefactoring; + + @SuppressWarnings("all") + public class test extends BlockRefactoring { + public test() { + super("nothing", "nothing"); + } + + @Override + protected boolean safeTargetCheck() { + return super.targetCheck("nothing"); + } + } + ''') + } + + @Test + def void compileSchemeWithPrecondition() { + ''' + package test; + + local refactoring test() + nothing + ~~~~~~~ + nothing + when + precondition + isSingle(target) + && true == true + ''' + .assertCompilesTo( + ''' + package test; + + import hu.elte.refjava.api.Check; + import hu.elte.refjava.api.LocalRefactoring; + + @SuppressWarnings("all") + public class test extends LocalRefactoring { + public test() { + super("nothing", "nothing"); + } + + private boolean instanceCheck() { + return (Check.isSingle(bindings.get("target")) && (true == true)); + } + + @Override + protected boolean check() { + return super.check() && instanceCheck(); + } + } + ''') + } + + @Test + def void compileSchemeWithAssignments() { + ''' + package test; + + local refactoring test() + nothing + ~~~~~~~ + nothing + when + assignment + name#N = "TEST" ; + type#T = type(target) ; + visibility#V = visibility(target) ; + parameter#P = parameters(target) + + ''' + .assertCompilesTo( + ''' + package test; + + import hu.elte.refjava.api.Check; + import hu.elte.refjava.api.LocalRefactoring; + import hu.elte.refjava.lang.refJava.Visibility; + import java.util.List; + import org.eclipse.jdt.core.dom.SingleVariableDeclaration; + import org.eclipse.jdt.core.dom.Type; + + @SuppressWarnings("all") + public class test extends LocalRefactoring { + public test() { + super("nothing", "nothing"); + } + + private String valueof_name_N() { + return "TEST"; + } + + private void set_name_N() { + nameBindings.put("N", valueof_name_N()); + } + + private Type valueof_type_T() { + Type _type = Check.type(bindings.get("target")); + return _type; + } + + private void set_type_T() { + typeBindings.put("T", valueof_type_T()); + } + + private List valueof_visibility_V() { + Visibility _visibility = Check.visibility(bindings.get("target")); + return _visibility; + } + + private void set_visibility_V() { + visibilityBindings.put("V", valueof_visibility_V()); + } + + private List valueof_parameter_P() { + List _parameters = Check.parameters(bindings.get("target")); + return _parameters; + } + + private void set_parameter_P() { + parameterBindings.put("P", valueof_parameter_P()); + } + + protected void setMetaVariables() { + set_name_N(); + set_type_T(); + set_visibility_V(); + set_parameter_P(); + + super.matchingTypeReferenceString = ""; + super.replacementTypeReferenceString = ""; + super.targetTypeReferenceString = ""; + super.definitionTypeReferenceString = ""; + } + } + ''') + } + + @Test + def void compileSchemeWithTypeRefStrings(){ + ''' + package test; + + class refactoring test() + int a ; char b ; + ~~~~~~~~~~~~~~ + double c ; long d ; String e ; + target + public void f(boolean b) { } + definition + byte b ; short s ; + + ''' + .assertCompilesTo( + ''' + package test; + + import hu.elte.refjava.api.ClassRefactoring; + + @SuppressWarnings("all") + public class test extends ClassRefactoring { + public test() { + super("int a ; char b ;", "double c ; long d ; String e ;"); + } + + protected void setMetaVariables() { + super.definitionString = "byte b ; short s ;"; + + super.matchingTypeReferenceString = "int|char|"; + super.replacementTypeReferenceString = "double|long|java.lang.String|"; + super.targetTypeReferenceString = "void|boolean|"; + super.definitionTypeReferenceString = "byte|short|"; + } + + @Override + protected boolean safeTargetCheck() { + return super.targetCheck("public void f(boolean b) { }"); + } + } + ''') + } +} \ No newline at end of file diff --git a/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.xtend b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.xtend new file mode 100644 index 0000000..ac56b10 --- /dev/null +++ b/hu.elte.refjava.lang.tests/src/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.xtend @@ -0,0 +1,164 @@ +package hu.elte.refjava.lang.tests.parser + +import com.google.inject.Inject +import hu.elte.refjava.lang.refJava.AssignmentList +import hu.elte.refjava.lang.refJava.File +import hu.elte.refjava.lang.refJava.MetaVariableType +import hu.elte.refjava.lang.refJava.PBlockExpression +import hu.elte.refjava.lang.refJava.PConstructorCall +import hu.elte.refjava.lang.refJava.PExpression +import hu.elte.refjava.lang.refJava.PFeatureCall +import hu.elte.refjava.lang.refJava.PMemberFeatureCall +import hu.elte.refjava.lang.refJava.PMetaVariable +import hu.elte.refjava.lang.refJava.PMethodDeclaration +import hu.elte.refjava.lang.refJava.PNothingExpression +import hu.elte.refjava.lang.refJava.PReturnExpression +import hu.elte.refjava.lang.refJava.PTargetExpression +import hu.elte.refjava.lang.refJava.PVariableDeclaration +import hu.elte.refjava.lang.refJava.Pattern +import hu.elte.refjava.lang.refJava.SchemeInstanceRule +import hu.elte.refjava.lang.refJava.SchemeType +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.extensions.InjectionExtension +import org.eclipse.xtext.testing.util.ParseHelper +import org.eclipse.xtext.xbase.XExpression +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.^extension.ExtendWith + +import static org.junit.jupiter.api.Assertions.* + +@ExtendWith(InjectionExtension) +@InjectWith(RefJavaInjectorProvider) +class RefJavaParsingTests { + + @Inject extension ParseHelper parseHelper + + @Test + def void parseFile() { + val file = ''' + package file.test; + '''.parse + + assertTrue(file instanceof File) + assertEquals(file.name, "file.test") + } + + @Test + def void parseAllSchemeTypes() { + val file = ''' + package file.test; + local refactoring localTest() + nothing + ~~~~~~~ + nothing + + block refactoring blockTest() + nothing + ~~~~~~~ + nothing + + lambda refactoring lambdaTest() + nothing + ~~~~~~~ + nothing + + class refactoring classTest() + nothing + ~~~~~~~ + nothing + '''.parse + + assertTrue(file.refactorings.forall[it instanceof SchemeInstanceRule]) + assertEquals((file.refactorings.get(0) as SchemeInstanceRule).type, SchemeType.LOCAL) + assertEquals((file.refactorings.get(0) as SchemeInstanceRule).name, "localTest") + assertEquals((file.refactorings.get(1) as SchemeInstanceRule).type, SchemeType.BLOCK) + assertEquals((file.refactorings.get(1) as SchemeInstanceRule).name, "blockTest") + assertEquals((file.refactorings.get(2) as SchemeInstanceRule).type, SchemeType.LAMBDA) + assertEquals((file.refactorings.get(2) as SchemeInstanceRule).name, "lambdaTest") + assertEquals((file.refactorings.get(3) as SchemeInstanceRule).type, SchemeType.CLASS) + assertEquals((file.refactorings.get(3) as SchemeInstanceRule).name, "classTest") + } + + + @Test + def void parseSchemeProperties() { + val file = ''' + package file.test; + local refactoring test() + nothing + ~~~~~~~ + nothing + target + nothing + definition + nothing + when + assignment + name#test = "TEST" + precondition + true + '''.parse + + val refactoring = file.refactorings.head as SchemeInstanceRule + + assertTrue(refactoring.matchingPattern instanceof Pattern) + assertTrue(refactoring.replacementPattern instanceof Pattern) + assertFalse(refactoring.targetPattern === null) + assertTrue(refactoring.targetPattern instanceof Pattern) + assertFalse(refactoring.definitionPattern === null) + assertTrue(refactoring.definitionPattern instanceof Pattern) + assertFalse(refactoring.assignments === null) + assertTrue(refactoring.assignments instanceof AssignmentList) + assertFalse(refactoring.precondition === null) + assertTrue(refactoring.precondition instanceof XExpression) + } + + @Test + def void parsePatternExpressions() { + val file = ''' + package file.test; + local refactoring test() + #s ; target ; return ; nothing ; { } ; public int a ; public void f() { } ; method() ; A.method() ; new F() { } + ~~~~~~~ + nothing + '''.parse + + val pattern = (file.refactorings.head as SchemeInstanceRule).matchingPattern + assertFalse(pattern.patterns === null) + assertTrue(pattern.patterns.forall[it instanceof PExpression]) + + val patterns = pattern.patterns + assertTrue(patterns.get(0) instanceof PMetaVariable) + assertTrue(patterns.get(1) instanceof PTargetExpression) + assertTrue(patterns.get(2) instanceof PReturnExpression) + assertTrue(patterns.get(3) instanceof PNothingExpression) + assertTrue(patterns.get(4) instanceof PBlockExpression) + assertTrue(patterns.get(5) instanceof PVariableDeclaration) + assertTrue(patterns.get(6) instanceof PMethodDeclaration) + assertTrue(patterns.get(7) instanceof PFeatureCall) + assertTrue(patterns.get(8) instanceof PMemberFeatureCall) + assertTrue(patterns.get(9) instanceof PConstructorCall) + } + + @Test + def void parseMetaVariables() { + val file = ''' + package file.test; + local refactoring test() + #s ; name#n ; type#t ; visibility#v ; argument#a.. ; parameter#p.. + ~~~~~~~ + nothing + '''.parse + + val patterns = (file.refactorings.head as SchemeInstanceRule).matchingPattern.patterns + assertTrue(patterns.forall[it instanceof PMetaVariable]) + + assertEquals((patterns.get(0) as PMetaVariable).type, MetaVariableType.CODE) + assertEquals((patterns.get(1) as PMetaVariable).type, MetaVariableType.NAME) + assertEquals((patterns.get(2) as PMetaVariable).type, MetaVariableType.TYPE) + assertEquals((patterns.get(3) as PMetaVariable).type, MetaVariableType.VISIBILITY) + assertEquals((patterns.get(4) as PMetaVariable).type, MetaVariableType.ARGUMENT) + assertEquals((patterns.get(5) as PMetaVariable).type, MetaVariableType.PARAMETER) + } +} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace deleted file mode 100644 index 025acd7cc1f2386a692f028c5f45c9be58cff372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12630 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 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin deleted file mode 100644 index 90885dce2bae06b3206307971cc22421620624ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6476 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 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace deleted file mode 100644 index 98e66ef3716d56d80a4b4a2decfe078ae0e82aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5294 zcmZXXdvH|s70377n|pV&A#pbwh#L|hfjl+Y1VRi6=#i%pd8I<4*Ei)?Ev5b%EKnrxrl(tBFe&_tw z-A(!LbH1N*eviA{3oe(-0LYDjNVv3-r2QY?jo|9vc3)_EW_CJs&-5MJC+8+ZGn2dS z49!m8J9}@)nVg-SzGqi@a&~Il^gUmZwVvIx)4R56k=9ISP{a#kTvd_2U@!>UNIu~6 zxghe@6%7qY_h0MxBmJPRu@TiD*VWb{y)3MzCdA*h*VVZyBClOjB#6A@A$rw=8ARR- zHZ|dxqd_D+@?L@&WfPTtntrgUr(g(Z7N#SKgC;l>Q2BAi-%9ird*&9y6B6;a1nvj(xr z2nMmUlpwlgC1ouuF@xxyaAj*3s$uJ!!4>G1vk~1RQmw6^h2tXH(14To7_F_SGeYzs z52FV|h(0z!$2!lgXs)CvDVsM;p;`k#B3mCBG}2<;!u& z<3?K>F3AYdKe!p)7((>4ut`2BY-Bxp+Dqv{FQuPsB098*vQGj`0m?3SQsd!HNwE%b zuDuf%{YXsXZ$(FbzP$riJuhySznw4ng2)va{R^9v9&K+&{lcJ1885aL5#@`ugvl0i zuNu^vGl~SU@w)bQX;xDil(fJ@YAE3T^KlRP~ ziv+Q=9i8&h`I7b6*%gF*$9n9qwVj=~(_X%{QUcrMkr`jVrijl3cBPm4!t#WgT}fty z2<)J>v#SfVNJ`u<|1#TatjR9?{VUe(HC2pNn1UU$wve3{JCJodRLv+~5=aKQc}ZaR zdy1r$5!f58IE52p3SFWXG9uV zPsF^G&Uh(xM3`_+gei3bi~&lgLe%>05Ya)gzi%xr`^o@*LiEHz5$)^4WfxlI7ljei zg<8TREfl^lKSg@t4WmeqI9k`&C(UZgjxJ$xGqJfK2@=QMyo4mJj39B+L)jlq%1)X^ zf@DR*TDeo&nw~U$YuDmN&-kQSMv$yGDdSxih;|LhHP+m^bvWjd*eAbN$&j^u9sVE` z>&Z|RV-=>59I_^)9dn6UWIZ`l%_zT-NQQJ{E=iEQ$x|e)j38-SSqeR323>E`HW}qN z6Ow73TEkP*Je3HNIi5UA znzB}&SW7OB;OMWQj@Hn9Uzq{RmUn3q+0sP z%#)c~-%O^W1e-*V8XqF_b~d-Sld0%oHi;nh1YRLNwO#UGHjw&7xM^S$KBot*S37!K z6{*9<4L2Zu$B^HYGJ@2RCdv*pVFsx)BYzs)i0X^h#+7su?{@2DxuYg7lQ9NLm>|dWV&z@R*oE*PGs9GMdzRH%~pmQ}5=fM3A22 zsYF^CL3(c^?dDVi?PhN!%{*0!q@_y<(vJiv`^Zn(BmN>m`k7vua!H<8OTW}anWESD zHi#g7yhoaGVDrz*rCFfAk;w$8eldy5CmUXUoz*UhsWeEI(g*1J}7BOT# zT&nWiQv6&&=8JGbSR#fEU$frq8*pj=S1~eQh&#}+aMfMnHvCvsWWF$D0h_o0W16Q> z@Sp%=OGI9^>=t>f=wnN2l(D;pj0O=`h5aH$S)#{t&&K~J|--xY!eTN5ix=r zIU(-D7iz`WHbWM0BV2&7o$f-xjRK6#i5b;$O3YwIADi21) zRX?$|h{0LyQTc?4zUHhpOBtN}u!zvHALso{7^Mu(RJUY#WO+i}nQBl>2h^QupYmsX zG{2m|nKMJwM7ih6)UcU--{{i@H$t_Lcx?1 zvRYwya))$cT@R%q4a)()8Vg5-uUt7eGT}JESC7hCH*0ReA zcR&o;HN9%yr<~u=r1q=WF8IWd-O{7{zq7w>x$+gy6?|gIJ}eTd;VL&gHJ}<4zg}n{ whU`22>?ghKpJ`^lz?YQI3^{#B`OC=9Eo)c4;@*N!47nTW!a+;681jMq4~CHT5&!@I diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin deleted file mode 100644 index adbd320b68d766bf18843503b6ab48f78eae68a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4973 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 Jxs-ob{{u{|Dpmjh diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace index 6b5705648ef7c8b3765fe60192eb5f02a53c6787..ec3ab882b148c3eebc1bf87f85043bec1a9e4dd6 100644 GIT binary patch delta 85 zcmbQp(a$Kvz`(%D$mqD2QGkKT;h{qc7vDr7XDdf7he_Q0FcAh8M>9!oZbl}Dx58Xp h42+Jkay&eYOpd$~+}uFk5@9|*1|~-xVICd^MgW)J4U7N) literal 1041 zcmZwFJ!lhQ7zgn8xy$9+7Gf4fQz{jiT)mRMmaBf^@ zf+bJKRVLbx-8wbLae}|DiLtFqOkr3c=aT<^4g_DLR`mE+v^{C@G)!r}_ftk#a0yNZ@QoDO=6? z$8olUTtVu4HcB&(_U+~i1>Col!$%aI-Eg6R8@9qIaJm}liAGs>jBAXtJ(;v4qXcJA z;CwNcibWjy(wLZFf-7Z7-4sf6C6z12B^Qghuq*S*0fDP1l)Vj6ri6|KZi;6gd0&cW zByg+sGe!m1@0(ZCX(qWBy*B~j&fnWXa53<}&|Scy}z zROyZA;>ct@fOgLgrz J`0qwHgg-;?xJm#3 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin index 2d8b8fa3c930e63dc0ac5395d0b82306a22735e7..40d181dd44aebb5f65f38749f54f8880654ad491 100644 GIT binary patch delta 1954 zcmZ8iXHb)g7X73~63Rl*m7)+rq}K(40Yt60mw5XE8n1)u;31Oi%v zsZR9N7n6ueTY}$TOR8A2%bt{NE%oHr%f^nap0oYN zfAFU(%2~nbHqmu^IX}Nn|39-QE%$H4Ro}pk#fDcpM$be=L_}x_DB3AAQW>AoBGcUN zr!4)-_5&nOkt&qQv8(`tpmyFCV!5sNbBq@C$jASxUcKVNzmRX+QAaIzBF1IL+vxab zpHMC}pbWoRi9VLZRi@O=FA3KPVW7(Nh#t!FVqG}(CQ9LLRUJN5vNv_$6sZy~FD7wo zCT>M+U4+vO8Y4x)of92R+JjMa^tF(%-CNRBd>#ca<^52_*PELuap&WOzh0Y}c^IgZ z=O?T^dV~G;_H^j4zS(s=azEAVRN!NQ>6s(z(Y$ zH$r}Fm>4vq;a$oU!TJ?%)HCkKJ6}b6leb&QA~rsJQyLIVnde>(!l23>(LlBAHpI{* z37@_a=_O71;9@>!bI&sj#fyogVyhk5&8-xuB!<;&MQIbB4vKqtTsGD^dzr`gf^_Mls3b4^~s* z?ysjVjfNwf^yZ3+IA3ajal||K97zp?a;B=*%N|x+#_U<7#`qmJXC%*)=&NQva1-I( z_VS%)d};R@&b_V$$EP{y;ySrz(&6hiLd9}ZmUmdzQgh)SxFhtYx{)@YlOj@tKyQLKo?z=AsNv^Vvq@eT zui+TQ^d5`8JD9~_U*F#Ub8VL!)B1yEjIMJklhumMvVky+E$+V*DsfmzEJ!fqD6m4~ zA#Q0_tEtff1%(OZRxcAxsT{TV?cFQun{SsY3F$mc2fVgkmGq$ zn*2X#SO5bgBx*FJWYiSE4GvkF_1{4VED@vOAiH;yu!1C+-E_L*bd4U6{2+M?5gD1@ zl~}@k6}7uWDCjZ+{{Sbcnhob(WD!$0GzMFKOOe#B2qN1xxT(z=?)LXg1n^x?+t@0c zFilC#bawfz)#W3`9=$4G#a`uy6?S}&U)gv5Ts%aXaAEhE_DN;?AuA`1Y8~=ml`gEl z=ki0unu;uA!2lxd2W)hqJ+)+a6)Y8y!g_Y_b&vOD^sCb$06?XgX3qQC=P#(TJs~7cr=E; zoKjvWxoP?^mKOHdCyD#L@Xb*0FTEmyx5a;{SLjKsFQUfHzy2^0CWnbxs+nvFsTj+( z;Euv6{JOIKQmFj%!2PV#!)888@^0#c%i`*oB)=iK-KTTk&is_IC*>A@@u7^zh5ld0 z?jrJJ_l?}d21d#S6Lq?VeRVxt|M$_e`r0T1wh|rLZA53zBzUHqk0gGufu!3*-lg{U zKV!2GE~!4dBz*~T8)S+bf3e&ocKQUC(Kp1L>0v&g73EFm=3UG7oatw}X4~huJ<2Mg zIoNxxF##c-oVf+SdhVs7MXVrrB@C=HeaJ4@Uj;TrH|5o=9X1>+)W8n+wje>xhRB8) z^vG7lvxtV7yacp2LtLd}uqxXL ziDOmIRq#3&oBsHqsH?5r0jIXsoDzeCQGwLdL)H>s0*ZlD`a(% zTY5BoY!`Ei8NNs(oedup(A7|SkD`=D^-^WHx^NDPB8{Yp$|4Qv`TUaJ&wwlwMrkvX zv&Sfn>f~53N(GsmCydghPR=7n;nmKcKNbc}N?SPNjsZY6|Ihsx9~AgE6LCjv1wzY* zs45&LCGIFoP~d1S^U3Zm40PtTa%Yu6V delta 3252 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 P2}3pz!gt}`Kk9z~4afcn diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.java._trace deleted file mode 100644 index be78925570d28f6a1808985911c002a717c02b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 775 zcmY+CziSjh6vy|??%uewzh>`;0TJ(nh!7IDJ`kKYAc)um45U5C`imolw;m~st!0A$ zf>o@96jmwHSy-fto!D4tBif`1@y%Njv(3VX&-=db%&?y4g#h+1EO^3vz+4vKEj@cx zR@1sFUsg|EOy-kvI@x?$*43<@m5=GWRzIK4?rhc7=7um|?X@dc&$FIy&Quf;epFI= zfEj*Q1Hwb|C(6ALuWO|)5OBH2_@ze~zUUoI4-_ zfpkWfI|z8Pa0dZA>@W>FM50B2M>n&Ka-$n@>;-rvvy4VYl1Q`&@VLkBwk8MoGvwSj zWIDN(=d=Y!NkUsrWS&zTC6QnGvb#)Rjb^v4dD5tc+$)297-~&h-iA!C yhlT6o2H(EXML~VLE+<+9b|+@X?c$uao1LGMZkKZJ6Zfw6GJ!qr_WKwA2>b&m7I#ko diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.TestUtils.xtendbin deleted file mode 100644 index 5ccd552244fbf6ff3767d48fe9c0390eafe81311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2595 zcmaKuc|6qH8^^!MK9(%mcL`0*wUlJ9v1GY3V`MCem{7J5vVZ6f-!B;L7aWv(<(BQFsZef+eV*^T#oTy-%U)Sk+SaGp-#2T1dxLS(g=9cx zj}Ha!xt(bk66holHAbRGqNj;jXC#zFJxzB}#7_phQ$g!{h9`C(@ATQR6fM4QM^KBd ztZZ(+LEj?@Qm0VcPWH*r>1ARK`ilN{_k4Dcc31($L`w78hK`BXoZska8i4_$I+hY_ z-g?S9Ef%+iDhwi|cS0L+7{*Bph>7LJw-kcia7A4Nb3MmBZSBW0iEffDyUQ`9Qa4$? zy<^jz{BHd9R7$~z7cLt81Ke+;N5d!DV-C>VgWUEaR~Po0T>Z}RPJf=uZt*Tka1&3s zpJ7L?a`Sz?wv)s~rEKlXIUJLa&yh1(&KFZ?o`cL9_kQuF(0c1gU~#>-)STQc``D%LqB|;g-mWmCV)(q*lR| z$|qfJRoM*yiG{2>3N*;trZjty6`{`4GHrK&mw5SDwg70wLy2?6KjMaBzi0O(=k>!m z8K^8$f<5<-1P4cIpgs;WY6GD%zgBL{uFI=b3_EllI=+;0;7m+?jBGs1!;D;8P~Q@z z88@s8T68Ban;T7X+xcvDa;aI`99U$nr3EXPl~EfzPPM>7H;jH#q)0yYD)~5s#glY%a1AYl}w6&MjXq0xB`Onjk#$GL9>fI zE*K+X^uymEhW=by5WFdd-}Z{;vaRX}xDX4MOZimjK-SJEmX-Ko zQsF>D)BS;O$R@igiii>A+`}Qog{N0zWeF2+q&HRxGju_lc471DN zL}XEpAS1dm3Ljod0K)?K$0dU5U0p86M5S9JCDNhTd!#?mHM1d2NFl!S?!_sedn9UB zUp?`eQXyzjxprfd&Cd-prk!BqcKGSCWj4%!aK62)V}17RK_8LHILS-Ftt+@9rQ2-I zo4kB&1bn(pDDUq3JcU_xW75n_8(8&$Rd%rx)`f{!Bs;_?d79k-o^t6Q_>B8*!yhdFHO|N!W6JEcTIzobIGe zYuvO=Vd1m;ao7#Nk3Ez)k(Qvs}&{7`+J>V?yW~1 zV6D3URGrfB?-r)O`W!*KWo)w3laBGY1e>u6qO z%}Hqg97MfsEAxOr;qHJR{v&NF4*;C1qr?1O6v?{v-!z5LAsi{ysJNf+EcQ#N`@u>c!yT0YtzP_c+ zXSLmFt;w_~a3$?tCf}%6x;_g|g(jmeVb*(QaX$x0w85;WcQJ~zzD3B#Mu&?IHyp^e zT;P5wF$%Lc#Cl0sJ05!>u9(N{y7T9@+LX90yu7b*h_G@(IWFhY?AbKSCcz)bA!+J<`U!RJoc1gB5mkHe{@#8WbnTMwm#1^0nzizpWIqE99U zukMjsy4JeUxsms<&)rw5lFWt-i}|b(i%YTqyTL9ZPG#zS4hw0332q0oy=OqHU2ZK5 zZnR`+VkczFY5r|$I4|-uVR`Grqbg$OXh(2e5@G=WE6)E{RX;y?x1b<@cW<|!#T4YU zl^5I6mSn7Vx(N(#XjarT8$P9}enGoOp-JcExhB$l%(Yab*RgafP%0cWg{4w!dwPCA zRcfKaP!NVgA4aQNZRM3dVcFI{NSf~@>M5xh|zX?&iq zU!W$}>Lkc&FTra~qej^+qj&CPBkmo1(Crv!6R_j(fhQS5c|@5S69|?@shqfIDcTGp zb2l&<4QONWl0@G(VLnetVh(j5AQWL`A7R-ni7qW}HE-$0Wy diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/ASTBuilderTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/ASTBuilderTests.java deleted file mode 100644 index 1e3bd8d..0000000 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/ASTBuilderTests.java +++ /dev/null @@ -1,127 +0,0 @@ -package hu.elte.refjava.lang.tests; - -import hu.elte.refjava.api.patterns.ASTBuilder; -import hu.elte.refjava.api.patterns.PatternParser; -import hu.elte.refjava.lang.refJava.PExpression; -import hu.elte.refjava.lang.refJava.PVariableDeclaration; -import hu.elte.refjava.lang.refJava.Pattern; -import hu.elte.refjava.lang.refJava.Visibility; -import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; -import hu.elte.refjava.lang.tests.TestUtils; -import java.util.List; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.Type; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jdt.core.dom.VariableDeclarationFragment; -import org.eclipse.jdt.core.dom.VariableDeclarationStatement; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.extensions.InjectionExtension; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.Functions.Function1; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -@ExtendWith(InjectionExtension.class) -@InjectWith(RefJavaInjectorProvider.class) -@SuppressWarnings("all") -class ASTBuilderTests { - private final ASTBuilder builder = new ASTBuilder(null); - - private Pattern pattern; - - private CompilationUnit source; - - private String typeRefString; - - private List replacement; - - @Test - public void variableDeclarationBuilderTest() { - this.pattern = PatternParser.parse("public void f() { int a ; char b ; }"); - this.source = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }"); - this.typeRefString = "void|int|char|"; - this.replacement = this.builder.build(this.pattern, this.source.getAST(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), this.typeRefString); - Object _head = IterableExtensions.head(this.source.types()); - Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); - final List variableDeclarations = ((MethodDeclaration) _head_1).getBody().statements(); - ASTNode _head_2 = IterableExtensions.head(this.replacement); - final Function1 _function = new Function1() { - public Boolean apply(final Object it) { - return Boolean.valueOf((it instanceof VariableDeclarationStatement)); - } - }; - Assertions.assertTrue(IterableExtensions.forall(((MethodDeclaration) _head_2).getBody().statements(), _function)); - PExpression _head_3 = IterableExtensions.head(this.pattern.getPatterns()); - ASTNode _head_4 = IterableExtensions.head(this.replacement); - Object _head_5 = IterableExtensions.head(((MethodDeclaration) _head_4).getBody().statements()); - Object _head_6 = IterableExtensions.head(((VariableDeclarationStatement) _head_5).fragments()); - Assertions.assertEquals(((PVariableDeclaration) _head_3).getName(), ((VariableDeclarationFragment) _head_6).getName().getIdentifier()); - PExpression _last = IterableExtensions.last(this.pattern.getPatterns()); - ASTNode _head_7 = IterableExtensions.head(this.replacement); - Object _last_1 = IterableExtensions.last(((MethodDeclaration) _head_7).getBody().statements()); - Object _head_8 = IterableExtensions.head(((VariableDeclarationStatement) _last_1).fragments()); - Assertions.assertEquals(((PVariableDeclaration) _last).getName(), ((VariableDeclarationFragment) _head_8).getName().getIdentifier()); - Object _head_9 = IterableExtensions.head(variableDeclarations); - ASTNode _head_10 = IterableExtensions.head(this.replacement); - Object _head_11 = IterableExtensions.head(((MethodDeclaration) _head_10).getBody().statements()); - Assertions.assertEquals(((VariableDeclarationStatement) _head_9).getType().toString(), ((VariableDeclarationStatement) _head_11).getType().toString()); - Object _last_2 = IterableExtensions.last(variableDeclarations); - ASTNode _head_12 = IterableExtensions.head(this.replacement); - Object _last_3 = IterableExtensions.last(((MethodDeclaration) _head_12).getBody().statements()); - Assertions.assertEquals(((VariableDeclarationStatement) _last_2).getType().toString(), ((VariableDeclarationStatement) _last_3).getType().toString()); - } - - @Test - public void fieldDeclarationBuilderTest() { - this.pattern = PatternParser.parse("int a; char b;"); - this.source = TestUtils.getCompliationUnit("class A { public int a; private char b; }"); - this.typeRefString = "int|char|"; - this.replacement = this.builder.build(this.pattern, this.source.getAST(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), this.typeRefString); - Object _head = IterableExtensions.head(this.source.types()); - final List fieldDeclarations = ((TypeDeclaration) _head).bodyDeclarations(); - final Function1 _function = new Function1() { - public Boolean apply(final ASTNode it) { - return Boolean.valueOf((it instanceof FieldDeclaration)); - } - }; - Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function)); - PExpression _head_1 = IterableExtensions.head(this.pattern.getPatterns()); - ASTNode _head_2 = IterableExtensions.head(this.replacement); - Object _head_3 = IterableExtensions.head(((FieldDeclaration) _head_2).fragments()); - Assertions.assertEquals(((PVariableDeclaration) _head_1).getName(), - ((VariableDeclarationFragment) _head_3).getName().getIdentifier()); - PExpression _last = IterableExtensions.last(this.pattern.getPatterns()); - ASTNode _last_1 = IterableExtensions.last(this.replacement); - Object _head_4 = IterableExtensions.head(((FieldDeclaration) _last_1).fragments()); - Assertions.assertEquals(((PVariableDeclaration) _last).getName(), - ((VariableDeclarationFragment) _head_4).getName().getIdentifier()); - Object _head_5 = IterableExtensions.head(fieldDeclarations); - ASTNode _head_6 = IterableExtensions.head(this.replacement); - Assertions.assertEquals(((FieldDeclaration) _head_5).getType().toString(), ((FieldDeclaration) _head_6).getType().toString()); - Object _last_2 = IterableExtensions.last(fieldDeclarations); - ASTNode _last_3 = IterableExtensions.last(this.replacement); - Assertions.assertEquals(((FieldDeclaration) _last_2).getType().toString(), ((FieldDeclaration) _last_3).getType().toString()); - } - - @Test - public void methodDeclarationBuilderTest() { - Assertions.fail("not implemented"); - } - - @Test - public void constructorCallBuilderTest() { - Assertions.fail("not implemented"); - } - - @Test - public void methodInvocationBuilderTest() { - Assertions.fail("not implemented"); - } -} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/PatternMatcherTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/PatternMatcherTests.java deleted file mode 100644 index 3c96265..0000000 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/PatternMatcherTests.java +++ /dev/null @@ -1,72 +0,0 @@ -package hu.elte.refjava.lang.tests; - -import hu.elte.refjava.api.patterns.PatternMatcher; -import hu.elte.refjava.api.patterns.PatternParser; -import hu.elte.refjava.lang.refJava.Pattern; -import hu.elte.refjava.lang.refJava.Visibility; -import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; -import hu.elte.refjava.lang.tests.TestUtils; -import java.util.List; -import org.eclipse.jdt.core.dom.Block; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.Type; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.extensions.InjectionExtension; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -@ExtendWith(InjectionExtension.class) -@InjectWith(RefJavaInjectorProvider.class) -@SuppressWarnings("all") -class PatternMatcherTests { - private final PatternMatcher matcher = new PatternMatcher(null); - - private Pattern pattern; - - private CompilationUnit source; - - @Test - public void variableDeclarationMatcherTest() { - this.pattern = PatternParser.parse("type#T1 name#N1 ; type#T2 name#N2 ;"); - this.source = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }"); - Object _head = IterableExtensions.head(this.source.types()); - Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); - final Block block = ((MethodDeclaration) _head_1).getBody(); - Assertions.assertTrue(this.matcher.match(this.pattern, block.statements(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), null)); - } - - @Test - public void fieldDeclarationMatcherTest() { - this.pattern = PatternParser.parse("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;"); - this.source = TestUtils.getCompliationUnit("class A { public int a ; private char b; } }"); - Object _head = IterableExtensions.head(this.source.types()); - final TypeDeclaration typeDecl = ((TypeDeclaration) _head); - Assertions.assertTrue(this.matcher.match(this.pattern, typeDecl.bodyDeclarations(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), null)); - } - - @Test - public void methodDeclarationMatcherTest() { - this.pattern = PatternParser.parse("visibility#V1 type#T1 name#N1() {} ; visibility#V2 type#T2 name#N2() {} ;"); - this.source = TestUtils.getCompliationUnit("class A { public void f() {} private int g() {} }"); - Object _head = IterableExtensions.head(this.source.types()); - final TypeDeclaration typeDecl = ((TypeDeclaration) _head); - Assertions.assertTrue(this.matcher.match(this.pattern, typeDecl.bodyDeclarations(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), null)); - } - - @Test - public void methodInvocationTest() { - this.pattern = PatternParser.parse("new name#N1() { visibility#V1 type#T1 name#N2() {} }.name#N3()"); - this.source = TestUtils.getCompliationUnit("class A { public void f() { new F() { public void apply() {} }.apply(); } }"); - Object _head = IterableExtensions.head(this.source.types()); - Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); - final Block block = ((MethodDeclaration) _head_1).getBody(); - Assertions.assertTrue(this.matcher.match(this.pattern, block.statements(), CollectionLiterals.newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), CollectionLiterals.newHashMap(), CollectionLiterals.>newHashMap(), null)); - } -} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java index a7a8f15..f67dfe5 100644 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java @@ -3,45 +3,13 @@ */ package hu.elte.refjava.lang.tests; -import com.google.inject.Inject; -import hu.elte.refjava.lang.refJava.File; import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.testing.InjectWith; import org.eclipse.xtext.testing.extensions.InjectionExtension; -import org.eclipse.xtext.testing.util.ParseHelper; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith(InjectionExtension.class) @InjectWith(RefJavaInjectorProvider.class) @SuppressWarnings("all") public class RefJavaParsingTest { - @Inject - private ParseHelper parseHelper; - - @Test - public void loadModel() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("Hello Xtext!"); - _builder.newLine(); - final File result = this.parseHelper.parse(_builder); - Assertions.assertNotNull(result); - final EList errors = result.eResource().getErrors(); - boolean _isEmpty = errors.isEmpty(); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("Unexpected errors:"); - String _join = IterableExtensions.join(errors, ", "); - _builder_1.append(_join); - Assertions.assertTrue(_isEmpty, _builder_1.toString()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } } diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/TestUtils.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/TestUtils.java deleted file mode 100644 index 400487e..0000000 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/TestUtils.java +++ /dev/null @@ -1,22 +0,0 @@ -package hu.elte.refjava.lang.tests; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ASTParser; -import org.eclipse.jdt.core.dom.CompilationUnit; - -@SuppressWarnings("all") -public class TestUtils { - public static CompilationUnit getCompliationUnit(final String str) { - CompilationUnit _xblockexpression = null; - { - final ASTParser parser = ASTParser.newParser(AST.JLS12); - parser.setResolveBindings(true); - parser.setSource(str.toCharArray()); - ASTNode _createAST = parser.createAST(null); - final CompilationUnit newCompUnit = ((CompilationUnit) _createAST); - _xblockexpression = newCompUnit; - } - return _xblockexpression; - } -} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..bb971f03a2eb4eed67601a2bddc0f6ea72a45454 GIT binary patch literal 12636 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..e7eba6274acf28458602b3512a71a41ca3ff7a1a GIT binary patch literal 32418 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 Syhd>M4L#brAHm&QME?)8%j#_a literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..b6852cfdbf336631ad9375f1f275d05869f9792b GIT binary patch literal 10085 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..62b83224dc10a8fe1e18440e2afc889973c15674 GIT binary patch literal 20443 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..77f0f81f7d1866febc4b66e3af6f8b18db30c5d5 GIT binary patch literal 5367 zcmZ{mdvH|c8OHZLXK&d}Hpy<*+%KEBgd`+ODj=9-a+2M%XYWt}k*TfF5(P_xAYNfC z7i+O&QEBPL5u9<-(HWeM&M;KbVXD>Eg2Slos8Ff;N0Aw(UaGZXwf6mD@(?Y(gN&R@8~@PS7F|HDf%P{hCN^%JNNkz7?uNCutW9iOJ9&L# z>%>i4Z%VAaaYJGS|Fv@KhK)B3+_rUMa-EjEEC26$BRk!|$&)REhrvj(vu(ggnUezgDCl#8`?a#@}=Bk zA2!8FOAd~8aEQ+QYSX3c5%#Bsm$bC7yl9@9EVZ&7lx%0xQ!4{4EnJ#ZQ&Z~ND5w~P zcCBbd(Kaw~msN`N)CM;ySGnQ)ffw{GFO!zC6Q#DtT3gw-zJo{BQ`>#5t(>Favco`YDctB02KiH0X< z+KJ3u4YcMOROSLg0VXn6cw#Z`68C`aZtqliNYKqaHJzQDH=ul)gUI}K5E|08X=;|9 z&sBDHv2UzWJx9|{WWF1Y$9W6ozn;>rw14gh*It#}AM0~fr9+;%a~aq2R4&ayl#WzF zyRMQoO1C$IwnUlqblfL|U2qVk=Y^o%9)fSE3ACpUzA^Fb5ucqXovA|QeO2&X)ebt) z2;Vj0J0LzgQTlsfR8EEAyQLfSyBK`i>x5LgJH6d4G_QGv=gQGi1r83>_qAN zWzG{a=fOC7o@z(ll+1EU&Eif^N!}^RdrW$sk)C#<^b_(N{vpr7PLw_(dFLhX1;a$( zg;4|^?-x@4s_yi03A`YICnfMp3A7WXU++*p)6;=2uOr^{sCY{M4UfzWG%;xoqV#{T zKywZ@+X@V#%aT6T#j0r#YG86(HJHU*f?2FO%wmpU76*~l5`@nTsyqjgH8%q7n-SK? z8eRyRNFZ;#O{fidWq9}AMvHJ_)>naW-jXkHTN;;nacuw zytZ_6fQd3AF;F}PZ6qQTfwrs)w77~%%h-uB>&CyBH^dRyv5I&PcU?FB%DgL>R~r|Y zeVHGP^!GDf)5>?8p7~9+{SIWh<)_2~}AItN>k9UlN}|4!Q&vcJBUG z^y*TVou2!ZXND+upnB0FRjJ-HdhUP^+9kNq97MS(KeSdaBBs1EM7iUM%P+T0tB{*w zI6Zf~1%%o3+{-m6?W;i>J5lb8A6j|rGGT1WosB>n#yy-nTRTIPZ?0Xkgm+RNh~`Af zFRLCJVpT2<&54wsFb)n6^RO$8ed_kh-)QU`<}13)dj7_sV31YHZ!_*j^%~=DW<9^n z4|Rqeg}| z^270)`@i9;Dzth=M=v53I{gmps|5bHlJ9XUT;8lG&u$Ozy&7nXDj_?UTut$z*n-!h@n+Et;LE@JJPU zuBk%a6SDTncH|wAsVCLc?!pnto0Pnx(sPUSv=bGcm$l!a)~-2-3NK0C4#|7nFcH6Z z6oGH`3-u%LEeYH!f$vD*J_)oF70z|Q_h1LQoRjzmW$XXh1nuD_3}YuMR>%UMQ46GE z%OEOG_Ngw#PI;Us)#G#*J7t!Wn58&JW_b;>IEab^L3BACRCx}f;uR5SXCuffEd+g@ zK;DWrp*G~Lki5?&?`p~WpXAwzifd|>FYB#Emo->>){C_lCooGkD6`m!id)3jpnO!k z3r8p0i=$Kg3G%YNl4mC>K7gZ>9mLToK00>XFbs>dtT7hn1FQ2dhxnH?k0if%if0Cm zabuiI%r5m2Rs1Yk=H*dlz4%$RVm2(VhWC z_4QG@HCE=wW6XN#)_`ITd_2HRrJeO6L+{2Dw=~?ge4_;;}JwM&y@6y4^R60>pj(ksj zrRb#-zOw&4AG0=#sq|V!S%2RR{k7?OFqPh#)<3R*?qn*Rtt$J!#5d9`rqU;6Jr@++ z$+T1pi$B+h@3vV?OQVspJ};v3XE819sV(b9Ep#W-(xFgUzcK{f$+Yx4VZ$;kej@T; GP5%c+amcU$ literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..5d77d4ef82122673325304e14e978e12eeadb243 GIT binary patch literal 5741 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 bindings = CollectionLiterals.>newHashMap(); + + private Map nameBindings = CollectionLiterals.newHashMap(); + + private Map typeBindings = CollectionLiterals.newHashMap(); + + private Map> parameterBindings = CollectionLiterals.>newHashMap(); + + private Map visibilityBindings = CollectionLiterals.newHashMap(); + + private Map> argumentBindings = CollectionLiterals.>newHashMap(); + + private String typeRefString = null; + + private List replacement; + + private CompilationUnit source; + + @Test + public void variableDeclarationBuilderTest() { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("class A { public void f() { int a; char b; String str; } }"); + this.source = TestUtils.getCompliationUnit(_builder.toString()); + Object _head = IterableExtensions.head(this.source.types()); + Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); + final Function1 _function = (Object it) -> { + return ((VariableDeclarationStatement) it); + }; + final List sourceVariableDeclarations = ListExtensions.map(((MethodDeclaration) _head_1).getBody().statements(), _function); + List replacementVariableDeclarations = null; + this.typeRefString = "void|int|char|java.lang.String|"; + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("public void f() { int a ; char b ; String str }"); + this.replacement = TestUtils.testBuilder(_builder_1.toString(), + this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + ASTNode _head_2 = IterableExtensions.head(this.replacement); + Assertions.assertTrue((_head_2 instanceof MethodDeclaration)); + ASTNode _head_3 = IterableExtensions.head(this.replacement); + replacementVariableDeclarations = ((MethodDeclaration) _head_3).getBody().statements(); + for (int i = 0; (i < replacementVariableDeclarations.size()); i++) { + { + VariableDeclarationStatement _get = replacementVariableDeclarations.get(i); + Assertions.assertTrue((_get instanceof VariableDeclarationStatement)); + Assertions.assertEquals(replacementVariableDeclarations.get(i).toString(), sourceVariableDeclarations.get(i).toString()); + } + } + this.typeRefString = "void|"; + this.nameBindings.put("N1", "a"); + this.nameBindings.put("N2", "b"); + this.nameBindings.put("N3", "str"); + this.typeBindings.put("T1", sourceVariableDeclarations.get(0).getType()); + this.typeBindings.put("T2", sourceVariableDeclarations.get(1).getType()); + this.typeBindings.put("T3", sourceVariableDeclarations.get(2).getType()); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("public void f() { type#T1 name#N1 ; type#T2 name#N2 ; type#T3 name#N3 }"); + this.replacement = TestUtils.testBuilder(_builder_2.toString(), + this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + ASTNode _head_4 = IterableExtensions.head(this.replacement); + Assertions.assertTrue((_head_4 instanceof MethodDeclaration)); + ASTNode _head_5 = IterableExtensions.head(this.replacement); + replacementVariableDeclarations = ((MethodDeclaration) _head_5).getBody().statements(); + for (int i = 0; (i < replacementVariableDeclarations.size()); i++) { + { + VariableDeclarationStatement _get = replacementVariableDeclarations.get(i); + Assertions.assertTrue((_get instanceof VariableDeclarationStatement)); + Assertions.assertEquals(sourceVariableDeclarations.get(i).toString(), replacementVariableDeclarations.get(i).toString()); + } + } + } + + @Test + public void fieldDeclarationBuilderTest() { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("class A { public int a; private char b; String str }"); + this.source = TestUtils.getCompliationUnit(_builder.toString()); + Object _head = IterableExtensions.head(this.source.types()); + final Function1 _function = (Object it) -> { + return ((FieldDeclaration) it); + }; + final List sourceFieldDeclarations = ListExtensions.map(((TypeDeclaration) _head).bodyDeclarations(), _function); + List replacementFieldDeclarations = null; + this.typeRefString = "int|char|java.lang.String|"; + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("public int a ; private char b ; String str"); + this.replacement = TestUtils.testBuilder(_builder_1.toString(), + this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + final Function1 _function_1 = (ASTNode it) -> { + return Boolean.valueOf((it instanceof FieldDeclaration)); + }; + Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function_1)); + final Function1 _function_2 = (ASTNode it) -> { + return ((FieldDeclaration) it); + }; + replacementFieldDeclarations = ListExtensions.map(this.replacement, _function_2); + for (int i = 0; (i < replacementFieldDeclarations.size()); i++) { + Assertions.assertEquals(sourceFieldDeclarations.get(i).toString(), replacementFieldDeclarations.get(i).toString()); + } + this.typeRefString = null; + this.nameBindings.put("N1", "a"); + this.nameBindings.put("N2", "b"); + this.nameBindings.put("N3", "str"); + this.typeBindings.put("T1", sourceFieldDeclarations.get(0).getType()); + this.typeBindings.put("T2", sourceFieldDeclarations.get(1).getType()); + this.typeBindings.put("T3", sourceFieldDeclarations.get(2).getType()); + this.visibilityBindings.put("V1", Visibility.PUBLIC); + this.visibilityBindings.put("V2", Visibility.PRIVATE); + this.visibilityBindings.put("V3", Visibility.PACKAGE); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ; visibility#V3 type#T3 name#N3"); + this.replacement = TestUtils.testBuilder(_builder_2.toString(), + this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + final Function1 _function_3 = (ASTNode it) -> { + return Boolean.valueOf((it instanceof FieldDeclaration)); + }; + Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function_3)); + final Function1 _function_4 = (ASTNode it) -> { + return ((FieldDeclaration) it); + }; + replacementFieldDeclarations = ListExtensions.map(this.replacement, _function_4); + for (int i = 0; (i < replacementFieldDeclarations.size()); i++) { + Assertions.assertEquals(sourceFieldDeclarations.get(i).toString(), replacementFieldDeclarations.get(i).toString()); + } + } + + @Test + public void methodDeclarationBuilderTest() { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("class A { public void f(int a){ } private short g(boolean l, char b){ } String h(){ } }"); + this.source = TestUtils.getCompliationUnit(_builder.toString()); + Object _head = IterableExtensions.head(this.source.types()); + final Function1 _function = (Object it) -> { + return ((MethodDeclaration) it); + }; + final List sourceMethodDeclarations = ListExtensions.map(((TypeDeclaration) _head).bodyDeclarations(), _function); + List replacementMethodDeclarations = null; + this.typeRefString = "void|int|short|boolean|char|java.lang.String|"; + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("public void f(int a){ } ; private short g(boolean l, char b){ } ; String h(){ }"); + this.replacement = TestUtils.testBuilder(_builder_1.toString(), + this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + final Function1 _function_1 = (ASTNode it) -> { + return Boolean.valueOf((it instanceof MethodDeclaration)); + }; + Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function_1)); + final Function1 _function_2 = (ASTNode it) -> { + return ((MethodDeclaration) it); + }; + replacementMethodDeclarations = ListExtensions.map(this.replacement, _function_2); + for (int i = 0; (i < replacementMethodDeclarations.size()); i++) { + Assertions.assertEquals(sourceMethodDeclarations.get(i).toString(), replacementMethodDeclarations.get(i).toString()); + } + this.typeRefString = null; + this.nameBindings.put("N1", "f"); + this.nameBindings.put("N2", "g"); + this.nameBindings.put("N3", "h"); + this.typeBindings.put("T1", sourceMethodDeclarations.get(0).getReturnType2()); + this.typeBindings.put("T2", sourceMethodDeclarations.get(1).getReturnType2()); + this.typeBindings.put("T3", sourceMethodDeclarations.get(2).getReturnType2()); + this.visibilityBindings.put("V1", Visibility.PUBLIC); + this.visibilityBindings.put("V2", Visibility.PRIVATE); + this.visibilityBindings.put("V3", Visibility.PACKAGE); + this.parameterBindings.put("P1", sourceMethodDeclarations.get(0).parameters()); + this.parameterBindings.put("P2", sourceMethodDeclarations.get(1).parameters()); + this.parameterBindings.put("P3", sourceMethodDeclarations.get(2).parameters()); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("visibility#V1 type#T1 name#N1(parameter#P1..){ } ; visibility#V2 type#T2 name#N2(parameter#P2..){ } ; visibility#V3 type#T3 name#N3(parameter#P3..){ }"); + this.replacement = TestUtils.testBuilder(_builder_2.toString(), + this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + final Function1 _function_3 = (ASTNode it) -> { + return Boolean.valueOf((it instanceof MethodDeclaration)); + }; + Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function_3)); + final Function1 _function_4 = (ASTNode it) -> { + return ((MethodDeclaration) it); + }; + replacementMethodDeclarations = ListExtensions.map(this.replacement, _function_4); + for (int i = 0; (i < replacementMethodDeclarations.size()); i++) { + Assertions.assertEquals(sourceMethodDeclarations.get(i).toString(), replacementMethodDeclarations.get(i).toString()); + } + } + + @Test + public void methodInvocetionAndConstructorCallBuilderTest() { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("class A { public void f() { new F() { public void apply(int a, char b) {} }.apply(a, b); new G() { public void apply() {} }.apply(); } int a = 1; char b = \'a\'; }"); + this.source = TestUtils.getCompliationUnit(_builder.toString()); + Object _head = IterableExtensions.head(this.source.types()); + Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); + final Function1 _function = (Object it) -> { + Expression _expression = ((ExpressionStatement) it).getExpression(); + return ((MethodInvocation) _expression); + }; + final List sourceMethodInvocations = ListExtensions.map(((MethodDeclaration) _head_1).getBody().statements(), _function); + List replacementMethodInvocations = null; + this.typeRefString = "void|int|char|void|"; + this.argumentBindings.put("A1", sourceMethodInvocations.get(0).arguments()); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("new F() { public void apply(int a, char b) {} }.apply(argument#A1..) ; new G() { public void apply() {} }.apply()"); + this.replacement = TestUtils.testBuilder(_builder_1.toString(), + this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + Assertions.assertTrue((IterableExtensions.forall(this.replacement, ((Function1) (ASTNode it) -> { + return Boolean.valueOf((it instanceof ExpressionStatement)); + })) && IterableExtensions.forall(this.replacement, ((Function1) (ASTNode it) -> { + Expression _expression = ((ExpressionStatement) it).getExpression(); + return Boolean.valueOf((_expression instanceof MethodInvocation)); + })))); + final Function1 _function_1 = (ASTNode it) -> { + Expression _expression = ((ExpressionStatement) it).getExpression(); + return ((MethodInvocation) _expression); + }; + replacementMethodInvocations = ListExtensions.map(this.replacement, _function_1); + for (int i = 0; (i < replacementMethodInvocations.size()); i++) { + Assertions.assertEquals(sourceMethodInvocations.get(i).toString(), replacementMethodInvocations.get(i).toString()); + } + this.nameBindings.put("N1", "F"); + this.nameBindings.put("N2", "G"); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("new name#N1() { public void apply(int a, char b) {} }.apply(argument#A1..) ; new name#N2() { public void apply() {} }.apply()"); + this.replacement = TestUtils.testBuilder(_builder_2.toString(), + this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + Assertions.assertTrue((IterableExtensions.forall(this.replacement, ((Function1) (ASTNode it) -> { + return Boolean.valueOf((it instanceof ExpressionStatement)); + })) && IterableExtensions.forall(this.replacement, ((Function1) (ASTNode it) -> { + Expression _expression = ((ExpressionStatement) it).getExpression(); + return Boolean.valueOf((_expression instanceof MethodInvocation)); + })))); + final Function1 _function_2 = (ASTNode it) -> { + Expression _expression = ((ExpressionStatement) it).getExpression(); + return ((MethodInvocation) _expression); + }; + replacementMethodInvocations = ListExtensions.map(this.replacement, _function_2); + for (int i = 0; (i < replacementMethodInvocations.size()); i++) { + Assertions.assertEquals(sourceMethodInvocations.get(i).toString(), replacementMethodInvocations.get(i).toString()); + } + } +} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/PatternMatcherTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/PatternMatcherTests.java new file mode 100644 index 0000000..954f044 --- /dev/null +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/PatternMatcherTests.java @@ -0,0 +1,370 @@ +package hu.elte.refjava.lang.tests.api; + +import hu.elte.refjava.lang.refJava.Visibility; +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; +import hu.elte.refjava.lang.tests.api.TestUtils; +import java.util.List; +import java.util.Map; +import org.eclipse.jdt.core.dom.ClassInstanceCreation; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.core.dom.Expression; +import org.eclipse.jdt.core.dom.ExpressionStatement; +import org.eclipse.jdt.core.dom.FieldDeclaration; +import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.MethodInvocation; +import org.eclipse.jdt.core.dom.SingleVariableDeclaration; +import org.eclipse.jdt.core.dom.Type; +import org.eclipse.jdt.core.dom.TypeDeclaration; +import org.eclipse.jdt.core.dom.VariableDeclarationStatement; +import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.extensions.InjectionExtension; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@ExtendWith(InjectionExtension.class) +@InjectWith(RefJavaInjectorProvider.class) +@SuppressWarnings("all") +class PatternMatcherTests { + private Map nameBindings = CollectionLiterals.newHashMap(); + + private Map typeBindings = CollectionLiterals.newHashMap(); + + private Map> parameterBindings = CollectionLiterals.>newHashMap(); + + private Map visibilityBindings = CollectionLiterals.newHashMap(); + + private Map> argumentBindings = CollectionLiterals.>newHashMap(); + + private String typeRefString = null; + + @Test + public void variableDeclarationMatcherTest() { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("type#T1 name#N1 ; type#T2 name#N2 ;"); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("class A {"); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("void f(){"); + _builder_1.newLine(); + _builder_1.append("\t\t"); + _builder_1.append("int a;"); + _builder_1.newLine(); + _builder_1.append("\t\t"); + _builder_1.append("char b;"); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + TestUtils.testMatcher(_builder.toString(), _builder_1.toString(), + "block", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + final CompilationUnit compUnit = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }"); + Object _head = IterableExtensions.head(compUnit.types()); + Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); + final List methodBody = ((MethodDeclaration) _head_1).getBody().statements(); + this.nameBindings.put("N1", "a"); + this.nameBindings.put("N2", "b"); + Object _head_2 = IterableExtensions.head(methodBody); + this.typeBindings.put("T1", ((VariableDeclarationStatement) _head_2).getType()); + Object _last = IterableExtensions.last(methodBody); + this.typeBindings.put("T2", ((VariableDeclarationStatement) _last).getType()); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("type#T1 name#N1 ; type#T2 name#N2 ;"); + StringConcatenation _builder_3 = new StringConcatenation(); + _builder_3.append("class A {"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("void f(){"); + _builder_3.newLine(); + _builder_3.append("\t\t"); + _builder_3.append("int a;"); + _builder_3.newLine(); + _builder_3.append("\t\t"); + _builder_3.append("char b;"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("}"); + _builder_3.newLine(); + _builder_3.append("}"); + _builder_3.newLine(); + TestUtils.testMatcher(_builder_2.toString(), _builder_3.toString(), + "block", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + this.typeRefString = "int|char|java.lang.String|"; + StringConcatenation _builder_4 = new StringConcatenation(); + _builder_4.append("int a ; char b ; String c ;"); + StringConcatenation _builder_5 = new StringConcatenation(); + _builder_5.append("class A {"); + _builder_5.newLine(); + _builder_5.append("\t"); + _builder_5.append("void f(){"); + _builder_5.newLine(); + _builder_5.append("\t\t"); + _builder_5.append("int a;"); + _builder_5.newLine(); + _builder_5.append("\t\t"); + _builder_5.append("char b;"); + _builder_5.newLine(); + _builder_5.append("\t\t"); + _builder_5.append("String c;"); + _builder_5.newLine(); + _builder_5.append("\t"); + _builder_5.append("}"); + _builder_5.newLine(); + _builder_5.append("}"); + _builder_5.newLine(); + TestUtils.testMatcher(_builder_4.toString(), _builder_5.toString(), + "block", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + } + + @Test + public void fieldDeclarationMatcherTest() { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;"); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("class A {"); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("public int a;"); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("private char b;"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + TestUtils.testMatcher(_builder.toString(), _builder_1.toString(), + "class", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + final CompilationUnit compUnit = TestUtils.getCompliationUnit("class A { public int a; private char b; }"); + Object _head = IterableExtensions.head(compUnit.types()); + final List fieldDeclarations = ((TypeDeclaration) _head).bodyDeclarations(); + this.nameBindings.put("N1", "a"); + this.nameBindings.put("N2", "b"); + Object _head_1 = IterableExtensions.head(fieldDeclarations); + this.typeBindings.put("T1", ((FieldDeclaration) _head_1).getType()); + Object _last = IterableExtensions.last(fieldDeclarations); + this.typeBindings.put("T2", ((FieldDeclaration) _last).getType()); + this.visibilityBindings.put("V1", Visibility.PUBLIC); + this.visibilityBindings.put("V2", Visibility.PRIVATE); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;"); + StringConcatenation _builder_3 = new StringConcatenation(); + _builder_3.append("class A {"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("public int a ;"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("private char b;"); + _builder_3.newLine(); + _builder_3.append("}"); + _builder_3.newLine(); + TestUtils.testMatcher(_builder_2.toString(), _builder_3.toString(), + "class", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + this.typeRefString = "int|char|"; + StringConcatenation _builder_4 = new StringConcatenation(); + _builder_4.append("public int a ; private char b ;"); + StringConcatenation _builder_5 = new StringConcatenation(); + _builder_5.append("class A {"); + _builder_5.newLine(); + _builder_5.append("\t"); + _builder_5.append("public int a ;"); + _builder_5.newLine(); + _builder_5.append("\t"); + _builder_5.append("private char b;"); + _builder_5.newLine(); + _builder_5.append("}"); + _builder_5.newLine(); + TestUtils.testMatcher(_builder_4.toString(), _builder_5.toString(), + "class", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + } + + @Test + public void methodDeclarationMatcherTest() { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("visibility#V1 type#T1 name#N1(parameter#P1..) {} ; visibility#V2 type#T2 name#N2(parameter#P2..) {} ;"); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("class A { "); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("public void f(int a, String str) {} "); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("private int g() {}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + TestUtils.testMatcher(_builder.toString(), _builder_1.toString(), + "class", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + final CompilationUnit compUnit = TestUtils.getCompliationUnit("class A { public void f(int a, String str) {} private int g() {} }"); + Object _head = IterableExtensions.head(compUnit.types()); + final List methodDeclarations = ((TypeDeclaration) _head).bodyDeclarations(); + this.nameBindings.put("N1", "f"); + this.nameBindings.put("N2", "g"); + Object _head_1 = IterableExtensions.head(methodDeclarations); + this.typeBindings.put("T1", ((MethodDeclaration) _head_1).getReturnType2()); + Object _last = IterableExtensions.last(methodDeclarations); + this.typeBindings.put("T2", ((MethodDeclaration) _last).getReturnType2()); + this.visibilityBindings.put("V1", Visibility.PUBLIC); + this.visibilityBindings.put("V2", Visibility.PRIVATE); + Object _head_2 = IterableExtensions.head(methodDeclarations); + this.parameterBindings.put("P1", ((MethodDeclaration) _head_2).parameters()); + Object _last_1 = IterableExtensions.last(methodDeclarations); + this.parameterBindings.put("P2", ((MethodDeclaration) _last_1).parameters()); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("visibility#V1 type#T1 name#N1(parameter#P1..) {} ; visibility#V2 type#T2 name#N2(parameter#P2..) {} ;"); + StringConcatenation _builder_3 = new StringConcatenation(); + _builder_3.append("class A { "); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("public void f(int a, String str) {}"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("private int g() {}"); + _builder_3.newLine(); + _builder_3.append("}"); + _builder_3.newLine(); + TestUtils.testMatcher(_builder_2.toString(), _builder_3.toString(), + "class", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + this.typeRefString = "void|int|java.lang.String|int|"; + StringConcatenation _builder_4 = new StringConcatenation(); + _builder_4.append("public void f(int a, String str) {} ; private int g() {} ;"); + StringConcatenation _builder_5 = new StringConcatenation(); + _builder_5.append("class A { "); + _builder_5.newLine(); + _builder_5.append("\t"); + _builder_5.append("public void f(int a, String str) {}"); + _builder_5.newLine(); + _builder_5.append("\t"); + _builder_5.append("private int g() {}"); + _builder_5.newLine(); + _builder_5.append("}"); + _builder_5.newLine(); + TestUtils.testMatcher(_builder_4.toString(), _builder_5.toString(), + "class", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + } + + @Test + public void methodInvocationAndConstructorCallMatcherTest() { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("new name#N1() { visibility#V1 type#T1 name#N2(parameter#P1..) {} }.name#N2(argument#A1..)"); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("class A {"); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("void f() {"); + _builder_1.newLine(); + _builder_1.append("\t\t"); + _builder_1.append("new F() {"); + _builder_1.newLine(); + _builder_1.append("\t\t\t"); + _builder_1.append("public void apply(int a) {}"); + _builder_1.newLine(); + _builder_1.append("\t\t"); + _builder_1.append("}.apply(a);"); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("\t"); + _builder_1.append("public int a = 1;"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + TestUtils.testMatcher(_builder.toString(), _builder_1.toString(), + "block", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + final CompilationUnit compUnit = TestUtils.getCompliationUnit("class A { public void f() { new F() { public void apply(int a, char b) {} }.apply(a, b); } int a = 1; char b = \'a\'; }"); + Object _head = IterableExtensions.head(compUnit.types()); + Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); + Object _head_2 = IterableExtensions.head(((MethodDeclaration) _head_1).getBody().statements()); + Expression _expression = ((ExpressionStatement) _head_2).getExpression(); + final MethodInvocation methodInvocation = ((MethodInvocation) _expression); + Object _head_3 = IterableExtensions.head(compUnit.types()); + Object _head_4 = IterableExtensions.head(((TypeDeclaration) _head_3).bodyDeclarations()); + Object _head_5 = IterableExtensions.head(((MethodDeclaration) _head_4).getBody().statements()); + Expression _expression_1 = ((ExpressionStatement) _head_5).getExpression(); + Expression _expression_2 = ((MethodInvocation) _expression_1).getExpression(); + Object _head_6 = IterableExtensions.head(((ClassInstanceCreation) _expression_2).getAnonymousClassDeclaration().bodyDeclarations()); + final MethodDeclaration method = ((MethodDeclaration) _head_6); + this.nameBindings.put("N1", "F"); + this.nameBindings.put("N2", "apply"); + this.typeBindings.put("T1", method.getReturnType2()); + this.visibilityBindings.put("V1", Visibility.PUBLIC); + this.parameterBindings.put("P1", method.parameters()); + this.argumentBindings.put("A1", methodInvocation.arguments()); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("new name#N1() { visibility#V1 type#T1 name#N2(parameter#P1..) {} }.name#N2(argument#A1..)"); + StringConcatenation _builder_3 = new StringConcatenation(); + _builder_3.append("class A {"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("void f() {"); + _builder_3.newLine(); + _builder_3.append("\t\t"); + _builder_3.append("new F() {"); + _builder_3.newLine(); + _builder_3.append("\t\t\t"); + _builder_3.append("public void apply(int a, char b) {}"); + _builder_3.newLine(); + _builder_3.append("\t\t"); + _builder_3.append("}.apply(a, b);"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("}"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("int a = 1;"); + _builder_3.newLine(); + _builder_3.append("\t"); + _builder_3.append("char b = \'a\';"); + _builder_3.newLine(); + _builder_3.append("}"); + _builder_3.newLine(); + TestUtils.testMatcher(_builder_2.toString(), _builder_3.toString(), + "block", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + this.typeRefString = "void|int|char|"; + StringConcatenation _builder_4 = new StringConcatenation(); + _builder_4.append("new F() { public void apply(int a, char b) {} }.apply(argument#A1..)"); + StringConcatenation _builder_5 = new StringConcatenation(); + _builder_5.append("class A {"); + _builder_5.newLine(); + _builder_5.append("\t"); + _builder_5.append("void f() {"); + _builder_5.newLine(); + _builder_5.append("\t\t"); + _builder_5.append("new F() {"); + _builder_5.newLine(); + _builder_5.append("\t\t\t"); + _builder_5.append("public void apply(int a, char b) {}"); + _builder_5.newLine(); + _builder_5.append("\t\t"); + _builder_5.append("}.apply(a, b);"); + _builder_5.newLine(); + _builder_5.append("\t"); + _builder_5.append("}"); + _builder_5.newLine(); + _builder_5.append("}"); + _builder_5.newLine(); + _builder_5.append("int a = 1;"); + _builder_5.newLine(); + _builder_5.append("char b = \'a\';"); + _builder_5.newLine(); + TestUtils.testMatcher(_builder_4.toString(), _builder_5.toString(), + "block", + this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); + } +} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/TestUtils.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/TestUtils.java new file mode 100644 index 0000000..298f3f4 --- /dev/null +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/TestUtils.java @@ -0,0 +1,73 @@ +package hu.elte.refjava.lang.tests.api; + +import com.google.common.base.Objects; +import hu.elte.refjava.api.patterns.ASTBuilder; +import hu.elte.refjava.api.patterns.PatternMatcher; +import hu.elte.refjava.api.patterns.PatternParser; +import hu.elte.refjava.lang.refJava.Pattern; +import hu.elte.refjava.lang.refJava.Visibility; +import java.util.List; +import java.util.Map; +import org.eclipse.jdt.core.dom.AST; +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.ASTParser; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.core.dom.Expression; +import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.SingleVariableDeclaration; +import org.eclipse.jdt.core.dom.Type; +import org.eclipse.jdt.core.dom.TypeDeclaration; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.junit.jupiter.api.Assertions; + +@SuppressWarnings("all") +public class TestUtils { + public static CompilationUnit getCompliationUnit(final String str) { + CompilationUnit _xblockexpression = null; + { + final ASTParser parser = ASTParser.newParser(AST.JLS12); + parser.setUnitName("test.java"); + parser.setEnvironment(null, null, null, true); + parser.setResolveBindings(true); + parser.setSource(str.toCharArray()); + ASTNode _createAST = parser.createAST(null); + final CompilationUnit newCompUnit = ((CompilationUnit) _createAST); + _xblockexpression = newCompUnit; + } + return _xblockexpression; + } + + public static void testMatcher(final String patternString, final String sourceString, final String declarationSource, final Map nameBindings, final Map typeBindings, final Map> parameterBindings, final Map visibilityBindings, final Map> argumentBindings, final String typeRefString) { + final PatternMatcher matcher = new PatternMatcher(null); + final Pattern pattern = PatternParser.parse(patternString); + final CompilationUnit source = TestUtils.getCompliationUnit(sourceString); + List _xifexpression = null; + boolean _equals = Objects.equal(declarationSource, "block"); + if (_equals) { + Object _head = IterableExtensions.head(source.types()); + Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); + _xifexpression = ((MethodDeclaration) _head_1).getBody().statements(); + } else { + List _xifexpression_1 = null; + boolean _equals_1 = Objects.equal(declarationSource, "class"); + if (_equals_1) { + Object _head_2 = IterableExtensions.head(source.types()); + _xifexpression_1 = ((TypeDeclaration) _head_2).bodyDeclarations(); + } + _xifexpression = _xifexpression_1; + } + final List matchings = _xifexpression; + Assertions.assertTrue(matcher.match(pattern, matchings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString)); + } + + public static List testBuilder(final String patternString, final Map> bindings, final Map nameBindings, final Map typeBindings, final Map> parameterBindings, final Map visibilityBindings, final Map> argumentBindings, final String typeRefString) { + List _xblockexpression = null; + { + final ASTBuilder builder = new ASTBuilder(null); + final Pattern pattern = PatternParser.parse(patternString); + final CompilationUnit source = TestUtils.getCompliationUnit(""); + _xblockexpression = builder.build(pattern, source.getAST(), bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString); + } + return _xblockexpression; + } +} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..cb721e7c20f3237f6b9c2b24bd2f9c2a81662c95 GIT binary patch literal 2010 zcmZ{lT})GF7{}lDT~A{zA2}_yz(yf6SeVYni-D3YdEWPwet0Mp{6JeVkW$zT>oHK6 zbGVd^T`gJs+OAAohzV|(EsG><3SMuC8gZ9qTe2@Rw+k;M)8NLQb9xHM=`Nq&`};rd zzwJ3GAw;4ycf>`-IAQ$s;e?YnQu5mCqk;5LHXRsF4;kAC^Wd;M;^hkCjkkZ~f z{>D&xIM9_I*o$Y1Iq%2QohP#COg|GZ(%(BZ1U@o__WIbq^QPX$h5v&S+~#oaySfv@qjKJ=9geZ;10 zmAqb@cS$Z6Vb4rdX>c27O>R7+O0avV66PoqYUo23W|`92Emy%TrZ*6D;-UB4&`az} zXXs27sOZG`5qF~=+6c~u;?fK0M{CT2WY2Bvpwk2BR0+AaV2~DUDeO~L6IN;2KLLHizkNgVP;0a-o zd!hwWFoA1sN^l*nBf2j^KlBr3AvCdAYdU|`8V*f7iA=#fJf^KX~+?K(k?zm?+$t{co$hl&lX`}u^(>09X)G$v}dZd7Z%|WWEQD$k zHKy}wjp0yj`ly|EiYm(5laVH5_VhdgKXfF1=Bs@mH zLKkFpUMp+%=UImq_Tg*2Ol-MWvs_@Z@up)m;?U9hdbwDaGtXA*q4!Pu0r7%3N!Y

>%OUY zcp2_w{{w%Hek5ANC|xsYF8P)u#*CVUM##p!R(8&xXWetk4ql44*mB8pa)HT+@b58~ SyyVc)GYykpIP+|^ApH*)$||A& literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..0f15ff193f03d5b5b3317614f6aaaca28c0c70ae GIT binary patch literal 2011 zcmZ{lUrbY19LLW&>8;lCCznD?olv$oN*A<=4~UvAzjH2>*0w;wfwn+wN?|kD5-3F7 zSgO;fC5vpBz4)-{mJx9=iy8?I-nYbmWN+Kz!;CQ_doa;O2OIm{+gm_x_xSsq&-Zt} zZSPG9Arht89vc-O62{LTiCMXal6T%4^CpKfN$*H<;8=V-?j4G!2ECc&XlB%#NFN`5 ze<(TP?MMzB#4|;o52>fSPh^s*ekR_^9(htCK3H2xwuuI3NeN~AqRnb0RPQ0nj?LtNJ4cl7nrqeFrsx4VPh^jW&}hh_&g*@mUDh1P*P+pQ|09@#mxTF$ z75gCpr*X|432wt}L{B8>hkn8gghm%#y7Q+?b7=H$|0VbVUQiY&5nGX+CM>qa-vaaS z96z>!p=aZ(kc2ET$F_(I=-o%p1|K0yso4U|FAl*1+*h-@M|&?fAB6|-46|4GAPnO^ zR**ezu7X8)hS|JF6Wb(suGPy|p@~w50oA&7bb(Jm8ZR&S+DK>EHq^^Dtq-*OVgo7^ZR8tOP5tg2*kwSvX6WfzZT!weHkcYYt633QoX3JVaSA zBz{3Qjk%}6H{f3$z*Po@UPLUyIrx^C6Hk=^^zdZ~M&KH<^J><}`u8Yr!YX&DS>2<9 zeJ#g$CHE5+ataH4hWl7S_En3UJGq~(do*=V;sLE*z6wqK>@c7ucMgS2!UdCffhn~l z=aGzLlF-zOMI{@XrOnnHS}R7=$NPM|O>8HuwcbAfSMXalr6(lb&f5_+N-zU6gc%4; zpQ+NFx2rUVrls9`@DcRl z_()uZIW=2={nfOOck&T6t9vxlaQGn~6%~ZFoom^O@7FS61=-2N7kNfh&~=Yy!#gBl z*ZSqVAbZ_mWR30|Ya4E<#@Bk8n6lwUInQM6O~+`!qN0uUvf)l^j;+;0Z?5%Su|u39 ztm})W2tH_a>b{>OQ6;L7U6x=KRtYmAjNYr!t?3%gLiD1wOjL`Lly&{sqaa?DFXx?qIbHd%kjHWV$W+R$+;W5G@EnW!vlul728r8UN(ro0*zyq;Qj1ks- zN3rt~+{yk2{vP;L>=$En-K5#r2}z7=HS>*-O*o8f%AI4~vr0WL##>C;*p!@SG9vtY U%*MX4sOXi3v1`^GTPsNa1FnTD-~a#s literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin new file mode 100644 index 0000000000000000000000000000000000000000..57eb439a66364da7affca7d64939766a731a9577 GIT binary patch literal 4323 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.java new file mode 100644 index 0000000..8266df2 --- /dev/null +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.java @@ -0,0 +1,635 @@ +package hu.elte.refjava.lang.tests.compiler; + +import com.google.inject.Inject; +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; +import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.extensions.InjectionExtension; +import org.eclipse.xtext.xbase.lib.Exceptions; +import org.eclipse.xtext.xbase.lib.Extension; +import org.eclipse.xtext.xbase.testing.CompilationTestHelper; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@ExtendWith(InjectionExtension.class) +@InjectWith(RefJavaInjectorProvider.class) +@SuppressWarnings("all") +public class RefJavaCompilerTests { + @Inject + @Extension + private CompilationTestHelper _compilationTestHelper; + + @Test + public void compileSchemeTypes() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package file.test;"); + _builder.newLine(); + _builder.newLine(); + _builder.append("local refactoring localTest()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.newLine(); + _builder.append("block refactoring blockTest()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.newLine(); + _builder.append("lambda refactoring lambdaTest()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.newLine(); + _builder.append("class refactoring classTest()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("MULTIPLE FILES WERE GENERATED"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("File 1 : /myProject/./src-gen/file/test/blockTest.java"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("package file.test;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.BlockRefactoring;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("public class blockTest extends BlockRefactoring {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public blockTest() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(\"nothing\", \"nothing\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("File 2 : /myProject/./src-gen/file/test/classTest.java"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("package file.test;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.ClassRefactoring;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("public class classTest extends ClassRefactoring {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public classTest() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(\"nothing\", \"nothing\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("File 3 : /myProject/./src-gen/file/test/lambdaTest.java"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("package file.test;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.LambdaRefactoring;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("public class lambdaTest extends LambdaRefactoring {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public lambdaTest() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(\"nothing\", \"nothing\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("File 4 : /myProject/./src-gen/file/test/localTest.java"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("package file.test;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.LocalRefactoring;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("public class localTest extends LocalRefactoring {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public localTest() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(\"nothing\", \"nothing\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.newLine(); + this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + @Test + public void compileSchemeWithTargetClosure() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package test;"); + _builder.newLine(); + _builder.newLine(); + _builder.append("block refactoring test()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("target"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("package test;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.BlockRefactoring;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("public class test extends BlockRefactoring {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public test() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(\"nothing\", \"nothing\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("@Override"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("protected boolean safeTargetCheck() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return super.targetCheck(\"nothing\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + @Test + public void compileSchemeWithPrecondition() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package test;"); + _builder.newLine(); + _builder.newLine(); + _builder.append("local refactoring test()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("when"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("precondition"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("isSingle(target) "); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("&& true == true"); + _builder.newLine(); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("package test;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.Check;"); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.LocalRefactoring;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("public class test extends LocalRefactoring {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public test() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(\"nothing\", \"nothing\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private boolean instanceCheck() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return (Check.isSingle(bindings.get(\"target\")) && (true == true));"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("@Override"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("protected boolean check() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return super.check() && instanceCheck();"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + @Test + public void compileSchemeWithAssignments() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package test;"); + _builder.newLine(); + _builder.newLine(); + _builder.append("local refactoring test()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("when"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("assignment"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("name#N = \"TEST\" ;"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("type#T = type(target) ;"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("visibility#V = visibility(target) ;"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("parameter#P = parameters(target)"); + _builder.newLine(); + _builder.newLine(); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("package test;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.Check;"); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.LocalRefactoring;"); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.lang.refJava.Visibility;"); + _builder_1.newLine(); + _builder_1.append("import java.util.List;"); + _builder_1.newLine(); + _builder_1.append("import org.eclipse.jdt.core.dom.SingleVariableDeclaration;"); + _builder_1.newLine(); + _builder_1.append("import org.eclipse.jdt.core.dom.Type;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("public class test extends LocalRefactoring {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public test() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(\"nothing\", \"nothing\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private String valueof_name_N() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return \"TEST\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private void set_name_N() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("nameBindings.put(\"N\", valueof_name_N());"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private Type valueof_type_T() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("Type _type = Check.type(bindings.get(\"target\"));"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return _type;"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private void set_type_T() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("typeBindings.put(\"T\", valueof_type_T());"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private List valueof_visibility_V() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("Visibility _visibility = Check.visibility(bindings.get(\"target\"));"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return _visibility;"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private void set_visibility_V() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("visibilityBindings.put(\"V\", valueof_visibility_V());"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private List valueof_parameter_P() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("List _parameters = Check.parameters(bindings.get(\"target\"));"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return _parameters;"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("private void set_parameter_P() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("parameterBindings.put(\"P\", valueof_parameter_P());"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("protected void setMetaVariables() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("set_name_N();"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("set_type_T();"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("set_visibility_V();"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("set_parameter_P();"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.matchingTypeReferenceString = \"\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.replacementTypeReferenceString = \"\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.targetTypeReferenceString = \"\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.definitionTypeReferenceString = \"\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + @Test + public void compileSchemeWithTypeRefStrings() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package test;"); + _builder.newLine(); + _builder.newLine(); + _builder.append("class refactoring test()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("int a ; char b ;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("double c ; long d ; String e ;"); + _builder.newLine(); + _builder.append("target"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("public void f(boolean b) { }"); + _builder.newLine(); + _builder.append("definition"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("byte b ; short s ;"); + _builder.newLine(); + _builder.newLine(); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("package test;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("import hu.elte.refjava.api.ClassRefactoring;"); + _builder_1.newLine(); + _builder_1.newLine(); + _builder_1.append("@SuppressWarnings(\"all\")"); + _builder_1.newLine(); + _builder_1.append("public class test extends ClassRefactoring {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("public test() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super(\"int a ; char b ;\", \"double c ; long d ; String e ;\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("protected void setMetaVariables() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.definitionString = \"byte b ; short s ;\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.matchingTypeReferenceString = \"int|char|\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.replacementTypeReferenceString = \"double|long|java.lang.String|\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.targetTypeReferenceString = \"void|boolean|\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("super.definitionTypeReferenceString = \"byte|short|\";"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("@Override"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("protected boolean safeTargetCheck() {"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("return super.targetCheck(\"public void f(boolean b) { }\");"); + _builder_1.newLine(); + _builder_1.append(" "); + _builder_1.append("}"); + _builder_1.newLine(); + _builder_1.append("}"); + _builder_1.newLine(); + this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } +} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace new file mode 100644 index 0000000000000000000000000000000000000000..f3451a85821176f406522fbab57b95de55ff155a GIT binary patch literal 15750 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.java new file mode 100644 index 0000000..a5f224f --- /dev/null +++ b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.java @@ -0,0 +1,307 @@ +package hu.elte.refjava.lang.tests.parser; + +import com.google.inject.Inject; +import hu.elte.refjava.lang.refJava.AssignmentList; +import hu.elte.refjava.lang.refJava.File; +import hu.elte.refjava.lang.refJava.MetaVariableType; +import hu.elte.refjava.lang.refJava.PBlockExpression; +import hu.elte.refjava.lang.refJava.PConstructorCall; +import hu.elte.refjava.lang.refJava.PExpression; +import hu.elte.refjava.lang.refJava.PFeatureCall; +import hu.elte.refjava.lang.refJava.PMemberFeatureCall; +import hu.elte.refjava.lang.refJava.PMetaVariable; +import hu.elte.refjava.lang.refJava.PMethodDeclaration; +import hu.elte.refjava.lang.refJava.PNothingExpression; +import hu.elte.refjava.lang.refJava.PReturnExpression; +import hu.elte.refjava.lang.refJava.PTargetExpression; +import hu.elte.refjava.lang.refJava.PVariableDeclaration; +import hu.elte.refjava.lang.refJava.Pattern; +import hu.elte.refjava.lang.refJava.RefactoringRule; +import hu.elte.refjava.lang.refJava.SchemeInstanceRule; +import hu.elte.refjava.lang.refJava.SchemeType; +import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; +import org.eclipse.emf.common.util.EList; +import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.extensions.InjectionExtension; +import org.eclipse.xtext.testing.util.ParseHelper; +import org.eclipse.xtext.xbase.XExpression; +import org.eclipse.xtext.xbase.lib.Exceptions; +import org.eclipse.xtext.xbase.lib.Extension; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@ExtendWith(InjectionExtension.class) +@InjectWith(RefJavaInjectorProvider.class) +@SuppressWarnings("all") +public class RefJavaParsingTests { + @Inject + @Extension + private ParseHelper parseHelper; + + @Test + public void parseFile() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package file.test;"); + _builder.newLine(); + final File file = this.parseHelper.parse(_builder); + Assertions.assertTrue((file instanceof File)); + Assertions.assertEquals(file.getName(), "file.test"); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + @Test + public void parseAllSchemeTypes() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package file.test;"); + _builder.newLine(); + _builder.append("local refactoring localTest()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.newLine(); + _builder.append("block refactoring blockTest()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.newLine(); + _builder.append("lambda refactoring lambdaTest()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.newLine(); + _builder.append("class refactoring classTest()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + final File file = this.parseHelper.parse(_builder); + final Function1 _function = (RefactoringRule it) -> { + return Boolean.valueOf((it instanceof SchemeInstanceRule)); + }; + Assertions.assertTrue(IterableExtensions.forall(file.getRefactorings(), _function)); + RefactoringRule _get = file.getRefactorings().get(0); + Assertions.assertEquals(((SchemeInstanceRule) _get).getType(), SchemeType.LOCAL); + RefactoringRule _get_1 = file.getRefactorings().get(0); + Assertions.assertEquals(((SchemeInstanceRule) _get_1).getName(), "localTest"); + RefactoringRule _get_2 = file.getRefactorings().get(1); + Assertions.assertEquals(((SchemeInstanceRule) _get_2).getType(), SchemeType.BLOCK); + RefactoringRule _get_3 = file.getRefactorings().get(1); + Assertions.assertEquals(((SchemeInstanceRule) _get_3).getName(), "blockTest"); + RefactoringRule _get_4 = file.getRefactorings().get(2); + Assertions.assertEquals(((SchemeInstanceRule) _get_4).getType(), SchemeType.LAMBDA); + RefactoringRule _get_5 = file.getRefactorings().get(2); + Assertions.assertEquals(((SchemeInstanceRule) _get_5).getName(), "lambdaTest"); + RefactoringRule _get_6 = file.getRefactorings().get(3); + Assertions.assertEquals(((SchemeInstanceRule) _get_6).getType(), SchemeType.CLASS); + RefactoringRule _get_7 = file.getRefactorings().get(3); + Assertions.assertEquals(((SchemeInstanceRule) _get_7).getName(), "classTest"); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + @Test + public void parseSchemeProperties() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package file.test;"); + _builder.newLine(); + _builder.append("local refactoring test()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("target"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("definition"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + _builder.append("when"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("assignment"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("name#test = \"TEST\""); + _builder.newLine(); + _builder.append("\t"); + _builder.append("precondition"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("true"); + _builder.newLine(); + final File file = this.parseHelper.parse(_builder); + RefactoringRule _head = IterableExtensions.head(file.getRefactorings()); + final SchemeInstanceRule refactoring = ((SchemeInstanceRule) _head); + Pattern _matchingPattern = refactoring.getMatchingPattern(); + Assertions.assertTrue((_matchingPattern instanceof Pattern)); + Pattern _replacementPattern = refactoring.getReplacementPattern(); + Assertions.assertTrue((_replacementPattern instanceof Pattern)); + Pattern _targetPattern = refactoring.getTargetPattern(); + boolean _tripleEquals = (_targetPattern == null); + Assertions.assertFalse(_tripleEquals); + Pattern _targetPattern_1 = refactoring.getTargetPattern(); + Assertions.assertTrue((_targetPattern_1 instanceof Pattern)); + Pattern _definitionPattern = refactoring.getDefinitionPattern(); + boolean _tripleEquals_1 = (_definitionPattern == null); + Assertions.assertFalse(_tripleEquals_1); + Pattern _definitionPattern_1 = refactoring.getDefinitionPattern(); + Assertions.assertTrue((_definitionPattern_1 instanceof Pattern)); + AssignmentList _assignments = refactoring.getAssignments(); + boolean _tripleEquals_2 = (_assignments == null); + Assertions.assertFalse(_tripleEquals_2); + AssignmentList _assignments_1 = refactoring.getAssignments(); + Assertions.assertTrue((_assignments_1 instanceof AssignmentList)); + XExpression _precondition = refactoring.getPrecondition(); + boolean _tripleEquals_3 = (_precondition == null); + Assertions.assertFalse(_tripleEquals_3); + XExpression _precondition_1 = refactoring.getPrecondition(); + Assertions.assertTrue((_precondition_1 instanceof XExpression)); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + @Test + public void parsePatternExpressions() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package file.test;"); + _builder.newLine(); + _builder.append("local refactoring test()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("#s ; target ; return ; nothing ; { } ; public int a ; public void f() { } ; method() ; A.method() ; new F() { }"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + final File file = this.parseHelper.parse(_builder); + RefactoringRule _head = IterableExtensions.head(file.getRefactorings()); + final Pattern pattern = ((SchemeInstanceRule) _head).getMatchingPattern(); + EList _patterns = pattern.getPatterns(); + boolean _tripleEquals = (_patterns == null); + Assertions.assertFalse(_tripleEquals); + final Function1 _function = (PExpression it) -> { + return Boolean.valueOf((it instanceof PExpression)); + }; + Assertions.assertTrue(IterableExtensions.forall(pattern.getPatterns(), _function)); + final EList patterns = pattern.getPatterns(); + PExpression _get = patterns.get(0); + Assertions.assertTrue((_get instanceof PMetaVariable)); + PExpression _get_1 = patterns.get(1); + Assertions.assertTrue((_get_1 instanceof PTargetExpression)); + PExpression _get_2 = patterns.get(2); + Assertions.assertTrue((_get_2 instanceof PReturnExpression)); + PExpression _get_3 = patterns.get(3); + Assertions.assertTrue((_get_3 instanceof PNothingExpression)); + PExpression _get_4 = patterns.get(4); + Assertions.assertTrue((_get_4 instanceof PBlockExpression)); + PExpression _get_5 = patterns.get(5); + Assertions.assertTrue((_get_5 instanceof PVariableDeclaration)); + PExpression _get_6 = patterns.get(6); + Assertions.assertTrue((_get_6 instanceof PMethodDeclaration)); + PExpression _get_7 = patterns.get(7); + Assertions.assertTrue((_get_7 instanceof PFeatureCall)); + PExpression _get_8 = patterns.get(8); + Assertions.assertTrue((_get_8 instanceof PMemberFeatureCall)); + PExpression _get_9 = patterns.get(9); + Assertions.assertTrue((_get_9 instanceof PConstructorCall)); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + @Test + public void parseMetaVariables() { + try { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package file.test;"); + _builder.newLine(); + _builder.append("local refactoring test()"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("#s ; name#n ; type#t ; visibility#v ; argument#a.. ; parameter#p.."); + _builder.newLine(); + _builder.append("\t"); + _builder.append("~~~~~~~"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("nothing"); + _builder.newLine(); + final File file = this.parseHelper.parse(_builder); + RefactoringRule _head = IterableExtensions.head(file.getRefactorings()); + final EList patterns = ((SchemeInstanceRule) _head).getMatchingPattern().getPatterns(); + final Function1 _function = (PExpression it) -> { + return Boolean.valueOf((it instanceof PMetaVariable)); + }; + Assertions.assertTrue(IterableExtensions.forall(patterns, _function)); + PExpression _get = patterns.get(0); + Assertions.assertEquals(((PMetaVariable) _get).getType(), MetaVariableType.CODE); + PExpression _get_1 = patterns.get(1); + Assertions.assertEquals(((PMetaVariable) _get_1).getType(), MetaVariableType.NAME); + PExpression _get_2 = patterns.get(2); + Assertions.assertEquals(((PMetaVariable) _get_2).getType(), MetaVariableType.TYPE); + PExpression _get_3 = patterns.get(3); + Assertions.assertEquals(((PMetaVariable) _get_3).getType(), MetaVariableType.VISIBILITY); + PExpression _get_4 = patterns.get(4); + Assertions.assertEquals(((PMetaVariable) _get_4).getType(), MetaVariableType.ARGUMENT); + PExpression _get_5 = patterns.get(5); + Assertions.assertEquals(((PMetaVariable) _get_5).getType(), MetaVariableType.PARAMETER); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } +} diff --git a/hu.elte.refjava.lang.ui.tests/.classpath b/hu.elte.refjava.lang.ui.tests/.classpath deleted file mode 100644 index c6a6482..0000000 --- a/hu.elte.refjava.lang.ui.tests/.classpath +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hu.elte.refjava.lang.ui.tests/.project b/hu.elte.refjava.lang.ui.tests/.project deleted file mode 100644 index fd6c591..0000000 --- a/hu.elte.refjava.lang.ui.tests/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - hu.elte.refjava.lang.ui.tests - - - - - - org.eclipse.xtext.ui.shared.xtextBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.xtext.ui.shared.xtextNature - org.eclipse.jdt.core.javanature - org.eclipse.pde.PluginNature - - diff --git a/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.core.resources.prefs b/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index fdaa299..0000000 --- a/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=windows-1250 diff --git a/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index c537b63..0000000 --- a/hu.elte.refjava.lang.ui.tests/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 diff --git a/hu.elte.refjava.lang.ui.tests/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.ui.tests/META-INF/MANIFEST.MF deleted file mode 100644 index e93b746..0000000 --- a/hu.elte.refjava.lang.ui.tests/META-INF/MANIFEST.MF +++ /dev/null @@ -1,19 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: org.xtext.example.mydsl.ui.tests -Bundle-ManifestVersion: 2 -Bundle-Name: hu.elte.refjava.lang.ui.tests -Bundle-Vendor: My Company -Bundle-Version: 1.0.0.qualifier -Bundle-SymbolicName: hu.elte.refjava.lang.ui.tests;singleton:=true -Bundle-ActivationPolicy: lazy -Require-Bundle: hu.elte.refjava, - org.junit.jupiter.api;bundle-version="[5.0.0,6.0.0)", - org.eclipse.xtext.testing, - org.eclipse.xtext.xbase.testing, - org.eclipse.xtext.xbase.junit, - org.eclipse.core.runtime, - org.eclipse.xtext.ui.testing, - org.eclipse.ui.workbench;resolution:=optional, - hu.elte.refjava.lang.ui -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Export-Package: hu.elte.refjava.lang.ui.tests;x-internal=true diff --git a/hu.elte.refjava.lang.ui.tests/build.properties b/hu.elte.refjava.lang.ui.tests/build.properties deleted file mode 100644 index 5c6bbf9..0000000 --- a/hu.elte.refjava.lang.ui.tests/build.properties +++ /dev/null @@ -1,6 +0,0 @@ -source.. = src/,\ - src-gen/,\ - xtend-gen/ -bin.includes = .,\ - META-INF/ -bin.excludes = **/*.xtend diff --git a/hu.elte.refjava.lang.ui.tests/src-gen/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.java b/hu.elte.refjava.lang.ui.tests/src-gen/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.java deleted file mode 100644 index 3063cd3..0000000 --- a/hu.elte.refjava.lang.ui.tests/src-gen/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * generated by Xtext - */ -package hu.elte.refjava.lang.ui.tests; - -import com.google.inject.Injector; -import hu.elte.refjava.lang.ui.internal.LangActivator; -import org.eclipse.xtext.testing.IInjectorProvider; - -public class RefJavaUiInjectorProvider implements IInjectorProvider { - - @Override - public Injector getInjector() { - return LangActivator.getInstance().getInjector("hu.elte.refjava.lang.RefJava"); - } - -} diff --git a/hu.elte.refjava.lang.ui.tests/test-bin/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.class b/hu.elte.refjava.lang.ui.tests/test-bin/hu/elte/refjava/lang/ui/tests/RefJavaUiInjectorProvider.class deleted file mode 100644 index e8d8f3d54c6ff5fbf467c005970a83326d22f38c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 747 zcmbVKO-md>5PiL_JMK8~V-urBvmv)tVLIp`$cBIjf-;z(iTB>IoNXDWrKe}{XC)UC zJop3rQIeW*SA$?69=fWls_Ru(y}G%*x(2Y0cOGg2ANz%*)RDAwa;gSOrYcKhp{1kT zOR^TM$5(&B|5=3tmW|5k x;|1S?y9b!UG+Vq@m}OZeZ&YAF^EX + + - - diff --git a/hu.elte.refjava.lang.ui/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang.ui/.settings/org.eclipse.jdt.core.prefs index f5c72b9..3efb014 100644 --- a/hu.elte.refjava.lang.ui/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.lang.ui/.settings/org.eclipse.jdt.core.prefs @@ -9,8 +9,8 @@ org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nul org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 -org.eclipse.jdt.core.compiler.compliance=12 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.APILeak=warning org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error @@ -107,4 +107,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=12 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF b/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF index 8f2e620..e054ca4 100644 --- a/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang.ui/META-INF/MANIFEST.MF @@ -22,7 +22,7 @@ Require-Bundle: hu.elte.refjava, org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional, org.eclipse.jdt.debug.ui Import-Package: org.apache.log4j -Bundle-RequiredExecutionEnvironment: JavaSE-12 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: hu.elte.refjava.lang.ui, hu.elte.refjava.lang.ui.contentassist, hu.elte.refjava.lang.ui.editor, diff --git a/hu.elte.refjava.lang/.classpath b/hu.elte.refjava.lang/.classpath index ea83ab5..2d4e467 100644 --- a/hu.elte.refjava.lang/.classpath +++ b/hu.elte.refjava.lang/.classpath @@ -3,11 +3,7 @@ - - - - - + diff --git a/hu.elte.refjava.lang/.settings/org.eclipse.jdt.core.prefs b/hu.elte.refjava.lang/.settings/org.eclipse.jdt.core.prefs index 9100c99..f1bf70b 100644 --- a/hu.elte.refjava.lang/.settings/org.eclipse.jdt.core.prefs +++ b/hu.elte.refjava.lang/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=12 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -112,4 +112,4 @@ org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=12 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/hu.elte.refjava.lang/META-INF/MANIFEST.MF b/hu.elte.refjava.lang/META-INF/MANIFEST.MF index 1790a5e..9dd744a 100644 --- a/hu.elte.refjava.lang/META-INF/MANIFEST.MF +++ b/hu.elte.refjava.lang/META-INF/MANIFEST.MF @@ -22,8 +22,9 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.xtext.testing;bundle-version="2.15.0", com.google.guava, org.eclipse.xtend.lib.macro, - org.junit -Bundle-RequiredExecutionEnvironment: JavaSE-12 + org.junit, + org.eclipse.emf.ecore.xcore;bundle-version="1.11.0" +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: hu.elte.refjava.api, hu.elte.refjava.api.patterns, hu.elte.refjava.lang, diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend index f1e8707..8b001b4 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/BlockRefactoring.xtend @@ -29,7 +29,7 @@ class BlockRefactoring implements Refactoring { parameterBindings.clear visibilityBindings.clear argumentBindings.clear - setMetaVariables() + setMetaVariables matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) } @@ -37,6 +37,7 @@ class BlockRefactoring implements Refactoring { override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document + Check.allTypeDeclarationInWorkSpace = allTypeDeclInWorkspace } def setTarget(List newTarget) { @@ -104,8 +105,7 @@ class BlockRefactoring implements Refactoring { } def protected check() { - //Check.isInsideBlock(target) - true + Check.isInsideBlock(target) } def private safeBuild() { @@ -120,31 +120,29 @@ class BlockRefactoring implements Refactoring { def private safeReplace() { try { + val targetTypeDecl = Utils.getTypeDeclaration(target.head) val assignmentBeforeReplacement = Check.getAssignmentsInClass(targetTypeDecl) val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] - val group = rewrite.createGroupNode(replacement) - rewrite.replace( target.head, group, null) + rewrite.replace(target.head, group, null) val edits = rewrite.rewriteAST(document, null) edits.apply(document) - val iCompUnit = Utils.getICompilationUnit(target.head) val compUnit = Utils.parseSourceCode(iCompUnit) val assignmentsAfterReplacement = Check.getAssignmentsInClass(compUnit.types.findFirst[ (it as TypeDeclaration).resolveBinding.qualifiedName == targetTypeDecl.resolveBinding.qualifiedName] as TypeDeclaration) - compUnit.recordModifications + compUnit.recordModifications val it1 = assignmentBeforeReplacement.iterator val it2 = assignmentsAfterReplacement.iterator - while (it1.hasNext) { val value1 = it1.next val value2 = it2.next - if(!(value1.leftHandSide as SimpleName).resolveBinding.isEqualTo((value2.leftHandSide as SimpleName).resolveBinding)) { + if(Check.referredField(value1.leftHandSide as SimpleName) !== null && Check.referredField(value2.leftHandSide as SimpleName) === null) { val thisExpression = compUnit.AST.newThisExpression val fieldAccess = compUnit.AST.newFieldAccess fieldAccess.name.identifier = (value2.leftHandSide as SimpleName).identifier @@ -152,6 +150,7 @@ class BlockRefactoring implements Refactoring { value2.leftHandSide = fieldAccess } } + Utils.applyChanges(compUnit, document) true } catch (Exception e) { diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend index 110d697..169e639 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Check.xtend @@ -1,6 +1,7 @@ package hu.elte.refjava.api import hu.elte.refjava.api.patterns.Utils +import hu.elte.refjava.lang.refJava.Visibility import java.lang.reflect.Modifier import java.util.List import java.util.Queue @@ -31,22 +32,51 @@ class Check { protected static List allTypeDeclarationInWorkSpace + ///////////////// + //public checks// + ///////////////// + + /** + * Determines whether the given list of ASTNodes consist of one element. + * @param target the list of ASTNodes + * @return true, if target consist of on element, false otherwise + */ def static isSingle(List target) { target.size == 1 } - + + /** + * Determines whether the given ASTNode is located inside a Block. + * @param node the ASTnode + * @return true, if node located inside a Block, false otherwise + */ def static isInsideBlock(ASTNode node) { node.parent instanceof Block } - + + /** + * Determines whether the all of the given list of ASTNodes' element is located in a Block. + * @param nodes the list of ASTNodes + * @return true, if all of node's element located inside a Block, false otherwise + */ def static isInsideBlock(List nodes) { nodes.forall[isInsideBlock] } + /** + * Determines whether the given ASTNode is a variable declaration. + * @param node the list of ASTNodes + * @return true, if node is a variable declaration, false otherwise + */ def dispatch static isVariableDeclaration(ASTNode node) { node instanceof VariableDeclarationStatement } - + + /** + * Determines whether the all of the given list of ASTNodes' element is a variable declaration. + * @param node the list of ASTNodes + * @return true, if all of nodes' element is a variable declaration, false otherwise + */ def dispatch static isVariableDeclaration(List nodes) { nodes.forall[it instanceof VariableDeclarationStatement] } @@ -95,27 +125,171 @@ class Check { varDeclList.exists[it.isReferencedIn(nodes)] } - //block checks - def static getAssignmentsInClass(TypeDeclaration typeDecl) { - val List assignments = newArrayList - val visitor = new ASTVisitor() { - override visit(Assignment assignment) { - if (assignment.leftHandSide instanceof SimpleName) { - assignments.add(assignment) + + //OPTIONAL CHECK + //determines whether the selected nodes contains a ReturnExpression with an expression that is not null + def static containsValueReturn(List target) { + target.exists [ + val visitor = new ASTVisitor() { + public var found = false + override visit(ReturnStatement statement) { + if (statement.expression !== null) { + found = true + return false + } + true } - return true } + it.accept(visitor) + visitor.found + ] + } + + + //OPTIONAL CHECK + //determines whether the selected nodes contains a ReturnExpression with an expression that is null + def static containsVoidReturn(List target) { + target.exists [ + val visitor = new ASTVisitor() { + public var found = false + override visit(ReturnStatement statement) { + if (statement.expression === null) { + found = true + return false + } + true + } + } + it.accept(visitor) + visitor.found + ] + } + + //OPTIONAL CHECK + //gets the first ReturnExpression which expression is null from the selected nodes.. returns null if such a node doesn't exists + def static getVoidReturn(List target) { + val List result = newArrayList + target.exists [ + val visitor = new ASTVisitor() { + public var found = false + override visit(ReturnStatement statement) { + if (statement.expression === null) { + found = true + result.add(statement) + return false + } + true + } + } + it.accept(visitor) + visitor.found + ] + result.head as ReturnStatement + } + + /** + * Determines whether if the a ReturnStatement is the last possible execution node of the Block which has the statement. + * @param statement the ReturnStatement + * @return true, if its the last execution path, false otherwise + */ + def static isLastExecutionNode(ReturnStatement statement) { + var firstLevelNodeInMethod = statement as ASTNode + while (!((firstLevelNodeInMethod.parent instanceof Block) && ((firstLevelNodeInMethod.parent as Block).parent instanceof MethodDeclaration))) { + firstLevelNodeInMethod = firstLevelNodeInMethod.parent } - typeDecl.accept(visitor) - assignments + val node = firstLevelNodeInMethod + val nodesAfterReturnStatement = (firstLevelNodeInMethod.parent as Block).statements.dropWhile[it != node] + nodesAfterReturnStatement.size == 1 && nodesAfterReturnStatement.head == node } + /** + * Gets the identifier of the first element of the given list of ASTNodes. + * Note: Only works if the first element of the given list is a MethodDeclaration. Returns null otherwise. + * @param target the list of ASTNodes + * @return the identifier of target's first element + */ + def static String getMethodName(List target) { + if (target.head instanceof MethodDeclaration) { + return (target.head as MethodDeclaration).name.identifier + } + null + } - //lambda checks - def static isFresh(String name) { - !allTypeDeclarationInWorkSpace.exists[it.name.identifier == name] + /** + * Gets the identifiers of the first element of the given list of ASTNodes. + * Note: Only works if the first element of the given list is a FieldDeclaration. Returns null otherwise. + * @param target the list of ASTNodes + * @return the list of identifiers of target's first element + */ + def static getFragmentNames(List target) { + if(target.head instanceof FieldDeclaration) { + val fragments = (target.head as FieldDeclaration).fragments as List + var List fragmentNames = newArrayList + for(fragment : fragments) { + fragmentNames.add(fragment.name.identifier) + } + return fragmentNames + } + null + } + + /** + * Gets the type of a list of ASTNodes' first element. + * Note: Only works if the first element of the given list is either a FieldDeclaration, or a MethodDeclaration. Returns null otherwise. + * @param target the list of ASTNodes + * @return the type or return type of target's first element (org.eclipse.jdt.core.dom.Type) + */ + def dispatch static Type type(List target) { + if (target.head instanceof MethodDeclaration) { + return type(target.head) + } else if (target.head instanceof FieldDeclaration) { + return type(target.head) + } + null } + /** + * Gets the visibility of a list of ASTNodes' first element. + * Note: Only works if the first element of the given list is either a FieldDeclaration, or a MethodDeclaration. Returns null otherwise. + * @param target the list of ASTNodes + * @return the visibility of target's first element (hu.elte.refjava.lang.refJava.Visibility) + */ + def dispatch static Visibility visibility(List target) { + if(target.head instanceof MethodDeclaration) { + return visibility(target.head as MethodDeclaration) + } else if (target.head instanceof FieldDeclaration) { + return visibility(target.head as FieldDeclaration) + } + null + } + + /** + * Gets the parameters of a list of ASTNodes' first element. + * Note: Only works if the first element of the given list is a MethodDeclaration. Returns null otherwise. + * @param target the list of ASTNodes + * @return the parameters of target's first element (list of org.eclipse.jdt.core.dom.SingleVariableDeclaration) + */ + def dispatch static parameters(List target) { + if(target.head instanceof MethodDeclaration) { + return (target.head as MethodDeclaration).parameters as List + } + null + } + + /** + * Gets the class of a list of ASTNode's first element. + * Note: The the returned class will be on the same AST as the given list of ASTNodes' first element. + * @param target the list of ASTNodes + * @return the class of target's first element (org.eclipse.jdt.core.dom.TypeDeclaration) + */ + def static enclosingClass(List target) { + Utils.getTypeDeclaration(target.head) + } + + /** + * Generates a fresh TypeDeclaration identifier in the workspace. + * @return the newly generated identifier + */ def static generateNewName() { var int i = 1 var newName = "newLambda" @@ -125,24 +299,85 @@ class Check { newName } - def static references(TypeDeclaration typeDecl) { - val List refs = newArrayList + /** + * Determines if an identifier is used in the workspace as a TypeDeclaration identifier. + * @param name the identifier + * @return true, if identifier isn't used, false otherwise + */ + def static isFresh(String name) { + !allTypeDeclarationInWorkSpace.exists[it.name.identifier == name] + } + + /** + * Gets all references to a MethodDeclartion that can get accessed via public interface. + * @param methodName the MethodDeclaration's name + * @param methodParameters the MethodDeclaration's parameters + * @param targetTypeDeclaration the MethodDeclaration's TypeDeclaration + * @return list of ASTNodes + */ + def protected static publicReferences(String methodName, List methodParameters, TypeDeclaration targetTypeDeclaration) { + references("public", methodName, methodParameters, targetTypeDeclaration) + } + + /** + * Gets all references to a FieldDeclaration that can get accessed via public interface. + * @param fragmentNames the FieldDeclaration's fragment names + * @param targetTypeDeclaration the FieldDeclaration's TypeDeclaration + * @return list of ASTNodes + */ + def protected static publicReferences(List fragmentNames, TypeDeclaration targetTypeDecl) { + references("public", fragmentNames, targetTypeDecl) + } + + //////////////////////////// + //private/protected checks// + //////////////////////////// + + /** + * Gets all Assignments from a TypeDeclareation. + * @param typeDecl the target TypeDeclaration + * @return all Assignments in the target TypeDeclaration + */ + def protected static getAssignmentsInClass(TypeDeclaration typeDecl) { + val List assignments = newArrayList + val visitor = new ASTVisitor() { + override visit(Assignment assignment) { + if (assignment.leftHandSide instanceof SimpleName) { + assignments.add(assignment) + } + return true + } + } + typeDecl.accept(visitor) + assignments + } + + //gets all references to a TypeDeclaration in the workspace, except the TypeDeclaration itself + //TODO + def protected static references(TypeDeclaration typeDecl) { + val List references = newArrayList val binding = typeDecl.name.resolveBinding allTypeDeclarationInWorkSpace.forEach[ val visitor = new ASTVisitor() { override visit(SimpleName name) { if (name.resolveBinding.isEqualTo(binding) && name != typeDecl.name) { - refs.add(name) + references.add(name) } true } } it.accept(visitor) ] - refs + references } - def static contains(List references, List target) { + /** + * //TODO + * @param references + * @param target + * @return + */ + def protected static contains(List references, List target) { if(target.head instanceof ExpressionStatement && (target.head as ExpressionStatement).expression instanceof MethodInvocation && ((target.head as ExpressionStatement).expression as MethodInvocation).expression instanceof ClassInstanceCreation && @@ -154,18 +389,33 @@ class Check { } } } - return false + false } - def static getLambdaName(ExpressionStatement exprStatement) { + /** + * Gets the type identifier of a ClassInstanceCreation (lambda expression's expression). + * @param exprStatement the lambda expression (as an ExpressionStatement, which has a MethodInvocation expression) + * @return the lambda expression's identifier + */ + def protected static getLambdaName(ExpressionStatement exprStatement) { ((exprStatement.expression as MethodInvocation).expression as ClassInstanceCreation).type.toString } - def static getLambdaBody(ExpressionStatement exprStatement) { + /** + * Gets a ClassInstanceCreation's anonymous class declaration. + * @param exprStatement the lambda expression (as an ExpressionStatement, which has a MethodInvocation expression) + * @return the lambda expression's body + */ + def protected static getLambdaBody(ExpressionStatement exprStatement) { ((exprStatement.expression as MethodInvocation).expression as ClassInstanceCreation).anonymousClassDeclaration } - def static lambdaVariableWrites(AnonymousClassDeclaration anonClass) { + /** + * Gets all Assignments from an anonymous class declaration. + * @param anonClass the AnonymousClassDeclaration + * @return all Assignments from the given AnonymousClassDeclaration + */ + def protected static lambdaVariableAssignments(AnonymousClassDeclaration anonClass) { val List variableWrites = newArrayList anonClass.bodyDeclarations.forEach [ val visitor = new ASTVisitor() { @@ -178,34 +428,13 @@ class Check { variableWrites } - def static getVariableDeclarations(AnonymousClassDeclaration anonClass) { - val List variableDeclarations = newArrayList - anonClass.bodyDeclarations.forEach [ - val visitor = new ASTVisitor() { - override visit(VariableDeclarationStatement varDecl) { - variableDeclarations.add(varDecl) - } - } - (it as ASTNode).accept(visitor) - ] - variableDeclarations - } - - def static getAllFieldDeclarationsInClass(TypeDeclaration typeDecl) { - val List fieldDeclarations = newArrayList - typeDecl.bodyDeclarations.forEach[ - val visitor = new ASTVisitor() { - override visit(FieldDeclaration fieldDecl) { - - fieldDeclarations.add(fieldDecl) - } - } - (it as ASTNode).accept(visitor) - ] - fieldDeclarations - } - - def static isDeclaredIn(Assignment assignment, AnonymousClassDeclaration anonClass) { + /** + * Determines whether an Assignment's left hand side is declared in the given AnonymousClassDeclaration + * @param assignment the Assignment + * @param anonClass the AnonymousClassDeclaration + * @return true, if assignment's left hand side declared in anonClass + */ + def protected static isDeclaredIn(Assignment assignment, AnonymousClassDeclaration anonClass) { if(assignment.leftHandSide instanceof SimpleName) { val varName = (assignment.leftHandSide as SimpleName) val List namesList = newArrayList @@ -233,213 +462,111 @@ class Check { true } - def static isOnlyHaveAssignmentsWithFieldAccess(List target) { - - val List fieldDeclarations = newArrayList - allTypeDeclarationInWorkSpace.forEach[ - it.bodyDeclarations.forEach[ - if (it instanceof FieldDeclaration) { - fieldDeclarations.add(it) - } - ] - ] - - !target.exists[ - val visitor = new ASTVisitor(){ - public boolean found = false - override visit(SimpleName name) { - if (Utils.getAssignment(name) !== null && name == Utils.getAssignment(name).leftHandSide && !fieldDeclarations.exists[ - ((it as FieldDeclaration).fragments as List).exists[ - it.name.resolveBinding.isEqualTo(name.resolveBinding)] ]) { - found = true - return false - } - true - } - } - it.accept(visitor) - return visitor.found - ] - } - - def static containsValueReturn(List target) { - target.exists [ - val visitor = new ASTVisitor() { - public var found = false - override visit(ReturnStatement statement) { - if (statement.expression !== null) { - found = true - return false - } - true - } - } - it.accept(visitor) - visitor.found - ] - } - - def static containsVoidReturn(List target) { - target.exists [ - val visitor = new ASTVisitor() { - public var found = false - override visit(ReturnStatement statement) { - if (statement.expression === null) { - found = true - return false - } - true - } - } - it.accept(visitor) - visitor.found - ] - } - - def static getVoidReturn(List target) { - val List result = newArrayList - target.exists [ - val visitor = new ASTVisitor() { - public var found = false - override visit(ReturnStatement statement) { - if (statement.expression === null) { - found = true - result.add(statement) - return false - } - true - } - } - it.accept(visitor) - visitor.found - ] - result.head as ReturnStatement - } - - def static isLastExecutionPath(ReturnStatement statement) { - var firstLevelNodeInMethod = statement as ASTNode - while (!((firstLevelNodeInMethod.parent instanceof Block) && ((firstLevelNodeInMethod.parent as Block).parent instanceof MethodDeclaration))) { - firstLevelNodeInMethod = firstLevelNodeInMethod.parent - } - val node = firstLevelNodeInMethod - val nodesAfterReturnStatement = (firstLevelNodeInMethod.parent as Block).statements.dropWhile[it != node] - nodesAfterReturnStatement.size == 1 && nodesAfterReturnStatement.head == node - } - - - def static allExecutionPathContainsValueReturn(List target) { - - - - - - } - - - //method or field property getters - def static String getMethodName(List target) { - if (target.head instanceof MethodDeclaration) { - (target.head as MethodDeclaration).name.identifier - } - } - - def static List getFragmentNames(List target) { - if(target.head instanceof FieldDeclaration) { - val fragments = (target.head as FieldDeclaration).fragments as List - var List fragmentNames = newArrayList - for(fragment : fragments) { - fragmentNames.add(fragment.name.identifier) - } - fragmentNames - } - } - - def dispatch static type(MethodDeclaration methodDecl) { + /** + * Gets the return type of a MethodDeclaration. + * @param methodDecl the MethodDeclaration + * @return the return type of the given MethodDeclaration (org.eclipse.jdt.core.dom.Type) + */ + def protected dispatch static type(MethodDeclaration methodDecl) { methodDecl.returnType2 } - def dispatch static type(FieldDeclaration fieldDecl) { + /** + * Gets the type of a FieldDeclaration. + * @param fieldDecl the FieldDeclaration + * @return the type of the given FieldDeclaration (org.eclipse.jdt.core.dom.Type) + */ + def protected dispatch static type(FieldDeclaration fieldDecl) { fieldDecl.type } - def dispatch static Type type(List target) { - if (target.head instanceof MethodDeclaration) { - type(target.head) - } else if (target.head instanceof FieldDeclaration) { - type(target.head) - } - } - - def dispatch static visibility(FieldDeclaration fieldDecl) { + /** + * Gets the visibility of a FieldDeclaration. + * @param fieldDecl the FieldDeclaration + * @return the visibility of the given FieldDeclaration (hu.elte.refjava.lang.refJava.Visibility) + */ + def protected dispatch static visibility(FieldDeclaration fieldDecl) { val modifiers = fieldDecl.getModifiers switch modifiers { - case modifiers.bitwiseAnd(Modifier.PUBLIC) > 0 : "public" - case modifiers.bitwiseAnd(Modifier.PRIVATE) > 0 : "private" - case modifiers.bitwiseAnd(Modifier.PROTECTED) > 0 : "protected" - case modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 : "default" + case modifiers.bitwiseAnd(Modifier.PUBLIC) > 0 : Visibility.PUBLIC + case modifiers.bitwiseAnd(Modifier.PRIVATE) > 0 : Visibility.PRIVATE + case modifiers.bitwiseAnd(Modifier.PROTECTED) > 0 : Visibility.PROTECTED + case modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 : Visibility.PACKAGE } } - def dispatch static visibility(MethodDeclaration methodDecl) { + /** + * Gets the visibility of a MethodDeclaration. + * @param methodDecl the MethodDeclaration + * @return the visibility of the given MethodDeclaration (hu.elte.refjava.lang.refJava.Visibility) + */ + def protected dispatch static visibility(MethodDeclaration methodDecl) { val modifiers = methodDecl.getModifiers switch modifiers { - case modifiers.bitwiseAnd(Modifier.PUBLIC) > 0 : "public" - case modifiers.bitwiseAnd(Modifier.PRIVATE) > 0 : "private" - case modifiers.bitwiseAnd(Modifier.PROTECTED) > 0 : "protected" - case modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 : "default" - } - } - - def dispatch static String visibility(List target) { - if(target.head instanceof MethodDeclaration) { - visibility(target.head as MethodDeclaration) - } else if (target.head instanceof FieldDeclaration) { - visibility(target.head as FieldDeclaration) - } - } - - def dispatch static parameters(List target) { - if(target.head instanceof MethodDeclaration) { - (target.head as MethodDeclaration).parameters as List + case modifiers.bitwiseAnd(Modifier.PUBLIC) > 0 : Visibility.PUBLIC + case modifiers.bitwiseAnd(Modifier.PRIVATE) > 0 : Visibility.PRIVATE + case modifiers.bitwiseAnd(Modifier.PROTECTED) > 0 : Visibility.PROTECTED + case modifiers.bitwiseAnd(Modifier.PROTECTED) == 0 && modifiers.bitwiseAnd(Modifier.PRIVATE) == 0 && modifiers.bitwiseAnd(Modifier.PUBLIC) == 0 : Visibility.PACKAGE } } - def dispatch static parameters(MethodDeclaration methodDecl) { + /** + * Gets the parameters of a MethodDeclaration. + * @param methodDecl the MethodDeclaration + * @return the parameters of the given MethodDeclaration (list of org.eclipse.jdt.core.dom.SingleVariableDeclaration) + */ + def protected dispatch static parameters(MethodDeclaration methodDecl) { methodDecl.parameters as List } - - - //class checks - def static enclosingClass(List target) { - //val typeDecl = - Utils.getTypeDeclaration(target.head) - //allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] - } - - def static superClass(TypeDeclaration typeDecl) { + /** + * Gets the superclass of a TypeDeclaration. + * Note: Only works if the given TypeDeclaration has a superclass. Also, the returned superclass will be on an another AST. + * @param typeDecl the TypeDeclaration + * @return typeDecl's superclass (org.eclipse.jdt.core.dom.TypeDeclaration) + */ + def protected static superClass(TypeDeclaration typeDecl) { allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.superclassType.resolveBinding.qualifiedName] } - def static hasSuperClass(TypeDeclaration typeDecl) { + + /** + * Determines whether a TypeDeclaration has a superclass. + * @param typeDecl the TypeDeclaration + * @return true, if typeDecl has a superclass, false otherwise + */ + def protected static hasSuperClass(TypeDeclaration typeDecl) { return typeDecl.superclassType !== null } - def static isPrivate(List target) { + /** + * Determines whether a list of ASTNode's first element's visibility is 'private'. + * Note: Only works if the given list of ASTNodes' first element if either a FieldDeclaration, or a MethodDeclaration. Returns false otherwise. + * @param target the list of ASTNodes + * @return true, if target's first element's visibility if 'private', false otherwise + */ + def protected static isPrivate(List target) { if (target.head instanceof FieldDeclaration) { return Modifier.isPrivate( (target.head as FieldDeclaration).getModifiers()) } else if(target.head instanceof MethodDeclaration) { return Modifier.isPrivate( (target.head as MethodDeclaration).getModifiers()) } + false } - def static references(List target, TypeDeclaration typeDecl) { + /** + * Gets all the references from a TypeDeclarations to the first element given list of ASTNodes. + * Note: Only works if the first element of the given list is either a FieldDeclaration, or a MethodDeclaration. Returns an empty list otherwise. + * @param target the list of ASTNodes + * @param typeDecl the TypeDeclaration + * @return the references to the first element of target + */ + def protected static references(List target, TypeDeclaration typeDecl) { val bodyDeclarations = typeDecl.bodyDeclarations val List refs = newArrayList if (target.head instanceof FieldDeclaration) { val fieldDecl = target.head as FieldDeclaration - //val fieldDecl = getFieldFromClass(getFragmentNames(target), typeDecl) val fragments = fieldDecl.fragments as List for(fragment : fragments) { val binding = fragment.resolveBinding @@ -457,7 +584,6 @@ class Check { } } else if (target.head instanceof MethodDeclaration) { val methodDecl = target.head as MethodDeclaration - //val methodDecl = getMethodFromClass(targetMethod.name.identifier, targetMethod.parameters, typeDecl) val binding = methodDecl.resolveBinding for(declaration : bodyDeclarations) { val visitor = new ASTVisitor() { @@ -474,6 +600,12 @@ class Check { refs } + /** + * Determines whether a given identifier is used as a FieldDeclaration's identifier in a TypeDeclaration. + * @param fragmentName the identifier + * @param typeDecl the TypeDeclaration + * @return true, if fragmentName isn't used as an identifier , false otherwise + */ def private static isUniqueFieldIn(String fragmentName, TypeDeclaration typeDecl) { typeDecl.bodyDeclarations.filter[it instanceof FieldDeclaration].forall[ !((it as FieldDeclaration).fragments as List).exists[ @@ -482,13 +614,26 @@ class Check { ] } - def static isUniqueFieldIn(List fragmentNames, TypeDeclaration typeDecl) { + /** + * Determines whether neither of the given identifiers is used as a FieldDeclaration's identifier in a TypeDeclaration. + * @param fragmentNames the list of identifiers + * @param typeDecl the TypeDeclaration + * @return true, if none of fragmentNames used as an identifier , false otherwise + */ + def protected static isUniqueFieldIn(List fragmentNames, TypeDeclaration typeDecl) { fragmentNames.forall[ isUniqueFieldIn(it, typeDecl) ] } - def static isUniqueMethodIn(String methodName, List parameters, TypeDeclaration typeDecl) { + /** + * Determines whether if a method exists with the same name and parameter types as the given name and parameter types in a TypeDeclaration. + * @param methodName the method's name + * @param parameters the method's parameters + * @param typeDecl the TypeDeclaration + * @return true, if there isn't a method with the same name and parameter, false otherwise + */ + def protected static isUniqueMethodIn(String methodName, List parameters, TypeDeclaration typeDecl) { val methodsInClass = typeDecl.bodyDeclarations.filter[it instanceof MethodDeclaration] for (method : methodsInClass) { @@ -512,7 +657,14 @@ class Check { true } - def static accessedFieldsOfEnclosingClass(List target, TypeDeclaration typeDecl) { + /** + * Gets all the FielDeclaration that have a reference inside the first element of the given list of ASTNodes' body, in a TypeDeclaration. + * Note: Only works if the fist element of the given list is a MethodDeclaration. Returns an empty list otherwise. + * @param target the list of ASTNodes + * @param typeDecl the TypeDeclaration + * @return the referenced FieldDeclarations + */ + def protected static accessedFieldsOfEnclosingClass(List target, TypeDeclaration typeDecl) { val methodDecl = target.head as MethodDeclaration val List accessedFields = newArrayList @@ -545,7 +697,14 @@ class Check { accessedFields } - def static accessedMethodsOfEnclosingClass(List target, TypeDeclaration typeDecl) { + /** + * Gets all the MethodDeclarations that have a reference inside the first element of the given list of ASTNodes' body, in a TypeDeclaration. + * Note: Only works if the fist element of the given list is a MethodDeclaration. Returns an empty list otherwise. + * @param target the list of ASTNodes + * @param typeDecl the TypeDeclaration + * @return the referenced MethodDeclarations + */ + def protected static accessedMethodsOfEnclosingClass(List target, TypeDeclaration typeDecl) { val methodDecl = target.head as MethodDeclaration val List accessedMethods = newArrayList @@ -575,7 +734,14 @@ class Check { accessedMethods } - def static isOverrideIn(String methodName, List parameters, TypeDeclaration typeDecl){ + /** + * Determines whether if a method exists with the same name and parameter types as the given name and parameter types in a one of the given TypeDeclaration's superclass. + * @param methodName the method's name + * @param parameters the method's parameters + * @param typeDecl the TypeDeclaration + * @return true, if there isn't a method with the same name and parameter, false otherwise + */ + def protected static isOverrideIn(String methodName, List parameters, TypeDeclaration typeDecl){ var superClassToCheck = typeDecl var found = false @@ -586,7 +752,15 @@ class Check { found } - def static overridenMethodFrom(String methodName, List parameters, TypeDeclaration typeDecl) { + /** + * Gets the method with the same name and parameter types as the given name and parameter types from a first of the given TypeDeclaration's superclass, that has one. + * Note: Only works if such a method exists. + * @param methodName the method's name + * @param parameters the method's parameters + * @param typeDecl the TypeDeclaration + * @return the method with the same name and parameter types + */ + def protected static overridenMethodFrom(String methodName, List parameters, TypeDeclaration typeDecl) { var superClassToCheck = typeDecl var found = false var MethodDeclaration method @@ -600,7 +774,13 @@ class Check { method } - def static getFieldFromClass(List fragmentNames, TypeDeclaration typeDecl) { + /** + * Gets the FieldDeclaration from a TypeDeclaration with the given list of identifiers. + * @param fragmentNames the list of identifiers + * @param typeDecl the TypeDeclaration + * @return the FieldDeclaration with the given list of identifiers + */ + def protected static getFieldFromClass(List fragmentNames, TypeDeclaration typeDecl) { typeDecl.bodyDeclarations.findFirst[ val iter = fragmentNames.iterator it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments as List).forall[ @@ -613,10 +793,17 @@ class Check { ] as FieldDeclaration } - def static getMethodFromClass(String methodName, List parameters, TypeDeclaration typeDecl) { + /** + * Gets the MethodDeclaration from a TypeDeclaration with the given name and parameter types. + * @param methodName the visibility to be examined + * @param parameters the visibility that targetVisibility will be compared to + * @param typeDecl the TypeDeclaration + * @return the MethodDeclaration with the given name and parameter types + */ + def protected static getMethodFromClass(String methodName, List parameters, TypeDeclaration typeDecl) { val methodsInClass = typeDecl.bodyDeclarations.filter[it instanceof MethodDeclaration] var MethodDeclaration result - + for(method : methodsInClass) { if ((method as MethodDeclaration).name.identifier == methodName && parameters.size == ((method as MethodDeclaration).parameters.size)) { if(parameters.size == 0) { @@ -638,16 +825,28 @@ class Check { result } - def static isLessVisible(String targetVisibility, String actualVisibility) { - if ((actualVisibility == "public" && (targetVisibility == "private" || targetVisibility == "default" || targetVisibility == "protected")) || - actualVisibility == "protected" && (targetVisibility == "private" || targetVisibility == "default") || - actualVisibility == "default" && (targetVisibility == "private") ) { + /** + * Determines whether targetVisibility is less visible than actualVisibility + * @param targetVisibility the visibility to be examined + * @param actualVisibility the visibility that targetVisibility will be compared to + * @return true, if targetVisibility is less visible than actualVisibility, false otherwise + */ + def protected static isLessVisible(Visibility targetVisibility, Visibility actualVisibility) { + if ((actualVisibility == Visibility.PUBLIC && (targetVisibility == Visibility.PRIVATE || targetVisibility == Visibility.PACKAGE || targetVisibility == Visibility.PROTECTED)) || + actualVisibility == Visibility.PROTECTED && (targetVisibility == Visibility.PRIVATE || targetVisibility == Visibility.PACKAGE) || + actualVisibility == Visibility.PACKAGE && (targetVisibility == Visibility.PRIVATE) ) { true } else { false } } + /** + * Determines whether targetType is a subclass of actualType. Both are ITypeBindings. + * @param targetType the targetType to be examined + * @param actualType the type that targetType will be compared to + * @return true, if targetType is a subclass of actualType, false otherwise + */ def private static isSubClassOf(ITypeBinding targetType, ITypeBinding actualType) { var tmp = targetType var boolean l = targetType.isEqualTo(actualType) @@ -658,7 +857,13 @@ class Check { return l } - def static isSubTypeOf(Type targetType, Type actualType) { + /** + * Determines whether targetType is a subtype of actualType. Both are org.eclipse.jdt.core.dom.Type. + * @param targetType the targetType to be examined + * @param actualType the type that targetType will be compared to + * @return true, if targetType is a subtype of actualType, false otherwise + */ + def protected static isSubTypeOf(Type targetType, Type actualType) { if (targetType.isPrimitiveType && actualType.isPrimitiveType) { targetType.toString == actualType.toString } else if (targetType.arrayType && actualType.arrayType) { @@ -678,6 +883,12 @@ class Check { } } + /** + * + * @param name + * @param typeDecl + * @return + */ def private static getTypeOfFieldOrVarDeclOfName(Name name, TypeDeclaration typeDecl) { val binding = if (name instanceof QualifiedName) { name.qualifier.resolveBinding @@ -714,19 +925,32 @@ class Check { } } - def static referredField(ASTNode reference) { - val binding = (reference as SimpleName).resolveBinding - - for(typeDecl : allTypeDeclarationInWorkSpace) { - for (declaration : typeDecl.bodyDeclarations) { - if(declaration instanceof FieldDeclaration && ((declaration as FieldDeclaration).fragments as List).exists[it.resolveBinding.isEqualTo(binding)] ) { - return declaration as FieldDeclaration + /** + * Gets the field the is referred by an ASTNode. + * Note: Only works if the reference is a SimpleName, and referring to a Field. Returns null otherwise. + * @param reference the ASTNode + * @return the referred FieldDeclaration + */ + def protected static referredField(ASTNode reference) { + if(reference instanceof SimpleName) { + val binding = (reference as SimpleName).resolveBinding + for(typeDecl : allTypeDeclarationInWorkSpace) { + for (declaration : typeDecl.bodyDeclarations) { + if(declaration instanceof FieldDeclaration && ((declaration as FieldDeclaration).fragments as List).exists[it.resolveBinding.isEqualTo(binding)] ) { + return declaration as FieldDeclaration + } } } } - //error + null } + /** + * Gets all references to a FieldDeclaration in one of the given TypeDeclaration's superclass, that can potentially get violated of it gets overridden. + * @param methodName the FieldDeclaration's fragment names + * @param typeDecl the TypeDeclaration + * @return all references that can potentially get violated if an override happens + */ def static private referencesThatCanGetViolated(String fragmentName, TypeDeclaration typeDecl) { val List references = newArrayList var TypeDeclaration superclassWithSameField = allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] @@ -748,7 +972,6 @@ class Check { val List a = newArrayList a.add(fieldInSuperClass) - for (t : allTypeDeclarationInWorkSpace) { val refs = references(a, t) for (r : refs) { @@ -765,23 +988,29 @@ class Check { references } + /** + * Gets all references to a MethodDeclaration in one of the given TypeDeclaration's superclass, that can potentially get violated of it gets overridden. + * @param methodName the MethodDeclaration's name + * @param methodParameters the MethodDeclaration's parameters + * @param typeDecl the TypeDeclaration + * @return all references that can potentially get violated if an override happens + */ def private static referencesThatCanGetViolated(String methodName, List methodParameters, TypeDeclaration typeDecl) { val List references = newArrayList - var TypeDeclaration superclassWithSameField = allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] + var TypeDeclaration superclassWithSameMethod = allTypeDeclarationInWorkSpace.findFirst[it.resolveBinding.qualifiedName == typeDecl.resolveBinding.qualifiedName] var boolean found = false - while(superclassWithSameField.hasSuperClass && !found) { - superclassWithSameField = superclassWithSameField.superClass - found = !isUniqueMethodIn(methodName, methodParameters, superclassWithSameField) + while(superclassWithSameMethod.hasSuperClass && !found) { + superclassWithSameMethod = superclassWithSameMethod.superClass + found = !isUniqueMethodIn(methodName, methodParameters, superclassWithSameMethod) } if (!found) { return references } - val methodInSuperClass = getMethodFromClass(methodName, methodParameters, superclassWithSameField) + val methodInSuperClass = getMethodFromClass(methodName, methodParameters, superclassWithSameMethod) val List a = newArrayList a.add(methodInSuperClass) - for (t : allTypeDeclarationInWorkSpace) { val refs = references(a, t) for (r : refs) { @@ -798,25 +1027,30 @@ class Check { references } + /** + * Gets all the references to a FieldDeclaration, and separates them by their visibility. + * @param whichReferences decides if whether the public, or non-public references are returned + * @param fragmentNames the FieldDeclaration's fragment names + * @param targetTypeDecl the FieldDeclaration's TypeDeclaration + * @return if whichReferences equals "public", the references that can get accessed via public interface are returned (list of ASTNodes) + * if whichReferences equals "nonPublic", the references the cannot get accessed via public interface are returned (list of ASTNodes) + */ def private static references(String whichReferences, List fragmentNames, TypeDeclaration targetTypeDecl) { val List publicReferences = newArrayList - val List privateReferences = newArrayList + val List nonPublicReferences = newArrayList for(fragmentName : fragmentNames) { val allReferences = referencesThatCanGetViolated(fragmentName, targetTypeDecl) - println("Allrefs: " +allReferences) - val Queue methodsToCheck = newLinkedList for(ref : allReferences) { - if(Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility != "private") { + if(Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility == Visibility.PUBLIC) { publicReferences.add(ref) - } else if (Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility == "private"){ + } else if (Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility != Visibility.PUBLIC){ methodsToCheck.add(Utils.getMethodDeclaration(ref)) while(!methodsToCheck.empty) { val method = methodsToCheck.remove - var List methodRefs = newArrayList for (t : allTypeDeclarationInWorkSpace) { val List tmp = newArrayList @@ -825,17 +1059,17 @@ class Check { } if(!methodRefs.empty) { for(methodRef : methodRefs) { - if(Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility != "private") { + if(Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility == Visibility.PUBLIC) { publicReferences.add(ref) - } else if (Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility == "private") { + } else if (Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility != Visibility.PUBLIC) { methodsToCheck.add(Utils.getMethodDeclaration(methodRef)) } else if(Utils.getMethodDeclaration(methodRef) === null) { publicReferences.add(ref) } } } else { - if(!privateReferences.exists[it == ref]) { - privateReferences.add(ref) + if(!nonPublicReferences.exists[it == ref]) { + nonPublicReferences.add(ref) } } } @@ -847,27 +1081,35 @@ class Check { if(whichReferences == "public") { return publicReferences - } else if(whichReferences == "private") { - return privateReferences + } else if(whichReferences == "nonPublic") { + return nonPublicReferences } } + /** + * Gets all the references to a MethodDeclaration, and separates them by their visibility. + * @param whichReferences decides if whether the public, or non-public references are returned + * @param methodName the MethodDeclaration's name + * @param mathodParameters the MethodDeclaration's parameters + * @param targetTypeDecl the MethodDeclaration's TypeDeclaration + * @return if whichReferences equals "public", the references that can get accessed via public interface are returned (list of ASTNodes) + * if whichReferences equals "nonPublic", the references the cannot get accessed via public interface are returned (list of ASTNodes) + */ def private static references(String whichReferences, String methodName, List methodParameters,TypeDeclaration targetTypeDecl) { val List publicReferences = newArrayList - val List privateReferences = newArrayList + val List nonPublicReferences = newArrayList val allReferences = referencesThatCanGetViolated(methodName, methodParameters, targetTypeDecl) val Queue methodsToCheck = newLinkedList for(ref : allReferences) { - if(Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility != "private") { + if(Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility == Visibility.PUBLIC) { publicReferences.add(ref) - } else if (Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility == "private"){ + } else if (Utils.getMethodDeclaration(ref) !== null && Utils.getMethodDeclaration(ref).visibility != Visibility.PUBLIC){ methodsToCheck.add(Utils.getMethodDeclaration(ref)) while(!methodsToCheck.empty) { val method = methodsToCheck.remove - var List methodRefs = newArrayList for (t : allTypeDeclarationInWorkSpace) { val List tmp = newArrayList @@ -877,17 +1119,17 @@ class Check { if(!methodRefs.empty) { for(methodRef : methodRefs) { - if(Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility != "private") { + if(Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility == Visibility.PUBLIC) { publicReferences.add(ref) - } else if (Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility == "private") { + } else if (Utils.getMethodDeclaration(methodRef) !== null && Utils.getMethodDeclaration(methodRef).visibility != Visibility.PUBLIC) { methodsToCheck.add(Utils.getMethodDeclaration(methodRef)) } else if(Utils.getMethodDeclaration(methodRef) === null) { publicReferences.add(ref) } } } else { - if(!privateReferences.exists[it == ref]) { - privateReferences.add(ref) + if(!nonPublicReferences.exists[it == ref]) { + nonPublicReferences.add(ref) } } } @@ -898,25 +1140,27 @@ class Check { if(whichReferences == "public") { return publicReferences - } else if(whichReferences == "private") { - return privateReferences + } else if(whichReferences == "nonPublic") { + return nonPublicReferences } } - def static publicReferences(List fragmentNames, TypeDeclaration targetTypeDecl) { - references("public", fragmentNames, targetTypeDecl) - } - - def static publicReferences(String methodName, List methodParameters, TypeDeclaration targetTypeDeclaration) { - references("public", methodName, methodParameters, targetTypeDeclaration) + /** + * Gets all references to a FieldDeclaration that cannot get accessed via public interface. + * @param fragmentNames the FieldDeclaration's fragment names + * @param targetTypeDeclaration the FieldDeclaration's TypeDeclaration + * @return list of ASTNodes + */ + def protected static nonPublicReferences(List fragmentNames, TypeDeclaration targetTypeDecl) { + references("nonPublic", fragmentNames, targetTypeDecl) } - def static privateReferences(List fragmentNames, TypeDeclaration targetTypeDecl) { - references("private", fragmentNames, targetTypeDecl) - } - - - def static getAllSubClasses(TypeDeclaration typeDecl) { + /** + * Gets all subclasses of a TypeDeclaration. + * @param typeDecl the TypeDeclaration + * @return all subclasses of typeDecl (list of org.eclipse.jdt.core.dom.TypeDeclaration) + */ + def protected static getAllSubClasses(TypeDeclaration typeDecl) { val binding = typeDecl.resolveBinding val List subClasses = newArrayList @@ -928,7 +1172,14 @@ class Check { subClasses } - def static overridesOf(String methodName, List methodParameters, TypeDeclaration targetTypeDeclaration) { + /** + * Gets all MethodDeclaration with the same name and parameter types as the given name and parameter types from the given TypeDeclaration's subclasses. + * @param methodName the identifier of the method + * @param methodParameters the list of parameters of the method + * @param targetTypeDeclaration the TypeDeclaration + * @return list of MethodDeclarations + */ + def protected static overridesOf(String methodName, List methodParameters, TypeDeclaration targetTypeDeclaration) { val subClasses = targetTypeDeclaration.allSubClasses val List overriddenMethods = newArrayList subClasses.forEach[ @@ -938,8 +1189,4 @@ class Check { ] overriddenMethods } - - - - } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend index ecd77ad..36eb60a 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/ClassRefactoring.xtend @@ -15,6 +15,7 @@ import org.eclipse.jface.text.Document import org.eclipse.jface.text.IDocument import static hu.elte.refjava.api.Check.* +import hu.elte.refjava.lang.refJava.Visibility class ClassRefactoring implements Refactoring { @@ -46,7 +47,7 @@ class ClassRefactoring implements Refactoring { parameterBindings.clear visibilityBindings.clear argumentBindings.clear - setMetaVariables() + setMetaVariables this.matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) this.builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) this.matchingString = matchingPatternString @@ -154,11 +155,10 @@ class ClassRefactoring implements Refactoring { val List definition = newArrayList definition.add(newMethodInClass) - val overrideCheck = if(isOverrideIn(getMethodName(definition), parameters(definition), enclosingClass(target))) { !isLessVisible(visibility(definition), visibility(overridenMethodFrom(getMethodName(definition), parameters(definition), enclosingClass(target)))) && isSubTypeOf(type(definition), type(overridenMethodFrom(getMethodName(definition), parameters(definition), enclosingClass(target)))) - && visibility(overridenMethodFrom(getMethodName(definition), parameters(definition), enclosingClass(target))) != "public" + && visibility(overridenMethodFrom(getMethodName(definition), parameters(definition), enclosingClass(target))) != Visibility.PUBLIC && publicReferences(getMethodName(definition), parameters(definition), enclosingClass(target)).empty } else { true } val safeCheck = isUniqueMethodIn(getMethodName(definition), parameters(definition), enclosingClass(target)) @@ -179,7 +179,7 @@ class ClassRefactoring implements Refactoring { val overrideCheck = if(isOverrideIn(getMethodName(target), parameters(target), superClass(enclosingClass(target)))) { !isLessVisible(visibility(target), visibility(overridenMethodFrom(getMethodName(target), parameters(target), superClass(enclosingClass(target))))) && isSubTypeOf(type(target), type(overridenMethodFrom(getMethodName(target), parameters(target), superClass(enclosingClass(target))))) - && visibility(overridenMethodFrom(getMethodName(target), parameters(target), superClass(enclosingClass(target)))) != "public" + && visibility(overridenMethodFrom(getMethodName(target), parameters(target), superClass(enclosingClass(target)))) != Visibility.PUBLIC && publicReferences(getMethodName(target), parameters(target), superClass(enclosingClass(target))).empty } else { true } return hasSuperClass(enclosingClass(target)) @@ -199,7 +199,7 @@ class ClassRefactoring implements Refactoring { && privateCheck && isUniqueFieldIn(getFragmentNames(target), superClass(enclosingClass(target))) && publicReferences(getFragmentNames(target), superClass(enclosingClass(target))).empty - && privateReferences(getFragmentNames(target), superClass(enclosingClass(target))).forall [ + && nonPublicReferences(getFragmentNames(target), superClass(enclosingClass(target))).forall [ isSubTypeOf(Check.type(target), type(referredField(it))) ] } false @@ -261,6 +261,7 @@ class ClassRefactoring implements Refactoring { targetClass.bodyDeclarations.findFirst[it instanceof FieldDeclaration && ((it as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier == ((target.head as FieldDeclaration).fragments.head as VariableDeclarationFragment).name.identifier] } + superClass.bodyDeclarations.add(objectToInsertOrMove) targetClass.bodyDeclarations.remove(methodOrFieldToDelete) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend index 3ae676f..cb4f5ca 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LambdaRefactoring.xtend @@ -19,6 +19,7 @@ import static hu.elte.refjava.api.Check.* class LambdaRefactoring implements Refactoring { List target + List allTypeDecl IDocument document val PatternMatcher matcher @@ -45,14 +46,14 @@ class LambdaRefactoring implements Refactoring { parameterBindings.clear visibilityBindings.clear argumentBindings.clear - setMetaVariables() + setMetaVariables this.matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) this.builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) this.matchingString = matchingPatternString this.replacementString = replacementPatternString - val matchingPatternsFirstElement = PatternParser.parse(matchingPatternString).patterns.get(0) - if (matchingPatternsFirstElement instanceof PMemberFeatureCall && (matchingPatternsFirstElement as PMemberFeatureCall).memberCallTarget instanceof PConstructorCall && - ((matchingPatternsFirstElement as PMemberFeatureCall).memberCallTarget as PConstructorCall).anonInstance) { + + val matchingPatterns = PatternParser.parse(matchingPatternString).patterns + if (matchingPatterns.exists[Utils.isValidLambdaExpression(it)]) { this.refactoringType = RefactoringType.MODIFICATION } else { this.interfaceToModify = null @@ -63,17 +64,9 @@ class LambdaRefactoring implements Refactoring { override init(List target, IDocument document, List allTypeDeclInWorkspace) { this.target = target this.document = document + this.allTypeDecl = allTypeDeclInWorkspace Check.allTypeDeclarationInWorkSpace = allTypeDeclInWorkspace - if(refactoringType == RefactoringType.MODIFICATION) { - val matchingLambdaExpression = PatternParser.parse(matchingString).patterns.get(0) as PMemberFeatureCall - val interfaceName = if((matchingLambdaExpression.memberCallTarget as PConstructorCall).metaName !== null) { - nameBindings.get(((matchingLambdaExpression.memberCallTarget as PConstructorCall).metaName as PMetaVariable).name) - } else { - (matchingLambdaExpression.memberCallTarget as PConstructorCall).name - } - this.interfaceToModify = allTypeDeclInWorkspace.findFirst[it.name.identifier == interfaceName] - } } override apply() { @@ -139,7 +132,6 @@ class LambdaRefactoring implements Refactoring { def protected check() { if(refactoringType == RefactoringType.NEW) { - val iCompUnit = Utils.getICompilationUnit(target.head) val compUnit = Utils.parseSourceCode(iCompUnit) @@ -151,14 +143,19 @@ class LambdaRefactoring implements Refactoring { } val newLambdaExpression = builder.build(replacementPattern, compUnit.AST, bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, replacementTypeReferenceString).head as ExpressionStatement - - println("ASD") return isFresh(getLambdaName(newLambdaExpression)) - && (lambdaVariableWrites(getLambdaBody(newLambdaExpression)).forall[isDeclaredIn(it, getLambdaBody(newLambdaExpression))] - || isOnlyHaveAssignmentsWithFieldAccess(target)) + && (lambdaVariableAssignments(getLambdaBody(newLambdaExpression)).forall[isDeclaredIn(it, getLambdaBody(newLambdaExpression))]) } else { + val matchingLambdaExpression = PatternParser.parse(matchingString).patterns.get(0) as PMemberFeatureCall + val interfaceName = if((matchingLambdaExpression.memberCallTarget as PConstructorCall).metaName !== null) { + nameBindings.get(((matchingLambdaExpression.memberCallTarget as PConstructorCall).metaName as PMetaVariable).name) + } else { + (matchingLambdaExpression.memberCallTarget as PConstructorCall).name + } + this.interfaceToModify = allTypeDecl.findFirst[it.name.identifier == interfaceName] + return references(interfaceToModify).size == 1 && contains(references(interfaceToModify), target) } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend index 7a213db..4209c6e 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/LocalRefactoring.xtend @@ -23,13 +23,13 @@ class LocalRefactoring implements Refactoring { protected String definitionTypeReferenceString List replacement - protected new(String matchingPatternString, String replacementPatternString) { + new(String matchingPatternString, String replacementPatternString) { nameBindings.clear typeBindings.clear parameterBindings.clear visibilityBindings.clear argumentBindings.clear - setMetaVariables() + setMetaVariables this.matcher = new PatternMatcher(PatternParser.parse(matchingPatternString)) this.builder = new ASTBuilder(PatternParser.parse(replacementPatternString)) } @@ -93,7 +93,12 @@ class LocalRefactoring implements Refactoring { val rewrite = builder.rewrite target.tail.forEach[rewrite.remove(it, null)] - val group = rewrite.createGroupNode(replacement) + val group = if (replacement.size == 0) { + null + } else { + rewrite.createGroupNode(replacement) + } + rewrite.replace(target.head, group, null) val edits = rewrite.rewriteAST(document, null) edits.apply(document) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend index 34e86ef..04c4428 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/Refactoring.xtend @@ -33,4 +33,4 @@ interface Refactoring { def Status apply() -} +} \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend index d07aca2..a936a1a 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend @@ -25,6 +25,7 @@ import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword import org.eclipse.jdt.core.dom.SingleVariableDeclaration import org.eclipse.jdt.core.dom.Type import org.eclipse.jdt.core.dom.rewrite.ASTRewrite +import hu.elte.refjava.lang.refJava.PReturnExpression class ASTBuilder { @@ -68,8 +69,9 @@ class ASTBuilder { this.typeReferenceQueue.addAll(tmp) } - if(pattern instanceof PNothingExpression) { - null + if(pattern.patterns.head instanceof PNothingExpression) { + val List emptyList = newArrayList + emptyList } else { pattern.patterns.doBuildPatterns } @@ -88,7 +90,12 @@ class ASTBuilder { newInterface.interface = true if((lambdaExpr.memberCallTarget as PConstructorCall).metaName !== null) { - newInterface.name.identifier = Check.generateNewName() + val name = ((lambdaExpr.memberCallTarget as PConstructorCall).metaName as PMetaVariable).name + if (nameBindings.get(name) === null) { + newInterface.name.identifier = Check.generateNewName() + } else { + newInterface.name.identifier = nameBindings.get(name) + } } else { newInterface.name.identifier = (lambdaExpr.memberCallTarget as PConstructorCall).name } @@ -193,16 +200,16 @@ class ASTBuilder { } //adding method parameters - if (methodDecl.arguments.size > 0) { - for(argument : methodDecl.arguments) { + if (methodDecl.parameters.size > 0) { + for(argument : methodDecl.parameters) { val typeName = typeReferenceQueue.remove val methodParameterDeclaration = ast.newSingleVariableDeclaration methodParameterDeclaration.type = Utils.getTypeFromId(typeName, ast) methodParameterDeclaration.name.identifier = argument.name method.parameters.add(methodParameterDeclaration) } - } else if (methodDecl.metaArguments !== null) { - val parameterList = parameterBindings.get((methodDecl.metaArguments as PMetaVariable).name) + } else if (methodDecl.metaParameters !== null) { + val parameterList = parameterBindings.get((methodDecl.metaParameters as PMetaVariable).name) method.parameters.addAll(ASTNode.copySubtrees(ast, parameterList)) } @@ -263,42 +270,42 @@ class ASTBuilder { def private dispatch doBuild(PVariableDeclaration varDecl) { val fragment = ast.newVariableDeclarationFragment - //adding variable name + //adding field name if(varDecl.metaName !== null) { fragment.name.identifier = nameBindings.get( (varDecl.metaName as PMetaVariable).name ) } else { fragment.name.identifier = varDecl.name } - val newVar = ast.newFieldDeclaration(fragment) + val newField = ast.newFieldDeclaration(fragment) - //adding variable visibility + //adding field visibility if (varDecl.metaVisibility !== null) { val metaVarName = (varDecl.metaVisibility as PMetaVariable).name switch visibilityBindings.get(metaVarName) { - case PUBLIC: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) - case PRIVATE: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) - case PROTECTED: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + case PUBLIC: newField.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: newField.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: newField.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) default: {} } } else { switch varDecl.visibility { - case PUBLIC: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) - case PRIVATE: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) - case PROTECTED: newVar.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) + case PUBLIC: newField.modifiers().add(ast.newModifier(ModifierKeyword.PUBLIC_KEYWORD)) + case PRIVATE: newField.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD)) + case PROTECTED: newField.modifiers().add(ast.newModifier(ModifierKeyword.PROTECTED_KEYWORD)) default: {} } } - //adding variable type + //adding field type if(varDecl.type !== null) { - newVar.type = Utils.getTypeFromId(typeReferenceQueue.remove, ast) + newField.type = Utils.getTypeFromId(typeReferenceQueue.remove, ast) } else { val name = (varDecl.metaType as PMetaVariable).name - newVar.type = ASTNode.copySubtree(ast, typeBindings.get(name)) as Type - //newVar.type = Utils.getTypeFromId(typeBindings.get(name).resolveBinding.qualifiedName, ast) + newField.type = ASTNode.copySubtree(ast, typeBindings.get(name)) as Type } - newVar + + newField } //method invocation (with expression) builder @@ -350,6 +357,21 @@ class ASTBuilder { statement } + //return statement builder + def private dispatch ASTNode doBuild(PReturnExpression returnExpr) { + val returnStatement = ast.newReturnStatement + + if(returnExpr.expression !== null && returnExpr.expression instanceof PMetaVariable) { + val expression = bindings.get((returnExpr.expression as PMetaVariable).name) + println(expression.head.class) + if (expression.head instanceof Expression) { + val copy = ASTNode.copySubtree(ast, expression.head) as Expression + returnStatement.expression = copy + } + } + returnStatement + } + //block builder def private dispatch doBuild(PBlockExpression blockPattern) { val block = ast.newBlock diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend index dca7c9f..bc26516 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend @@ -29,6 +29,8 @@ import org.eclipse.jdt.core.dom.VariableDeclarationStatement import org.eclipse.xtext.EcoreUtil2 import org.eclipse.jdt.core.dom.Expression import hu.elte.refjava.lang.refJava.PFeatureCall +import hu.elte.refjava.lang.refJava.PReturnExpression +import org.eclipse.jdt.core.dom.ReturnStatement class PatternMatcher { @@ -211,11 +213,11 @@ class PatternMatcher { //matching method parameters var boolean parameterCheck = true - if (pMethodDecl.arguments.size > 0) { - if (pMethodDecl.arguments.size != methodDecl.parameters.size) { + if (pMethodDecl.parameters.size > 0) { + if (pMethodDecl.parameters.size != methodDecl.parameters.size) { parameterCheck = false } else { - val argIt = pMethodDecl.arguments.iterator + val argIt = pMethodDecl.parameters.iterator val paramIt = (methodDecl.parameters as List).iterator while(argIt.hasNext && parameterCheck) { val arg = argIt.next @@ -223,9 +225,9 @@ class PatternMatcher { parameterCheck = param.name.identifier == arg.name && param.type.resolveBinding.qualifiedName == typeReferenceQueue.remove } } - } else if (pMethodDecl.metaArguments !== null) { - val metaVar = pMethodDecl.metaArguments as PMetaVariable - val parameters = parameterBindings.get((pMethodDecl.metaArguments as PMetaVariable).name) + } else if (pMethodDecl.metaParameters !== null) { + val metaVar = pMethodDecl.metaParameters as PMetaVariable + val parameters = parameterBindings.get((pMethodDecl.metaParameters as PMetaVariable).name) if (parameters === null) { parameterBindings.put(metaVar.name, methodDecl.parameters) parameterCheck = true @@ -275,9 +277,6 @@ class PatternMatcher { //matching method invocation parameters var boolean argumentCheck = true if(featureCall.memberCallArguments !== null) { - //TODO - - val metaVarName = (featureCall.memberCallArguments as PMetaVariable).name if (argumentBindings.get(metaVarName) === null) { argumentBindings.put(metaVarName, methodInv.arguments) @@ -287,7 +286,7 @@ class PatternMatcher { if(methodInv.arguments.size != arguments.size) { argumentCheck = false } else { - //TODO + //currently we can't assign values to argument-binding meta variables argumentCheck = true } } @@ -328,7 +327,6 @@ class PatternMatcher { //matching method invocation parameters var boolean argumentCheck = true if(featureCall.featureCallArguments !== null) { - //TODO val metaVarName = (featureCall.featureCallArguments as PMetaVariable).name if (argumentBindings.get(metaVarName) === null) { argumentBindings.put(metaVarName, methodInv.arguments) @@ -338,7 +336,7 @@ class PatternMatcher { if(methodInv.arguments.size != arguments.size) { argumentCheck = false } else { - //TODO + //currently we can't assign values to argument-binding meta variables argumentCheck = true } } @@ -352,8 +350,6 @@ class PatternMatcher { } } - - //variable declaration matching def private dispatch boolean doMatch(PVariableDeclaration varDecl, VariableDeclarationStatement varDeclStatement) { @@ -452,10 +448,27 @@ class PatternMatcher { typeCheck = type.resolveBinding.qualifiedName == fieldDecl.type.resolveBinding.qualifiedName } } - return nameCheck && visibilityCheck && typeCheck } + def private dispatch boolean doMatch(PReturnExpression returnExpr, ReturnStatement returnStatement) { + + var boolean expressionCheck + if (returnExpr.expression !== null) { + val exp = returnExpr.expression + if(exp instanceof PMetaVariable) { + bindings.put(exp.name, #[returnStatement.expression]) + expressionCheck = true + } else { + expressionCheck = false + } + } else { + expressionCheck = true + } + expressionCheck + } + + def private dispatch doMatch(PExpression anyOtherPattern, ASTNode anyOtherNode) { false } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend index a27fa4a..6ea8601 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/Utils.xtend @@ -16,6 +16,11 @@ import org.eclipse.jdt.core.ICompilationUnit import org.eclipse.jface.text.IDocument import org.eclipse.jdt.core.dom.Assignment import org.eclipse.jdt.core.dom.Block +import hu.elte.refjava.lang.refJava.PExpression +import hu.elte.refjava.lang.refJava.PMemberFeatureCall +import hu.elte.refjava.lang.refJava.PConstructorCall +import hu.elte.refjava.lang.refJava.PMethodDeclaration +import hu.elte.refjava.lang.refJava.PVariableDeclaration class Utils { @@ -134,6 +139,13 @@ class Utils { compUnit.rewrite(document, null).apply(document) } + def static isValidLambdaExpression (PExpression expression) { + (expression instanceof PMemberFeatureCall) + && ((expression as PMemberFeatureCall).memberCallTarget instanceof PConstructorCall) + && (((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).anonInstance) + && ((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.exists[it instanceof PMethodDeclaration] + && ((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.forall[it instanceof PMethodDeclaration || it instanceof PVariableDeclaration] + } } \ No newline at end of file diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/GenerateRefJava.mwe2 b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/GenerateRefJava.mwe2 index 8213c61..2be55a9 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/GenerateRefJava.mwe2 +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/GenerateRefJava.mwe2 @@ -20,10 +20,6 @@ Workflow { enabled = true } - eclipsePluginTest = { - enabled = true - } - createEclipseMetaData = true } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext index d9a9655..1e7ff80 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/RefJava.xtext @@ -32,7 +32,7 @@ SchemeInstanceRule: definitionPattern=Pattern)? ('when' ('assignment' - assignment=AssignmentList)? + assignments=AssignmentList)? ('precondition' precondition=XExpression)? )? @@ -68,8 +68,8 @@ CompositeRefactoringRule: // Patterns // ////////////// -enum MetaVariableType : - SIMPLE='#' | NAME='name#' | TYPE='type#' | PARAMETER='parameter#' | VISIBILITY="visibility#" | ARGUMENT="argument#" +enum MetaVariableType: + CODE='#' | NAME='name#' | TYPE='type#' | PARAMETER='parameter#' | VISIBILITY='visibility#' | ARGUMENT='argument#' ; PMetaVariable returns PExpression: @@ -89,7 +89,7 @@ PExpressionOrVarDeclaration returns PExpression: PDeclaration returns PExpression: PVariableDeclaration ( {PMethodDeclaration.prefix=current} '(' ( - arguments+=FullJvmFormalParameter (',' arguments+=FullJvmFormalParameter)* | metaArguments=PMetaVariable + parameters+=FullJvmFormalParameter (',' parameters+=FullJvmFormalParameter)* | metaParameters=PMetaVariable )? ')' (body=PBlockExpression) )? ; @@ -115,8 +115,7 @@ PMemberFeatureCall returns PExpression: PPrimaryExpression ( =>({PMemberFeatureCall.memberCallTarget=current} ".") (feature=IdOrSuper | metaFeature=PMetaVariable) ( - //=>'(' (memberCallArguments+=PMetaVariable (',' memberCallArguments+=PMetaVariable)*)? ')' //currently restricted to PMetaVariable, should be PExpression - =>'(' memberCallArguments=PMetaVariable? ')' + =>'(' memberCallArguments=PMetaVariable? ')' //currently restricted to PMetaVariable, should be PExpression )? )* ; @@ -133,9 +132,8 @@ PPrimaryExpression returns PExpression ; PConstructorCall returns PExpression: - {PConstructorCall} 'new' (name=ValidID | metaName=PMetaVariable) //constructor=[types::JvmConstructor|QualifiedName] - //=>'(' (arguments+=PMetaVariable (',' arguments+=PMetaVariable)*)? ')' ( //currently restricted to PMetaVariable, should be PExpression - =>'(' arguments=PMetaVariable? ')' ( + {PConstructorCall} 'new' (name=ValidID | metaName=PMetaVariable) + =>'(' arguments=PMetaVariable? ')' ( //currently restricted to PMetaVariable, should be PExpression anonInstance?='{' (elements+=PDeclaration =>(';' elements+=PDeclaration)* ';'?)? '}' // =>: local, distinguishes semicolons )? @@ -150,19 +148,17 @@ PBlockExpression returns PExpression: PFeatureCall returns PExpression: {PFeatureCall} ( - feature=IdOrSuper ( - //=>'(' (featureCallArguments+=PExpression (',' featureCallArguments+=PExpression)*)? ')' //currently restricted to PMetaVariable, should be PExpression - =>'(' featureCallArguments=PMetaVariable? ')' + feature=IdOrSuper ( + =>'(' featureCallArguments=PMetaVariable? ')' //currently restricted to PMetaVariable, should be PExpression )? ) | ( - metaFeature=PMetaVariable - //=>'(' (featureCallArguments+=PExpression (',' featureCallArguments+=PExpression)*)? ')' //currently restricted to PMetaVariable, should be PExpression - =>'(' featureCallArguments=PMetaVariable? ')' + metaFeature=PMetaVariable + =>'(' featureCallArguments=PMetaVariable? ')' //currently restricted to PMetaVariable, should be PExpression ) ; PReturnExpression returns PExpression: - {PReturnExpression} 'return' (->expression=PExpression)? + {PReturnExpression} 'return' (->expression=PMetaVariable)? ; PTargetExpression returns PExpression: diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend index c51265d..1599511 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/compiler/RefJavaCompiler.xtend @@ -40,7 +40,7 @@ class RefJavaCompiler extends XbaseCompiler { } def dispatch void toJavaExpression(MetaVariable metaVar, ITreeAppendable it) { - if(metaVar.type == MetaVariableType.SIMPLE) { + if(metaVar.type == MetaVariableType.CODE) { append('''bindings.get("«metaVar.name»")''') if (!metaVar.multi) { append(".get(0)") diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend index 33a3bf3..2d92418 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/jvmmodel/RefJavaJvmModelInferrer.xtend @@ -8,10 +8,11 @@ import hu.elte.refjava.api.LocalRefactoring import hu.elte.refjava.api.patterns.Utils import hu.elte.refjava.lang.refJava.MetaVariableType import hu.elte.refjava.lang.refJava.PMetaVariable +import hu.elte.refjava.lang.refJava.Pattern import hu.elte.refjava.lang.refJava.SchemeInstanceRule import hu.elte.refjava.lang.refJava.SchemeType -import java.lang.reflect.Type import java.util.List +import org.eclipse.jdt.core.dom.Type import org.eclipse.xtext.common.types.JvmVisibility import org.eclipse.xtext.naming.IQualifiedNameProvider import org.eclipse.xtext.serializer.ISerializer @@ -25,36 +26,23 @@ class RefJavaJvmModelInferrer extends AbstractModelInferrer { @Inject extension ISerializer @Inject extension JvmTypesBuilder - def dispatch infer(SchemeInstanceRule rule, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) { acceptor.accept(rule.toClass(rule.fullyQualifiedName)) [ superTypes += rule.type.toSuperType.typeRef //type parsing doesn't work.. - val matchingTypeReferenceString = if (rule.matchingPattern !== null) { - Utils.getTypeReferenceString(rule.matchingPattern) - } else { - "" - } - - val replacementTypeReferenceString = if (rule.replacementPattern !== null) { - Utils.getTypeReferenceString(rule.replacementPattern) - } else { - "" - } - - val targetTypeReferenceString = if(rule.targetPattern !== null) { - Utils.getTypeReferenceString(rule.targetPattern) - } else { - "" - } - - val definitionTypeReferenceString = if(rule.definitionPattern !== null) { - Utils.getTypeReferenceString(rule.definitionPattern) - } else { - "" - } + val typeRefGetter = [ Pattern pattern | + if (pattern !== null) { + Utils.getTypeReferenceString(pattern) + } else { + "" + } + ] + val matchingTypeReferenceString = typeRefGetter.apply(rule.matchingPattern) + val replacementTypeReferenceString = typeRefGetter.apply(rule.replacementPattern) + val targetTypeReferenceString = typeRefGetter.apply(rule.targetPattern) + val definitionTypeReferenceString = typeRefGetter.apply(rule.definitionPattern) members += rule.toConstructor [ body = '''super("«rule.matchingPattern.serialize.trim»", "«rule.replacementPattern.serialize.trim»");''' @@ -62,10 +50,11 @@ class RefJavaJvmModelInferrer extends AbstractModelInferrer { val endl = System.getProperty("line.separator"); var String callings = "" - if(rule.assignment !== null) { - for (assignment : rule.assignment.assignment) { + if(rule.assignments !== null) { + for (assignment : rule.assignments.assignment) { val metaVar = assignment.metaVariable as PMetaVariable val metaVarName = (assignment.metaVariable as PMetaVariable).name + if (metaVar.type == MetaVariableType.NAME) { members += rule.toMethod("valueof_name_" + metaVarName, typeof(String).typeRef) [ visibility = JvmVisibility.PRIVATE @@ -96,6 +85,26 @@ class RefJavaJvmModelInferrer extends AbstractModelInferrer { visibility = JvmVisibility.PRIVATE body = '''parameterBindings.put("«metaVarName»", valueof_parameter_«metaVarName»());''' ] + } else if (metaVar.type == MetaVariableType.VISIBILITY) { + members += rule.toMethod("valueof_visibility_" + metaVarName, typeof(List).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = assignment.value + ] + callings = callings + "set_visibility_" + metaVarName + "();" + endl + members += rule.toMethod("set_visibility_" + metaVarName, typeof(void).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = '''visibilityBindings.put("«metaVarName»", valueof_visibility_«metaVarName»());''' + ] + } else if(metaVar.type == MetaVariableType.ARGUMENT) { + members += rule.toMethod("valueof_argument_" + metaVarName, typeof(List).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = assignment.value + ] + callings = callings + "set_argument_" + metaVarName + "();" + endl + members += rule.toMethod("set_argument_" + metaVarName, typeof(void).typeRef) [ + visibility = JvmVisibility.PRIVATE + body = '''argumentBindings.put("«metaVarName»", valueof_argument_«metaVarName»());''' + ] } } } @@ -116,7 +125,6 @@ super.definitionTypeReferenceString = "«definitionTypeReferenceString»";''' ] } - if (rule.precondition !== null) { members += rule.toMethod("instanceCheck", Boolean.TYPE.typeRef) [ visibility = JvmVisibility.PRIVATE diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend index 03bc4ba..2bc95d8 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/typesystem/RefJavaTypeComputer.xtend @@ -5,16 +5,17 @@ import hu.elte.refjava.lang.refJava.MetaVariableType import hu.elte.refjava.lang.refJava.TargetExpression import java.util.List import org.eclipse.jdt.core.dom.ASTNode +import org.eclipse.jdt.core.dom.Expression +import org.eclipse.jdt.core.dom.SingleVariableDeclaration import org.eclipse.jdt.core.dom.Type import org.eclipse.xtext.xbase.typesystem.computation.ITypeComputationState import org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer import org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference -import org.eclipse.jdt.core.dom.SingleVariableDeclaration class RefJavaTypeComputer extends XbaseTypeComputer { def dispatch computeTypes(MetaVariable metaVar, ITypeComputationState state) { - if (metaVar.type == MetaVariableType.SIMPLE) { + if (metaVar.type == MetaVariableType.CODE) { val astNodeType = getTypeForName(ASTNode, state) val type = if (!metaVar.multi) { astNodeType @@ -38,19 +39,20 @@ class RefJavaTypeComputer extends XbaseTypeComputer { val listType = getTypeForName(List, state) as ParameterizedTypeReference listType.addTypeArgument(parameterType) state.acceptActualType(listType) + + } else if(metaVar.type == MetaVariableType.ARGUMENT) { + val expressionType = getTypeForName(Expression, state) + val listType = getTypeForName(List, state) as ParameterizedTypeReference + listType.addTypeArgument(expressionType) + state.acceptActualType(listType) } - } def dispatch computeTypes(TargetExpression targetExpr, ITypeComputationState state) { val astNodeType = getTypeForName(ASTNode, state) - val listType = getTypeForName(List, state) as ParameterizedTypeReference listType.addTypeArgument(astNodeType) val type = listType - state.acceptActualType(type) } - - } diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend index 948bfc7..766ec3e 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/lang/validation/RefJavaValidator.xtend @@ -20,126 +20,218 @@ import hu.elte.refjava.lang.refJava.PMethodDeclaration import hu.elte.refjava.lang.refJava.PVariableDeclaration import hu.elte.refjava.lang.refJava.PMemberFeatureCall import hu.elte.refjava.lang.refJava.PConstructorCall -import hu.elte.refjava.lang.refJava.Pattern +import hu.elte.refjava.lang.refJava.MetaVariableType +import hu.elte.refjava.api.patterns.Utils class RefJavaValidator extends AbstractRefJavaValidator { -/* + @Check def checkMetaVariableUniqueness(SchemeInstanceRule schemeInstanceRule) { val matchingMetaVars = EcoreUtil2.getAllContentsOfType(schemeInstanceRule.matchingPattern, PMetaVariable) matchingMetaVars.forEach [ inspectedMetaVar | - if (matchingMetaVars.exists[name == inspectedMetaVar.name && it != inspectedMetaVar]) { + if (matchingMetaVars.exists[name == inspectedMetaVar.name && type == inspectedMetaVar.type && it != inspectedMetaVar]) { error("Duplicate metavariable " + inspectedMetaVar.name, inspectedMetaVar, RefJavaPackage.Literals.PMETA_VARIABLE__NAME) } ] } - @Check def checkMetaVariableReferences(SchemeInstanceRule schemeInstanceRule) { val matchingMetaVars = EcoreUtil2.getAllContentsOfType(schemeInstanceRule.matchingPattern, PMetaVariable) - val metaVarChecker = [ EObject inspectedMetaVar, String inspectedName, boolean inspectedMulti, + val metaVarChecker = [ EObject inspectedMetaVar, String inspectedName, MetaVariableType inspectedType, boolean inspectedMulti, EAttribute nameFeature, EAttribute multiFeature | val referencedMetaVar = matchingMetaVars.findFirst[name == inspectedName] - if (referencedMetaVar === null) { + if (inspectedType == MetaVariableType.CODE && referencedMetaVar === null) { error("Metavariable " + inspectedName + " cannot be resolved", inspectedMetaVar, nameFeature) - } else if (inspectedMulti != referencedMetaVar.multi) { + } else if (inspectedType == MetaVariableType.CODE && inspectedMulti != referencedMetaVar.multi) { error("Metavariable " + inspectedName + " has wrong multiplicity", inspectedMetaVar, multiFeature) } ] EcoreUtil2.getAllContentsOfType(schemeInstanceRule.replacementPattern, PMetaVariable).forEach [ - metaVarChecker.apply(it, name, multi, PMETA_VARIABLE__NAME, PMETA_VARIABLE__MULTI) + metaVarChecker.apply(it, name, type, multi, PMETA_VARIABLE__NAME, PMETA_VARIABLE__MULTI) ] EcoreUtil2.getAllContentsOfType(schemeInstanceRule.precondition, MetaVariable).forEach [ - metaVarChecker.apply(it, name, multi, META_VARIABLE__NAME, META_VARIABLE__MULTI) + metaVarChecker.apply(it, name, type, multi, META_VARIABLE__NAME, META_VARIABLE__MULTI) ] } - */ @Check - def multiMetavariableCountValidation(SchemeInstanceRule schemeInstanceRule) { - val patterns = schemeInstanceRule.matchingPattern.patterns - val targetExpressions = EcoreUtil2.getAllContentsOfType(schemeInstanceRule.matchingPattern, PTargetExpression) - if(targetExpressions.size != 0) { + def targetPatternChecker(SchemeInstanceRule schemeInstanceRule) { + if (schemeInstanceRule.type == SchemeType.LOCAL && schemeInstanceRule.targetPattern !== null) { - if (targetExpressions.size > 1) { - targetExpressions.forEach[error("Two or more target expression within the same matching pattern doesn't make sense.", it, RefJavaPackage.Literals.PTARGET_EXPRESSION.getEStructuralFeature(0) )] - } - val preTargetExpressions = patterns.clone.takeWhile[ !(it instanceof PTargetExpression)] - val postTargetExpressions = patterns.clone.reverse.takeWhile[ !(it instanceof PTargetExpression)] - - multiMetavarCountChecker(preTargetExpressions) - multiMetavarCountChecker(postTargetExpressions) + error("A local refactoring scheme cannot have a target closure.", schemeInstanceRule, SCHEME_INSTANCE_RULE__TYPE) } else { - multiMetavarCountChecker(patterns) + if (schemeInstanceRule.targetPattern !== null) { + if (EcoreUtil2.getAllContentsOfType(schemeInstanceRule.targetPattern, PTargetExpression) !== null) { + EcoreUtil2.getAllContentsOfType(schemeInstanceRule.targetPattern, PTargetExpression).forEach[ + error("The target pattern cannot contain a target expression.", it, PTARGET_EXPRESSION.getEStructuralFeature(0)) + ] + } + } } } - def void multiMetavarCountChecker(Iterable expressions) { - val multiMetavars = expressions.filter[it instanceof PMetaVariable && (it as PMetaVariable).multi] - val blocks = expressions.filter[it instanceof PBlockExpression] - - if (multiMetavars.size > 1) { - multiMetavars.forEach[error("Two or more metavariable with multiplicity in the same scope doesn't make sense. -If the matching pattern has a target expression, then there cannot be two or more -metavariable with multiplicity before, and after the target expression.", it, RefJavaPackage.Literals.PMETA_VARIABLE__MULTI)] + //checks the attribute-binding meta variable type correctness + @Check + def metaVariableTypeCorrectnessChecker(SchemeInstanceRule schemeInstanceRule) { + schemeInstanceRule.matchingPattern.patterns.forEach[hasCorrectMetaVariableTypes] + schemeInstanceRule.replacementPattern.patterns.forEach[hasCorrectMetaVariableTypes] + schemeInstanceRule.targetPattern.patterns.forEach[hasCorrectMetaVariableTypes] + schemeInstanceRule.definitionPattern.patterns.forEach[hasCorrectMetaVariableTypes] + } + + def void hasCorrectMetaVariableTypes(PExpression expression) { + if (expression instanceof PMethodDeclaration) { + val method = expression as PMethodDeclaration + if (method.metaParameters !== null && (method.metaParameters as PMetaVariable).type != MetaVariableType.PARAMETER) { + error("The type of the meta variable should be 'parameter' here.", method.metaParameters, PMETA_VARIABLE__TYPE) + } + method.prefix.hasCorrectMetaVariableTypes + } else if (expression instanceof PVariableDeclaration) { + val varDecl = expression as PVariableDeclaration + if(varDecl.metaName !== null && (varDecl.metaName as PMetaVariable).type != MetaVariableType.NAME) { + error("The type of the meta variable should be 'name' here.", varDecl.metaName, PMETA_VARIABLE__TYPE) + } + if(varDecl.metaType !== null && (varDecl.metaType as PMetaVariable).type != MetaVariableType.TYPE) { + error("The type of the meta variable should be 'type' here.", varDecl.metaType, PMETA_VARIABLE__TYPE) + } + if(varDecl.metaVisibility !== null && (varDecl.metaVisibility as PMetaVariable).type != MetaVariableType.VISIBILITY) { + error("The type of the meta variable should be 'visibility' here.", varDecl.metaVisibility, PMETA_VARIABLE__TYPE) + } + } else if (expression instanceof PMemberFeatureCall) { + val memberFeatureCall = expression as PMemberFeatureCall + if(memberFeatureCall.metaFeature !== null && (memberFeatureCall.metaFeature as PMetaVariable).type != MetaVariableType.NAME) { + error("The type of the meta variable should be 'name' here.", memberFeatureCall.metaFeature, PMETA_VARIABLE__TYPE) + } + if(memberFeatureCall.memberCallArguments !== null && (memberFeatureCall.memberCallArguments as PMetaVariable).type != MetaVariableType.ARGUMENT) { + error("The type of the meta variable should be 'argument' here.", memberFeatureCall.memberCallArguments, PMETA_VARIABLE__TYPE) + } + memberFeatureCall.memberCallTarget.hasCorrectMetaVariableTypes + } else if (expression instanceof PConstructorCall) { + val constructorCall = expression as PConstructorCall + if (constructorCall.metaName !== null && (constructorCall.metaName as PMetaVariable).type != MetaVariableType.NAME) { + error("The type of the meta variable should be 'name' here.", constructorCall.metaName, PMETA_VARIABLE__TYPE) + } + if (constructorCall.arguments !== null && (constructorCall.arguments as PMetaVariable).type != MetaVariableType.ARGUMENT) { + error("The type of the meta variable should be 'argument' here.", constructorCall.arguments, PMETA_VARIABLE__TYPE) + } + if (constructorCall.anonInstance) { + constructorCall.elements.forEach[hasCorrectMetaVariableTypes] + } + } else if (expression instanceof PBlockExpression) { + val block = expression as PBlockExpression + block.expressions.forEach[hasCorrectMetaVariableTypes] + } else if (expression instanceof PFeatureCall) { + val featureCall = expression as PFeatureCall + if(featureCall.metaFeature !== null && (featureCall.metaFeature as PMetaVariable).type != MetaVariableType.NAME) { + error("The type of the meta variable should be 'name' here.", featureCall.metaFeature, PMETA_VARIABLE__TYPE) + } + if(featureCall.featureCallArguments !== null && (featureCall.featureCallArguments as PMetaVariable).type != MetaVariableType.ARGUMENT) { + error("The type of the meta variable should be 'argument' here.", featureCall.featureCallArguments, PMETA_VARIABLE__TYPE) + } } - - blocks.forEach[multiMetavarCountChecker( (it as PBlockExpression).expressions )] - } + @Check + def parameterAndArgumentMetaVariableMultiplicity(SchemeInstanceRule schemeInstanceRule) { + EcoreUtil2.getAllContentsOfType(schemeInstanceRule.matchingPattern, PMetaVariable).forEach[hasCorrectMultiplicity] + EcoreUtil2.getAllContentsOfType(schemeInstanceRule.replacementPattern, PMetaVariable).forEach[hasCorrectMultiplicity] + EcoreUtil2.getAllContentsOfType(schemeInstanceRule.targetPattern, PMetaVariable).forEach[hasCorrectMultiplicity] + EcoreUtil2.getAllContentsOfType(schemeInstanceRule.definitionPattern, PMetaVariable).forEach[hasCorrectMultiplicity] + } + + def hasCorrectMultiplicity(PMetaVariable metaVar) { + if(metaVar.type == MetaVariableType.PARAMETER && !metaVar.multi) { + error("A parameter-binding meta variable should always have multiplicity.", metaVar, PMETA_VARIABLE__MULTI) + } else if (metaVar.type == MetaVariableType.ARGUMENT && !metaVar.multi) { + error("An argument-binding meta variable should always have multiplicity.", metaVar, PMETA_VARIABLE__MULTI) + } else if (metaVar.type == MetaVariableType.NAME && metaVar.multi) { + error("A name-binding meta variable cannot have multiplicity.", metaVar, PMETA_VARIABLE__MULTI) + } else if (metaVar.type == MetaVariableType.TYPE && metaVar.multi) { + error("A type-binding meta variable cannot have multiplicity.", metaVar, PMETA_VARIABLE__MULTI) + } else if (metaVar.type == MetaVariableType.VISIBILITY && metaVar.multi) { + error("A visibility-binding meta variable cannot have multiplicity.", metaVar, PMETA_VARIABLE__MULTI) + } + } + + + //class and lambda refactorings pattern limitations @Check def patternLimitationsChecker(SchemeInstanceRule schemeInstanceRule) { - if(schemeInstanceRule.type == SchemeType.CLASS) { if (!(schemeInstanceRule.replacementPattern.patterns.head instanceof PNothingExpression) && !(schemeInstanceRule.replacementPattern.patterns.head instanceof PFeatureCall) || schemeInstanceRule.replacementPattern.patterns.size > 1) { - error("A class refactoring's replacement pattern can only be either a single PNothingExpression or a single PFeatureCall.", - schemeInstanceRule.replacementPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + + error("A class refactoring's replacement pattern can only be either a single nothing expression or a single feature call.", + schemeInstanceRule.replacementPattern, PATTERN.getEStructuralFeature(0)) } else if (schemeInstanceRule.replacementPattern.patterns.head instanceof PNothingExpression && !(schemeInstanceRule.matchingPattern.patterns.head instanceof PMethodDeclaration) && !(schemeInstanceRule.matchingPattern.patterns.head instanceof PVariableDeclaration) || schemeInstanceRule.matchingPattern.patterns.size > 1) { - error("The matching pattern can only be either a single PMethodDeclaration or a single PVariableDeclaration, if the replacement pattern is a PNothingExpression.", - schemeInstanceRule.matchingPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + error("The matching pattern can only be either a single method declaration or a single variable declaration, if the replacement pattern is a nothing expression.", + schemeInstanceRule.matchingPattern, PATTERN.getEStructuralFeature(0)) } } else if (schemeInstanceRule.type == SchemeType.LAMBDA) { - if (!isValidLambdaExpression(schemeInstanceRule.replacementPattern.patterns.head) || schemeInstanceRule.replacementPattern.patterns.size > 1) { + if (!Utils.isValidLambdaExpression(schemeInstanceRule.replacementPattern.patterns.head) || schemeInstanceRule.replacementPattern.patterns.size > 1) { error("A lambda refactoring's replacement pattern can only be a single valid lambda expression. -Example: new F() { public void apply() { } }.apply()", schemeInstanceRule.replacementPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) +Example: new F() { public void apply() { } }.apply()", schemeInstanceRule.replacementPattern, PATTERN.getEStructuralFeature(0)) + } else if (schemeInstanceRule.matchingPattern.patterns.exists[Utils.isValidLambdaExpression(it)] && schemeInstanceRule.matchingPattern.patterns.size > 1) { + + error("The matching pattern can be either a single lambda expression, or a pattern that doesn't contains a lambda expression.", schemeInstanceRule.replacementPattern, PATTERN.getEStructuralFeature(0)) + } else if (!((schemeInstanceRule.replacementPattern.patterns.head as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.exists[ it instanceof PMethodDeclaration && ((it as PMethodDeclaration).prefix.name == (schemeInstanceRule.replacementPattern.patterns.head as PMemberFeatureCall).feature && ((it as PMethodDeclaration).prefix.metaName as PMetaVariable).name == ((schemeInstanceRule.replacementPattern.patterns.head as PMemberFeatureCall).metaFeature as PMetaVariable).name)]) { - error("The feature call's name can only be an existing method inside the lambda expression.", schemeInstanceRule.replacementPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + error("The feature call's name can only be an existing method inside the lambda expression.", schemeInstanceRule.replacementPattern, PATTERN.getEStructuralFeature(0)) - } else if (isValidLambdaExpression(schemeInstanceRule.matchingPattern.patterns.head) && !((schemeInstanceRule.matchingPattern.patterns.head as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.exists[ + } else if (Utils.isValidLambdaExpression(schemeInstanceRule.matchingPattern.patterns.head) && !((schemeInstanceRule.matchingPattern.patterns.head as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.exists[ it instanceof PMethodDeclaration && ((it as PMethodDeclaration).prefix.name == (schemeInstanceRule.matchingPattern.patterns.head as PMemberFeatureCall).feature && ((it as PMethodDeclaration).prefix.metaName as PMetaVariable).name == ((schemeInstanceRule.matchingPattern.patterns.head as PMemberFeatureCall).metaFeature as PMetaVariable).name)]) { - error("The feature call's name can only be an existing method inside the lambda expression.", schemeInstanceRule.matchingPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + error("The feature call's name can only be an existing method inside the lambda expression.", schemeInstanceRule.matchingPattern, PATTERN.getEStructuralFeature(0)) + + } else if (Utils.isValidLambdaExpression(schemeInstanceRule.matchingPattern.patterns.head) && schemeInstanceRule.matchingPattern.patterns.size > 1) { + error("The matching pattern's length can only be single, if the matching pattern is meant to be a lambda expression.", schemeInstanceRule.matchingPattern, PATTERN.getEStructuralFeature(0)) + } + } + } + + @Check + def multiMetavariableCountValidation(SchemeInstanceRule schemeInstanceRule) { + val matchingPatterns = schemeInstanceRule.matchingPattern.patterns + val targetExpressions = EcoreUtil2.getAllContentsOfType(schemeInstanceRule.matchingPattern, PTargetExpression) + if(targetExpressions.size != 0) { - } else if (isValidLambdaExpression(schemeInstanceRule.matchingPattern.patterns.head) && schemeInstanceRule.matchingPattern.patterns.size > 1) { - error("The matching pattern's length can only be single, if the matching pattern is meant to be a lambda expression.", schemeInstanceRule.matchingPattern, RefJavaPackage.Literals.PATTERN.getEStructuralFeature(0)) + if (targetExpressions.size > 1) { + targetExpressions.forEach[error("Two or more target expression within the same matching pattern doesn't make sense.", it, PTARGET_EXPRESSION.getEStructuralFeature(0) )] } + val preTargetExpressions = matchingPatterns.clone.takeWhile[ !(it instanceof PTargetExpression)] + val postTargetExpressions = matchingPatterns.clone.reverse.takeWhile[ !(it instanceof PTargetExpression)] + multiMetavarCountChecker(preTargetExpressions) + multiMetavarCountChecker(postTargetExpressions) + + } else { + multiMetavarCountChecker(matchingPatterns) } } - def private isValidLambdaExpression (PExpression expression) { - (expression instanceof PMemberFeatureCall) - && ((expression as PMemberFeatureCall).memberCallTarget instanceof PConstructorCall) - && (((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).anonInstance) - && ((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.exists[it instanceof PMethodDeclaration] - && ((expression as PMemberFeatureCall).memberCallTarget as PConstructorCall).elements.forall[it instanceof PMethodDeclaration || it instanceof PVariableDeclaration] + def void multiMetavarCountChecker(Iterable expressions) { + val multiMetavars = expressions.filter[it instanceof PMetaVariable && (it as PMetaVariable).multi] + val blocks = expressions.filter[it instanceof PBlockExpression] + if (multiMetavars.size > 1) { + multiMetavars.forEach[error("Two or more metavariable with multiplicity in the same scope doesn't make sense. +If the matching pattern has a target expression, then there cannot be two or more +metavariable with multiplicity before, and after the target expression.", it, PMETA_VARIABLE__MULTI)] + } + blocks.forEach[multiMetavarCountChecker( (it as PBlockExpression).expressions )] } - } diff --git a/hu.elte.refjava.update/.project b/hu.elte.refjava.update/.project new file mode 100644 index 0000000..530e02b --- /dev/null +++ b/hu.elte.refjava.update/.project @@ -0,0 +1,17 @@ + + + hu.elte.refjava.update + + + + + + org.eclipse.pde.UpdateSiteBuilder + + + + + + org.eclipse.pde.UpdateSiteNature + + diff --git a/hu.elte.refjava.update/artifacts.jar b/hu.elte.refjava.update/artifacts.jar new file mode 100644 index 0000000000000000000000000000000000000000..89a77025be65806570e2fd91ae6409a27c4a5c49 GIT binary patch literal 646 zcmWIWW@Zs#;Nak3s4QL|z<>mJ8CVz+i%K%n5|c}c^(u06{+(iA*c*B}@3w)!9`P6U z9}=dVRJ?L{n*55G`@a}-i}WNi-{v_?)RE7WIs89PYnzqpbSdiI)zzd#vld zBoK8_sQY|k%`RrE6_Kh17HbYz#l1A>;Fj<5G@F~cILD?_ee(>r6u0I-d@`y?l4V5W`^b7Un0|f`mEzRxb~=O+pJC6Dc|F!F|Av# z8F(-A{j-t{D{FTeCrM{M4A;mtxskB*ui=e1wl_Di=UH*)f4sB!Nm^}768pX+i`uIH ziod7xY)~zDe%3Is`pf)PpH>u>mggv4o-t>unmNbIwJz1?f|{Pr`S*pVscFKFr_A+F zdlIV z?Obhd+cpsXK4AYrzVmS}~J-bzua-Cw_>-mF(! zvdP+6(-f^kiFe04^6t6Q$v3Z7uA@B=7E<4v=>{6=8u3iuqMkj||NiUk#g+c*r|-YJ zdF2w0EzI$I68ItIK3f;3jbLJYAKP5^uuFhO0JDhpfpVg2d>z1$&um0YhXx@*c!-8^5b+keKFDp?Nd$P4HyYSV&!u=i%2@#_BIhFS4+b>GZqij%K4A0{KZ8p<{t*wY!`w?dMf3?>KW`QLN+9} zZYE61w92p_k0?GED5te`on6-!nrmJ@!r)@~sjU~k>mHI9bTedD2i5Do*HN1o-hIi&*`#Hxpn_t2tNWgy@?27?%P^R1z@e82bl9+>J5xO0hz5qI?t((ka2kcd4IknCjU(42#4+_511m@sL!XOVg%6N4}`bDPFg$BY(|I$ ziNFFoA(6DQB!iHfWc$AD5M)QiyjSwJKrS|!FNyk6lmQf+ zjMxjJRcT8Y$S}H)Z-No=K8CS7@K3&dx$GkHpPLw86`lZL7jyG&rk_2-Zg72;4$lPS z{qW2ASr$_bbaj4S3aMEDJ**H`RAKKb%ww*2x!9u%ICWLL^>eI@iw|pe?mN`{11$DZ zt7zpqgtO`p?t3re;^ea*R5-rPWd3=Q)7vSRHIdRnXZ2%WP;=n{@K?<0_*)s1JbakR#72V5CyN={j zwJ8~@pjBgf8s(;)Fi&QYr4Xj&l11SiX5xhiHPlVtBAmE^10W=nzlz*PhlS_OG9F|{ zv}8&-L>0Adw6~q8P`JVxqIBY-^A;;=@0mx`iNWR9=_XO!cOx1?EHaPmJ&f?w0MH*~ ze~U%dh(5X+YhK2ZoqN~nV-j+2Y3~f)ro#11lCR|F$er{rBS)6Qs7r#8azb}l$iozM zpl4hlk}zC)=~e*~(XOd@9iQnJ%q&Hn=-sUUl#V4s)pYFg(2jH|uvs@7+zOp*1nN9^4fVL~Ef zC*R(3)YgceD(#14m}f$X%@#FEmYRK1GaoU4;J<{dH+X#4K5r@7SnSZCKQ z#k_4iJu7M(l=m%Zdu{2J6!rCGXTt)X+@*e^`%eDafBC=ebn*G`*YsWaYS+;kA|0R- zS`a72yK|BDv@`4@! literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.update/plugins/hu.elte.refjava.control_1.0.0.202005151427.jar b/hu.elte.refjava.update/plugins/hu.elte.refjava.control_1.0.0.202005151427.jar new file mode 100644 index 0000000000000000000000000000000000000000..755c8dd87ed7506be95db25be89e1ce78f92d3bb GIT binary patch literal 61520 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 VLj~Lu@I?jqNd~-o`uxS+{{f(!99{qb literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.update/plugins/hu.elte.refjava.lang.ide_1.0.0.202005151427.jar b/hu.elte.refjava.update/plugins/hu.elte.refjava.lang.ide_1.0.0.202005151427.jar new file mode 100644 index 0000000000000000000000000000000000000000..5b3a1bdcc5c4b303471d52ae90bb54ba6e38981c GIT binary patch literal 322129 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

uA0RL{|3QCowv>>2;B{PA~1{cpg#{ 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.update/plugins/hu.elte.refjava.lang.ui_1.0.0.202005151427.jar b/hu.elte.refjava.update/plugins/hu.elte.refjava.lang.ui_1.0.0.202005151427.jar new file mode 100644 index 0000000000000000000000000000000000000000..4c36fd5fe24a4c58371e48cbf91fed06c84d1dd2 GIT binary patch literal 33946 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 literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.update/plugins/hu.elte.refjava_1.0.0.202005151427.jar b/hu.elte.refjava.update/plugins/hu.elte.refjava_1.0.0.202005151427.jar new file mode 100644 index 0000000000000000000000000000000000000000..34ade4bc2f1dfd34e8a71cf529df6634db58155c GIT binary patch literal 847076 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%0AI9bHpFJnuHKCu`SZ)< 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%0AL;`u`Oz@ z*2-Wgb=vVZYwtR21V+r&d$L-=(RQvtq@nU*}nlVj0pZNpp+w^cG`-T~Hjm zgz(Uk^Q=j8%9xXVx?r<|`-t`mHE~Dz8Lox2Vy_0V324UMr*X9-)^2ak=oQ|37YMwa8pDRy;^Sc9N=_0b z-3wN34Y~)fp&gC+ezmexB}Q~7q;lbD7P6PGjMt@P@*~v9&!3*E=L`+X!>N{?U#)u6 zfvfm%kHbTswdIFpg@RN0XB45=vb#01`a1JCK=;xy&>y4`3lYf?30x!;`S3YFI%D9> zVziLDN|7NagYpGtlw!RnsXAuzVPIoIi8hN3LSmQ#xkZlAS*KMN^W!P737WuoSF1kj zB6Q4fQO;9WtjT#f$e?f;-6kL6Rxq1kX&KODYr1lsknq3e6_*{!(()9{mD^2SPE)w7 z9l9^HjA-ihIJF64AVF|C%_vHSmJ+<1A8_sXD%P3HmG*h z;j|;j8`C9~O0;_;kQOZgtiEG|15(7=YuZI^gt>1ytds09(aF)6TTA zK-K9s3rl;!6}+ewlMDY5Tt57ptuA$TvQu$lDLb_hi=UO4KK~BFA|oyfI;m4?*ok8W z6QUwO<3^|4g-K+abC-#`YscY+xwswaSy?w)}2> zh75(JOn(N^eE4hHd(GKck~mKCOrWGBcJ=|z7l0qm=nPnZ57#$exw;*zv&_&8m4ACr z|ESw&WTQsV-+tE+r=uE2c45r*NJWm9Uj|ADdN~d^T4VCZyzUv6)a^C}wBcd%qXKM} zAJ?a~Y()u-!fB4EVxMVqGg|v8IIPT^Lqeg1;r;F0l|%yG@`OGDPAv|PD_*#~ zBlqDOtD_Y9i8AU?nRmW(X>jSZaMkG|XaUyVyIyZ5a*vM!c?=bZB%-LIldZ?bcY?wTx^kkAQZ> zlUI{`yXcZ?(%+ElkjQNW)LI;y9pFqiLB}g)V_V#!LURdJ*{SO6Ia)sFU{>pI*PSE( zMgo_af2|~RC~XPyWQRwgH9r!yV&xln&w6~h7vf=Jlk#MpncE88Y(sRiF!IuSor92xeV-}3VeZOPj1+873*k!=oIaz-Z9FhQG3v% z^sGg997S_4;5A2i^Y&}sWqNrQzr}H%!?ARyxAK;|c?S>Dz5AkvFTuti#pmqVh&J1D zt&uA+WtiH1EsAJWep_t2rTcT>byY~mzeEq_uE$zA0lRlYf~Fe&DMkJc8&Lln?REp3 z!Bf|t!i#P*{B|Gk=hN;7Qz<^X6BLeZVqHS*XL>!su?gf>#d&g!f6+#Ly3Hto{$zzL z3w6{1BZUH>6jA}yzMJxqn?bk&9~&MYSZ`!9KxetBD7|0@OL?F7@i6t%2!Qi>p5I#z zHD_O~^pOB&Th0AiL@Px0cFI*laHNbBm`@F%i@w5SnM2LWj=^3%VuM?gGn*WfB>yeW zPq06Ni@iL;p0K@1lQDg{xM|8C=&}$}$eIzy_5x}tkBwY$oXLiM$kqv)aURCe@|7RxUN6xc7zOgYdJbCV?&Hm&VCkTTVwrg(V8R^J%_U4$Bowfb% z(Nu@*$-;99Ck?eGilRb%hFc1@5qjzLbb2{xJXv-^nGhD%rn(tLQBJ{Nr^Ql_WJVc~ zf1Zz241U@^Rhs<3)s73`)%H$jSLfBC9R_Bn&(1XS^^a`nrfKIIY!@g~%Y=TvBWwpW zTU#n51pS+i4&PMuf$X@ ztch>VmF@PqzexvnAkLEdrZw~%7S(Hu!}tRuWJ?Rnk6jDJ;2@iVJ+aUh^jN!`#?$h; zk88?-GwUn*Ybw3k$nZuBH(OQKn%7N_RaaAu_TY2UhgQcc%iTG`z3aWb`KkbM7dJDy z?9Cj)T`gq!21V29`Uu6aeBwW&7cFGt{anKHUffA*Py{1#Z0k zE%86~Qp-?~PKi-R0xjzbQHf9LO|(XZqYY26zN5p;i(EPnP<0%1+=w>4%kx&h-jvi8)7;`tUHFV z*VccB?c}THq2bq@5G+JWp&htqo>P zN1Q@s_}3VKPW`-7_M}Zd*LkLrq5_G*y*@3nknuqCD~2X{oO)?I$REQgo`6hjZyJ4K zIE;LTA*f(z6PZ|3Y7fl1rXF~Xbf&{MaVsM~(##PC{2albi^altmhtD*dT;Yt1Exxz zi5;4EmVX5Qjy)H?w$&-xxvSglsXLwi*k^+}GX6HMxfDrhU*LVbureHd^6RXpI*}AR zq_~w`V~vm(EhhjEi_t{e@xLNsP7BBrggmGM43;9|71EmwbXzI zFFTu#rW7p7@b{+*Im>Lp7D9u|VVDmXtq`0>mD!2@3QhV4Mon4`^O|(`-lxqFe6zrt zH3ij798S-4#`JvlEP)ZO`bu zizLSdbAf3_y$9v`b69$IT97O@I<=VeCf!4cU+A7`lC> zGU4*K;c2@3w2O(SsZ}@_jlPrvZayr&RLwJK`rU?EPml2lSNFlBkFIGp%iIxDJAZX}twe#M;n9GTa&zin-HN-QyT z*xn(wKN)9n{<=cD56$i>+BiQ5@y|h%*#aS-n4bx~>@M@FT*Ch7ZWs<@c6D^Q$8zvu zHAxAqYWr>|Dm1PGKRQfqCg;CEYKEfb1Dux+xyJ%+#)dyw{3zhZGhl6R{%e^Nvl2_o za1j9B)#F=pl-_I#M6x_{=J|ex)di}hk@N^jevRbo>^)vbmekyc z1w~xB2pP?jt2|L_5IPPH-LJGrw2||IrVP`1c*W1brD^{^WyCjDB0>V@P^$N8F1aK8l{(u*~_~M(@Ih`hWaGwbtd8RdXrPV)=8EA&n z?Jkd{r|*auvJz`~Kj$$Uh3cxYEH&)uX>UGg>}ZKJjyCqOiiV z8TrR(gnTnsBi3q4s%G+1y!`c$^`+;Ge_P&m+J9&EwRFMk1zm)#!xH_3D#;&@ieEk4 zuXjpgM3E@W0w-h|E!feChBN_=&CM}IKibE`NtIYk6S4QN!}3t+9bQ4h5_oW-q0k-h zJnK!>=Mxns9|ceLax|P=8hptKwjCH~#rO(S6JJd&AOB&U@b1B#q3`q%6UP9o>8JQM z`M~K9L_Ys!ADe>{>K#YI=wJ6b$5gwDznMS*0|H%M!2&qLu?W0=&7E+|ufbng4&f@L zVm=->!dy7`CuF{m5{!Zw#EW+vm7~nF>|gq-$Sb_6-5!N11KB$0h6lCA2(F?M_BPzR zC$SmZrs2nZo6RQgwy!@F`>FaByvX#=!Uo|lTb|{l$Eh2jCT?b;lqoSk&OfB6VXuJ2x?Y_6Qo<} zQ*n$%s}POdMg!Q|&}hpj!-D7RVkM4{*npGc{gfx2O!5k;np`Bpil(9DNP7f?0}R3X z)hGRPJk-GSr{EN%N$z))XuLXBt6Q20B-^x7DnQ-APJsgC)i1x#qojEPcm-Zl{Szl* z;|E39S2U^);TDYxZF(&!0w5@#&x$}ow+Ln;8Z_dk0l}R8LdMI5!ZX(FKP414-d9EO zz*HOAoj|Z984cnq$3r0R)mq>;lr-EBbyw+{01x)hY-D_&NkB+QYRv zEt&A~&lyQ+#!MCM0*|+IPWgcBzf`k_B@~dwuc?1C8RA4_i?@B)TBzzxjlk>YJoeF( z-daVZfvGO)H~KvNtwv24Yx%7m<9=P{u)w$+m1ICZ64KS&lO6P8fHLKgl3UjdArse0 zhqD8s1%11xne09% z>7_n}QrnK%HEH3uUw2e}?1-DuejcX0thFPsPQ*%OpKKBMe|-jiVyFj#nDgglxsYK< zA6^H~h$G4PX~`t%l~+i0|LXw?DD=}8w-Ants0Cko5%LJWuR``z*G+!ZFwY-!d8$2O z;+$(#`TF={tM*e6=S}oe{nP7H7aIQA?ESU2sOReAUAp=*RYOkZ`_uKa0-^Wtj>Zjf zcO^48C5qEgjlOYCt7X_%eznvK_@5$`?{Mrny(9ntr4+#bLXnF7e^-%8Uf;pd*n#dp z$tpTMCkK5)W9ubbGi+xJ@Y|2AqXccwc9x&X++*JbI`aiG%4QvK>Xl8M>z3|1raBcZ z7K=f1?v5HwZ>9P?_SgM$?}LEj7d&ZFy!>zXH`MLcN4zelhh2O zV;w%P+?|Kd-RpKc9C9QFY0^+mpL<+uygbA?G_~{rZkB zZ7nYE7KR}oX_eIJ<&+RzotkW)82TGk-Io|#r`^jV&xjfDPl0&jn4}l@58ynxdpdM- zGaos>^9u06)-bbfrgLsg)*Lu6LHrBgXM2$0!v%g{+IMnhx(tWE zk3jBgi8QSkRWOkkE?@02>`g@AKK0Zu@j~gheU_JoA~(yJy1w|5theB%*L(8hNo|#V z1BlPoaHZi8^oWXlC<-Q{EXEEu&V}liXzB*mbh(V!4TrP?ORZ;*8PI^X=YQ{dLva1z zMGpCmXzS7|??mRsOqBH=sYh8-7f_%3@IYp%y5__G_*w6c9N3$&mg0qylb=ckDU{48 z#E#!_tf-32$mYq)_*r?V>MJr}%jl;jqdemnuR%>X;h)RkKU<;AnQFUTcR|lgaWHb< z3|^WeHWTi*n;?2C=!lc-?zV6py$p=0P{#W?X#pXAWqBYi;4bw&Y6mHR-Mxo0Ew>=f zv5zQt9=O>oOdSqiI>2>qj_SLtg{;A1n{aoR<$5q~oc%rTvr3iuVGZcWlqC~<@xJ|r ze%EtI;LG}O!Vdcv$+DnLL{(H%?CC#eK+(SzHLK1AE9nv}l=b&8P#P(WJx2VDWkq#x zmP>&X+$3WWfidUwH2;R^`4C=t22Cj)rfd;*;f*ce%uuIJIiMcHDB&~$vl2_h3}ZP&xn-%@pXW6})1MWIYGcSBkmG#`LWc?^sFgU) z`+DTE1;5cGe*8&x5#MF9MhX_OkvX}PxUTfCOUQ#e7ojw@j4QyCH2^g;9Ln?oyz&iG z0UsL&g!Qx7Ut|zRl2MYmZib2ZU4q|0c^CzYp@9i9-Gz*h7&8+TWH%qt5FKs&WM_d1 zv)Iw~4U*~W$JvOEBfygl)*?Cy4SFhj7?u6l2EOWufb2}nAm$4pI~b$l@L-8*qyD~z zg*EGi!6G`=rmFmQ1~k*2Y2T-=fy@uR!M372YRXmuHWAtl-E8NcF~|fN8dRLjg1c8_ z*pj|jy(eDS)+AIVdL*gY!y@9UH6Vu;jSv^VxZ3af$Txxprl7rwu;v8=;lT{p21$C8 zMw(3YJMG3Wm8XK~Hik+UR*|Y$BvKD-9C~$huVN%4+qb#~jlqt6ktJJIwJ*9Iqma=2 ziC~T|FZGpzGTK)N!5PaK{a5mZRva2jq=3B!9v#|>U|O%R_o3!={j z`x=#AehK3F!PF2k_|xyyEju}9(1}x-$xKozXv_77MC&GWdT8gnm5v2?Yk?Yi5C1lrmdlUHt$y%Y=ndl!F6K9{<^ zHM&V9ru*CHkK!*#;c}Co5lqLLKT0^&#r2P}4oOQhyGNK_*RAQv-(^TN;-a~jz)re& zT!Q%fKBUmU8K>UaIo3tSRw9=^oHs9;r&M!=g$!ZtXDi1+_sjM!23F0U{!Kq%Y>kGm zzDLEXBYkFzwvO4D93>m}F0Xd*(T(wA8QmB~Z90wOWkBxHR!3sa)Z5FujFJCcXg_eB z2n5Tg`@^}j`Gc`aOm$yiR%KQ($u+;~#X`lx?CeA=PFgEb^@N%=i1bI$Ds9s7#0Dg< zvE;FUhoceokz*!{xPLFZGleanoJuxNEsej28!TKsH*!ygknKIQ$mC? z<7fq_x}&OkOz57uq*UXIMC<0wj1M6%nrtovlN|kZ(%9|CYr5kk4mFW-b2ooEYxR=9 z00P}No2hU4k%iDuiL!cP8=r;=J5S@!hCDik^w&oIE1^zGA$ipP8uy!ujO_Z^R|W;{ zcYgl!dZ(NJ4tD~I=WRuRfGhJhaQ2o;E;AorTg8p8I%IomA@CU*O;!ik{vznTuqN~g zsPJ=hl|atsjS*^Z4l2ChPK>b8TA0gB6Yec3_}Y$59Ev8S>Ga2y$?Q38f!m7QTsX?u zr8X3|2!_D$n0xJ~1-QHNkFK;#_g;?f4$8^z{}>LkJMkcxd^Gp{Ld7!0zy+=82)5pr z4G$F!0t<%zT=$HY<$N>VI@EK*F~-UWTXpgs394LotE~Q2|G-49zi5>DlN%6H{!IVr z5CSq5??OlN@YR2daycoY&8@QDIi-VF8ZeB#Bi5{#;7(mvt-0F?KDUrwcR4kF=U!u* z6b=4^qh9$i=#49q8jf-y7|}a;4yVVjW|*i-fbRq8+_i_jE#3YUXz>=AL4;C?#s_`W zcbz(s@^Pupsx$4@a1SZRc)o#pz5(XxFhQ#6M9)ahwrsxC_zlvVB2hryDr-puHT_R8?k3P*AP$;S#8wa@&ZpR(LO6CSBN}{kel3tmCQVr4hEZ zQE3hG1JCVHX@!qrjN}-rJs&jeUa~iYG&aX$wuOq-^3BBJM$oKHhMi19?lfR0>5_-D zhkTc1^2=hT>VgeV2)h7K&SL3JEV=|9lW@Z9VwG=Ib6*+X(FF>IJ2j-(Q0Qj1@~KbCg||!=@Fu zCCO^SX1DNq+(R3G!IL!x?j1idB5_KY z4+ggz<(R{qFig1LCMw!96dys z!vaI+lH9@p0YThf*=lTKv0}=KbYC5aLkt$vbCLk*MH%l%qjZU{Yw;PA4#V&%1L>65 zDroaFz4gbZ0|cxlK#~a`NU8 znN+0o|2|iAIw8}2WoNEq1_2w1E`HQ|wO8>dee7kIf3Nz}-Z(7S7EKI*l@OO=Kg}r@ z2LMnU1psi{s|gs=%hbn;fQAELkLqd<8wBF^4(i_TwP8KS;DQ?x;mC&!-F;Y&1vWK= zxF9ET z6Jq9vE!r}VQE_Wi>h_HW`a+(5-q3iF=Iw+co8J?u+1|d$=p5O$rJo@4XI+M;-qFQN z$XA(RU{-LY?6ezB3~Gs#GU2=o?M2Y)ZwN9KFs{X=)%E}E(*={ zb*U)hp*yUsu>`QTp}Aqg;W1fX$wj=&R5;($gQ%jVsIAc7d0S*oXw)lItpjsOi1WWu z8mWz!o?a@|5(gzujcl?C=xOrr<1btvD$WiI#gy7(1sZXAC?LjZ*;2v+k#I*AU%o)O8xmzB4~$ns6N?DMCmV> z&?@eQRu_zx&fy!Vrwl{=Aj=B{SR56Ko#t2D$YQHf@|7nDD&~4^)ofmzcHXkLmhAJ9 zO-PruUqA&jL#<8!YS(2VIS3i0kbH}DX_gF>Q@`OHZ-Duc819e55L0@4WY}Ah8&AB{ z=Bv3}*EQy{V|I_0w|0!jt2vVQ%(yth_m+7@EpZKW8r`A$r9_VNj_?nmhpoTK3$2NU zvptdJ=Q`L#7HOvieTZx3Ofg+1M7{I7HD=N--^kkPOPodX?=&}P)DAl=mOITgqg}=E z?%eOC^fy~p>c7v5c$;N5xSdYcBf){4c@J#2NQcuCHX^sJpR`19$>XS%CvCC-Yjf_! zCztJ8fP1#Udjs>ytwdqY%fQ8oa>8tJ^I82ktnQ6VzDl1K4;{2KYoYV)JOs)Pi9M~0 z!)e(InRaV_esOWZ8{%un=svxa(_1!px0t}Y`_O{w2GSZxw{*aD(e_vK4$;@$=Vj>!RkMwq zZbXsuA&#ReH;@TMI_IYP!*9H#A@R>y2@V;15hZIul&czMUf~6xZ9a?}#nQ zd(!sjG3pqhS&M0~O0ZDw(<8Ju{>RlH*R^`dq^{o(f*GO*@I9v+oj?`K>|665^?J)d zBrx{H_7q&BoyPR9_Tl{?da&%FNXr!69=&WXf`;KnH1whlVXqERPKwe+A4^jtfRbkv zh?ft)xjmh)o)8c9LkJ^C5?Zof>q&+a>aue#i?)r{iJU&Z<8sInUntU~n3*l{Wl%La z$hJO3WdvK++wZhqep7M_MmLCzroH;zA8DS@{q)y0DBKM@a zzf~E#V|>&5!@2$rVXFc^ji$X#3jWkzlIzBGll&<%xfM`@4G{9m98w48dUkr|f2&sNva z&h8|@wUE`DGLx8%$$BgaSOp>s+C&HQlE?3XRepyX3I*H83y;nVlpOYhSIG7+o zo`1f|dVk zflsJ<6JLH7P_MAJlYdYr;Xy<892c169ufxUy5&BzC4YXtd%y>7kpC+mA8y^{9^_Fs zV9^71MNV~gR99CL+c3jce8~JZTZk~{O;Ez2hRZFWB^}NQXc8o|71==Whzn3X5RC9t zUtb-3_{UQ%J#z~ADI)JWLToH$9W-f=AB!3Wm|QS*>e8Rj2vuy4P8cKL| zwacTnv)P6!z$0SfZb!E@fXz!Lxz?FqcDq=(b2OmAD6e}; z!1$`LJN$`Tju^8(&hKV_SjD$HosBS1Oh<6a71wn&Hf6OS8hIvg*URVUBjKBgA zJ*hwuw0s$qK9T}RbDdiA$Y2RdwE9J{a#70Kx>@t4x$SYexInG@gm=b$jONhiJ@m^v z*KzuzC(%_UbU+`7<{aE>D4%w;ycRR$#n14wSPk_>r>CR#b-af(l~%X0&FyZyc!(Ok zR(H$w=w4-Lsxno#=ls)B^@X-qMC(;yq#5+}qOm*XF+%#}bS?=xYaoO(kBD8F4UC#n zPWN^`Yz@v-G@jFBat#7iX`W+R5}Ppq>77%>o#G4?l`dI3si_SFRXt zcts9e*}cc|&;eL@k?2Al zZ|>{_v{VA+%Y(=8Sn5b6Wy!tfbgoi*=j%urgo@iJ{F^vhGna&(n0ZKK3hzML_O~Xt z7>M=$eCGRm3R=43BrRzPcv`lq`QY{t%}5D^bLvB7`O#!=z+|AV784A)bhfCK<)XXw zCKlb!wF&c_)D;_-^27b+DXvng>{j$lf+p9!ZK0~Xa_a~D(cB{jA@E^TG{sA-#9X;R zJlHZ6c?o)&qGdYX9j?Juko-XNERTh@`@a#AlwHqB|CH!hIe1G=YLuCCm6TK~((56G z=*!Y87bnpdCsiztsV$DVSRblEU8Vcon>zHjN8XBAC;+wdTmQ&ph&*jLo;oZG-()0` z&F#xBbhI5H1@*AB-9rvYCQmDfiYDcZ+WbGp^h`#Y`ku!m&_4vC|G1S6M$CV=+$}HkSb_4PcS< zI9kF|Lo?e%&&+eMrc#S}ushPsUKu{q#>~vS??917*6DJ|wj>Zdss@uwFL=IGZ4Rc? zR16rudWcGZrbyZE^olx}WU-*@Vay-ZSG5@#A|*{a(LhhueM^ud&6V_!fP9)hm>{GR zJfg;vh33_Mi;yBkuk9|euUKlMXA?X+W0B?cG9M-_yMHg0wjb>=bE%L!X%^a9EKgF6 zN)s@B_EtmawOlHb&ZHop*8y0!&@NYd=cxEx1a!uRt zvI#!1+EABQTe>8qhmPmwL_e7AOjE<7&*Tkouy{XPMYx~L;fmGzaC)!3$l`|NjxnT8BT1rqafB&mrNXPrn}r2 zShdjAXAr87yfIZ3R;|D=wtX@QR}YhvVa6=sq#Cjs7n-!miQ?DBQ11y^O1VvQEVZjn zh0Dk*sSlpL6V=ebl%ec4uMxYAFC%ubaYwJTl-y}HuW!TQ*Q#_XJKSj&j-BZz{?=q( z$=1LbxtC>xlzb!LPf*wqh?xBj3fDn`NbQ=uv|p3j4VrZ3pWo+L65kX-joLMR&2%h2 z<|Pm9kPKeFF;g$?-Vt+C^4c5M@va+XA29rW2O99|`AFR5BV|Vve1x$+if~=W#X3Km zWXzC?unGAGqHSshkPC^Z40La{*S38UU3z9{liSh6=P)2vCO+XQN^NQe8z}ZH$wo&k z^sd;{iNP~a?b{w+{f-Qb-27u(w{iguI`+@09Q6`1pYSUt#=};!MUQ$RDx#7l1#A{W z=Edn3NjUd*LOx;ZL@@{Oooghf#qFq>Js@pyyI*-U$yz{(g2XCP4FON*kJSbysN`BS{Adl(Lg;GhMmY@baS@tUFuNf>0UOHh8b(*(eq8j*;HO}ajhd*Oo zYBL86e-0*c+nGoNtUi;dbj00+I z;uYW^{gsW$%IytjNTIjKgb6bbO3MST9aonvHh_?r{V!|oRpTEM_@%vuNqHDQ=GH<| zWXxUsu|;4_73PKXU2!c9JI2NpX=ephq(%_<%^(%JMGdW~NXm)d`slq~GgD??;ib`NCGxI)dPhfe%iH;Bb@Q%+ zrK?6f5>}Xt$rSRgl`F!mbg<(Z9eW%NfY~^vuNzZHS|SZ(Rh5pwbI)BcOyQvl=Eg0I8^L)sGjD%TK2rQGPV3czN8oSFlh?DT!}f5 zSIW!DvM0WzGW>>`LZVW?m%z$mDFyB4 z{tO{qmdYh$4F`g4_lcMBDVIPoOG}K-UX^grgR|AaRyMon1UlziWZ0o^SeYnbpJXqx ztkqv3fnW(z6onhbZ6G`hM>lITp>Q!|m*JaS;gk99*+Hss->$uemjHszgpD5vStNmC z;Ykv74c$)T$7I1NcDx|!%DQ}UB3d$R9I$$=&OI%_2ncZv5V`?yeSWEVb=B%O z^7LZ@plI~D_GS?J;uajP-9H^QkHf`<;VB5w(`qZG2Ms*&_3bns2S*{KEap}Jg&uAB zMYQmxm`E|}rpNYd$S*+=+FAok)%4T>@TV%%?Lf9yJTX<&cGFy3E%AS1zm`BXca)gI zlj{;V7|U-%Nu59Zwz4WPZP|Ve`Hf!V+H@`f1nXx4;f%eAOo3p3w9mMW=2#9aUi%Z4 zZsaE3y1=((Ud8rL1kj^z>Ij0!u?dv*1c^CmIEd);yZWPe<^~#jWC{s_hEW6#i)c-s za~qJ_{2rfREUl#_mqwaZuwh>l1~(7#MxC`^+0(5V8Lxw74XuV^lW|%T??q|`?LRmF z(ZCYk^`sgR|Ir@5(Qv2owNyNM1kRjT>Nj~K^rulNK&i6hD?cYvD3R^Q@KFUbUT3%LptWF3%2aE`2~uO2>z#E zk4KKIx>DBSayd2~KWB4W#v*FS!6kRRim`kg%PDi`HJILI0!37E7IoZ7t6y+f|_x2xy0gQr7*z@xKL$8s9cjp+fa8|+fm#NNR?80vWkr2xLr zV_S^RDSG?TM1dGTOVNeuK#c@K*f+1rp-bxG=N2;kY!W+8Z|qL#7(C2?=wnX-JF1bo z5UVGXdJ~C%31-MB@c)2!$#gcki|*LSujJ^6`IPugwZYV$o0m3)YqG>yw&21LB7?06 zqB~2-fpP3OZ`6_xtvkGjRb-P!GeKa%yJR%8WK@?YkbRfdsm*plEufh-`% zL)K&;Y*WD4S7t=&7AfN!eF2H;eGo?^?+lsiKGTl4*;~T3fUhI+LPie-aZBWJ%gtx{ zOy&p2W9MdMOer(-g~m!@E0ZT*(E+;3@j{13cSizAZSi%KSc z^W&v~^$p-FkVx(AMyV^ANbjmC#QG%rA0fFX6DpdE%M=Jaz%$>Xb&>w2=U8l_wr|Rf zUFB()`LXXaXTXXNhhQB?c=q!`I=?vmQ#tsUA5?VtL;dmiWwWJiDUn?w?@d_AsF2d3 z#Eat_;ih0X>a7436CD*iW zzVTnx#FPzlG3Ehu$nwAF7!vC#<`Yy(IcUupkkhxQ9Fo*3{y zg44()OVoQBJG{8$tX)q;2Gu-0QPe4wj`wV|r?x51;6J*xHxGnz{!-C(&~$kfmG#tk zOu-Ft%4WOF0P#-&R}$s3mzWC7aq~}E3EgAc{FB&=J3iysedG!#b!xbj)apm#kLF=* z2#JYZh5;sED99_l^N&H(BN}R5kMN3Q$ zfL{TYa3=SF7k*33gDG!2dwu+qNUV#-Lo1z7M+~NuOfb({wqn$gt~~wVcVy7w19RPl z%kVN_>E%7Orgo&s&)7LCdkOzNB{xhw^1W^X$?UT@*mb`SqbYC`E`99??<;ac?HxeP z5H_yKh6Mdw4n{x=e<@{!Ye{?+=^F(_!kOXR2A}iBzR54guJ^Eso~Dn?UzaGo6MDfk zy?c2;X=*KOY`p@m75?I9-PCwrcT>vvV1CI{mOJ~6L|NJ37d_iT@DpNo{LMN7daf5| zS0c7IIYN&R3hszw9tk&!WVl$MC5cL%)NBXU~7|xuWhSLahBA%bIrL$P&>% zjP9eKvxc4zMf{(&q|Y=hBCKYHz1w0fR1g1e^i)IcI=kVH+4PQb(MN9gY{b<#hv*~{ z%zoQdjKb2DyRZIM*Y}?|*%V+FcPX&$?Ja>sId|Ip417nFRouX*?!}x~=jKFVE&S>Ep4GVHlOBq3M(N`afa(CME3c2JC)ri#}V?z9B0iSeJ zNM`F-iSI+ij8xn~d_&|G_Id(4-7UG+lp9KMfR8WTnqcrpM#?Y0B+j!d4%BN#OMeH& z5yn{3#piO5n}8T(4Wb<*i7Cj=W9-i3B(W)TJNKgFqbk zLLL#vkgQN_`@(@!j;n?si;%Ye=rhI_MAYF^l1oPE7$uYFAC4DLE&(O(w5|6a(^+Fk z=j4t>&%X%*Cw8%;+FE}$knY9R3It5e5&6R95?EvgWtK;RA*{P8GevKzoYz?Ce#`bW z>RpuUYaaD!bw57CMv3etooMA`f9CGQ&gH`6B-%%+%(7jtC7EKjeTtgMvkZ20&6+pI zU+!Rmu@uGWJEiA6c9*`~0$GQkbq^kQdYZo!0XLlR^wTzXmJNT*nk4rm;u2@Lz}4rf zb!eu56w=B4YK~t9aSV&hfuro$Df)JGU%@c}q+@v1F=pM-WR`o8`IYC(>c<}NrfFG4 zC!n`aFRn|qpZ>@LU8j!7y`@N9C{R~Qf&N+oNM|me$QNVWz)5tgrLDMR;o4&*=l5Yl z)K|axDONh(*yq>ilm4S|(mYbhqQ`WG(@;(p<k~1Cw^>=#-o*dDMk6I`u}3=9AkS6y0%~U)TiyKZMUbkZQHhO z+qP}nHvhG4+kMV`=gs@=#fQnB?Ci{BCbN>s+UxpV@x*i7LsSeKR1EsxPFx{${>y6Y zbeXLs&ayeW#Hcx@-pHR}C8eEYa{<@CnoH$848(g3S*w6!?0 z1yk8|OeI|yageQ*bZlJ zI~FvUN9rLNXRAeYW5D=fXyjB8o{aj~b~ws?ek$=CfCpfcNveHyKPWtLFT`6Zel*$#}F2<~OtJQ*Qn_*5-t)C1TSpi~sstkFP4c3(FuB9FX0NSiZr% z1qW>ao*2ds5+%n{+J8&#uE`sdVP7Wp-wr=gylr!?48tCQyc1pS#W>3r)Xg-4r?L1t zF_?_nwm_S=kJO@`+Ys|@Klmi$mGWhubZV$u?VZ<^QD@5IAo@X$d;2$@H{(@{`NC2v zoddCK5ihwm9i*{L0pE>A?Jw`C@_&1@EiEXt-SA?nXwt=Z6T`%=!7XgzQZxed_zi|I zQJdtitl&)h@hf#V@|Dm`{(@Kep`Mxn#wwvu^Kg+Se*ul^SO4_yV(((s@n?ks{=I+w=Gq(xarRw!>arg1e`tUw~^{j7gI9FD7 zo@ZU-dCP2_SC;&O35Dbn5CCanTPXwnCYt*er-HO(fguxRr4nUbAq5qx-4S%wuA3Ra zavo<}KN@j}4}i7_w@R+s5BE~RJkI^o!Q&08!v@euU>{^F#fEMZG8g#4-n0?AnJT?` zNV;b%;{%6?edYic+CT1F^UwsoMQ=iD%|_^PqyI{@-K0}2EiL`4Js}0wXqD`kRqzKb zUD~u!+uy$iGEs$ME`dpfBNEnT6%_J};yIfB(Vx8=-oSZV&hyHw<69&|$&5LC_ZDa4 zrV}2~l=tg6sgDv7Ir;#sAq!Nw1^- zd?`;rJ7y$r|qfMV9L6mNpq%`d|Ym8x0mu~_9D(m!yJM_m^C zB02}N!PBejj4Kjqrp6xPqtARh=UgtXH>)QEUbhA1>7)Ci;M>Q21hHpPHH7JEn@HX? zkgmx(eI52J^8;LeCFKMZ8#zjO$x7f*KI2tt#<}a(C~G+qFGJruJ|mWMtgD<<3X_46 z9XoFjKehSMsS1=lZ3QxzxbMIeN-(m*)Q>98lH93tIK8$J+TMoshQ0W0-**eo=2 zmm8o&A(&&-ePOnGHB8g(&td>{tFv}1KDp784*=WGXr^PBWM=Q7-@X{4s&6iJ@(kA^R%VzFM_e!&}J;0b>qWA-FO2x@0iY;N(Z z37$;8I}#al2`n`wvg>}scyhuPQiihO^j=n0#H1UcB+j?$bX6N%H`siZj?ms6=G%JY z?M+jcq0P&|EBW`D96im#f#}xq&T@^upGP@tJ>*QsnzBA*6h}^8pkwULc|ZtW%AbaFIz_HHY)n` zbeLSSEY~%|1cD$|@i=kZ5*m$%EJ`{8Pv&clQQ0ntk3TQWq#N`Q>Jtmd57_2X`1P&oZh+~3#q|tLT%3nnJqAHZGVDo{~KuH<*$NskGTT9GVvUmnBbxxsSVCtmcr9!UeT9J16vQ3>u%`=> zKQ_}RJ`|9-&yx@t!2;zvPE#P-@TM3ZX|ASAz;4>MZ~M`9ZtW3JIl$K{Y>M~lB=`%s z^?3K<>@gbf?Cw^=45 zHAzga!GFU)Ep|NXsmM8y-2^oy%X^!q?Fko*8sDeYd4C6Mg}@kr934P0G3^a`Veuo# z)eEsJv+bU-(oq`Ujkykz_vrs&PX=6uQvK?ic&AOBl-B+tqY{(CZF>=(rjvHoo4=gC zYJVNEIi?iWqUw!-+eAN*&Wzt|i6O>g3s=giAlu=RZONQkn;jeJ-wjF?VgV$&IUvm! z^?a{k(y=#~mw4|gyVj7EXvy9XGTrv*Mg>W|w-CsLlY_Hkmj%#~**1Qt4rEd1`-cVS z9M9SZZ*t|_$jzwR>tGhw8CntnSVxB!=8SVzmC!oH&jo+$ZK=OkN%+A;o12FpcfL#0 z@UMOCOrp>(V_2gK|G2}Ij}Lre`JZGN+7jb$Sde|2k|o_`=|{JzGQ7Ht609w#s_WY_ zRBlm?yVwvgY9l})P7E=OZquCm2oM5kKdBz&T$fF){>^XP^b_VH^gY}f8>EJ4#7*V} zX0PIs)>TqR7RrXOJ))PAk{2M(TsZP}TvUG01{rlgAq@3R8Ss32zg=z$@<7S#&N~ua zXiDq#y&F&KI36RpIXfk8KkLcjhor<=fl7uu0ZR=3jYM-X!2@0K5~|grTRML8BR$p)dKc#g+aA!=S!hsUie)}0xxh^7ID++%OmD|%)T*Nu2 z{hgdLRbW28LFQ%t1NRbw3`o(@gMqZ|s(px_>YOf@9Gg$8fK<0F^c>FrHcQQhSL`sJzqE;X)wl zI_f6V-(S0}eQO?*Cq)Vx_Q-j@Mqc4i2lP80KHAVkQ zZt=#5i&TLjz@ zue!ApCq}yXm<$*X7pveC%Y?`l>H51%_0trrjt_?WID}o`pCLxB#Ezk-DHlLXfJerp zkEp?)6&reveM4waX3eNACM;kJ@^L^mIeiqqxwE^T>r#dP4AExkRB)Q}1y!1NM}M~g zMs^5Qm~7ZNLJEK-`SgTj^Q~|hM}s}ekoNkj3Sph8xc-u!5|$$$MIMgzo7VrFboDfV zxgeWjsEI+dK>E4Pb+1jE4gK!ckJJQ%(?|8Ov5Z;@Qw2GYD)}auObaa9(bg1Y(qG?* z6Bx>2n>EI!Phvq07Up2i^Vt8h!(n5W&u`#rddERRrKr@}({Ll_%9<;;Q2L2@2A@dN zC0gm;CF(`zOesZys}#$z4wg8eu1-lFvuh6b$y~lZHFm#T>RLKC+@`o45|LlwEST_M z$q5V6YMGzWbux1{d~*ncbSPv)Px!jSCGZ98tBeaoK{ZypimZciq0~fD?;D(JH@`6~ zw}$Cnyc2+}tFDnbmBO@|Y+^9nj%%vb!upZsYpUaZ?CJp1k0Ty?e%h^PQ-hivPv7NG z*pJDJ>=AvfZPoCO=lzefmCUd!#5TI!&oc_qJ{)`cSrQKhFGMICo+erB2N_W^N@#dT zL6mlHXn#`1z@7A~v0k9JYS)zPe7Ro~Hl&!EN(kPDEiE0V%!fn^dscH;-Dx4Ux2Jwc4OoYMQ2@N1itfo+jSAp5YTB*l$>E7A6Wbo!#IRr;7t}l6 zmw%zPTu-$Gpo_*wcpPvI)NrNBIZFR9AW$pCK#z~QC=T@U70YQold@o^ghg=1r zrTJ4J9Pb`KaCUK>Kg-u^A0A?kf^t@REXh~&)4A*U3gW8AjfAT)d>f;0rtwAamxu0~ z%U7QpLN*sU9Zpm)C_u(`EoR^FJt|CqarE!vIPFi{Ey9%?_6!b8hn_a~#Wt+S$&rUW z2ao7EopcSBog(+qZ2s32;@NG4lY-po97hvIv0mdW$jVD>sq1}Q{R{7O2wG8~ZIx6P z+YEvAUxgfl&C$B`;1AG#ZAbLmITMD{lTOP&j7E4zX%|(p*8j3fA7Hq@}i5fg~;NVp0WL<$w+pYawBC1q_ylI|r>9nMM_ zyG$9&6|Pd7ovEZfkZ>IPT>d~4+3>=ElfOIFi+m6#%bRayOMQyAqz$TH$zItoNT2`I zQAJ>SmuDq=IFWn|W&Sb<2QhX$+cY(jY{%n!CNpk-Js4eaWyf zG0mV6pwDYEVa@a>%J1!zmTNyaIN6StRPHp>kB4lO z^Wp_9N0`}AAXxe0*(IKqcivp}HcG_kXCZXE5xu9I8i<5SKVkijH6c7jXh)W6p~ra% zWh4RNJM?0EvyhlB_zkadj7WQHKJc{JI^*`Ss;2huaZ3G`$tjq^J_Hm^h!^p4JrOD6 zj3!s;W$9N@w0m&co@7kXMPf@WpL$Ow7yk@R^w#g6STA?DHBMp^#<6?K*RAy6;~O z)s}1F=%)efH-!9GRR;x?#0_V*sAnyNLwlb-Mj6Yh_w1#UMNyy~MhR8CMy*Ip{x;`t zQJUo>*5eZ_&!^Vj09VNV5inc*9E1t969}venyk(5FdO(9RA1k9F7CAD7=$xDXTyDT zu<7}^ZeX45x<~Kj&aS*gU#*ZHdvoklbmWUkqA+3hoyf?iGj0QQtI^a@3)6^&?tYrC zgK19%6|K)hwLbfwPEL>kryO5FO}9X#9~0iq3T_GA9%Bs3Uvx%Paqc8<6i7pJJ(`4J z=E)w4`o@0TT0fX@i`SIpw#yv7xez^sdA#*YtWJ?0kGnakQ@&K5gt4B!d(|d3z9<_bw`5kVe zW3(FoYTl3kN@sgVzDWEe?yuD&^P#@&W@88J7Xc?qgRGISCtt?JCKDUc$>iw^#3KRTW~6K4e}uIUL$_-aC_SOD(y<{1`PJ0YB5R4 z8o)$^V5VL$s!_-e#lqt{XDJBqAt#{TCtgG;MiFiRn@6|^65fI8rf=G6`BZha%KT6a zgn9+$s?xcI0dwmNpp^0Skzf2!c6%T&XC|v`&uWg2*Dsa8b;PBkTnk(S5cN9m>qziihQ|?;Upz{j z{XW(lTAiL`bdBfIB4{I1s;~>Ap_$3SwNKQmG+5X3F0ynt zd)JsCjJf85Ptga?NO?jljhN(D7b024@7L;3z2aHdV|)NFuw(hDqX=pG1&z++q4x-b zfY4uoLslV_$dP&KV(-o1&Ik*Q#n)Cxzq*wE>N^FpBgJ{RxYx`qRYll^eF|UdLQ;P5 ztBL@h)R;maw46rW8%m0Qd*Up9y|K1$=z(K<4oGp3q|^vP2-&M6x-`Ggz% zAnR3c=VMnNz7*NJE6| zuFngg2UnidQX`Mi_vUtV@FLG71fEQMHmvY_cy=q9%gvD!o?|{D`rX02=XmUF0`@#) zjI&s|cH^}Usr#xUCG`d%pXh|UY%e+(B9i=(q88^;ExR=k;t|vzS(y@O`5{{ME}-^iuL6*w@qc=0MNx-r)W3Ob>q#rdQYKo1F2e^WSuj6$ILg z+hOH>-E3~}-PYJesvGX(E9YeX!S|t3;HhP6gD^qC{+Wt%5Yy5ee0TYJ*#8$^ zWUx4Y(;k{`tSWaF&9fVU2rd&11CVaIKj7a&%mKT1TJ5H&z19;^+mWe&6&bVUPQ8BZ#_9FN}sV(x3D#ybJn^*v0- zXnXYf%kq8_PI8U`%bMNUk;~nkS{qb1dn$_UK3?vn<8AJ{iEIO-@@~5LQH!Ec$MOj+ zm71hXu=Vo?0PH5)8Z{B(lQ$d)B3QpX3*6E4%IuuPAGRDAMULj`0#kwf6v#-TmHXNl zZPMDlH#oTK-QV`6AFmx21kx0$zVG|kSWEd6v93Ym*nusq{-ih^i3KQT97RqFTwk&` zVJd6WSkE$;y8v)_?dQ2ZFA3!9nYvMtC7AF0xUU@M8re zRML{L6zm({S{#3?`dyvFZ+$*?cUf9DvqgklSb_l-F@p4nS55j+6Tnvvprn~-|6up) zd2duWEbRsdtMjz$BmpG;`SlRqzP0ARcgG^l*n+1=k@}ZX_MuGXW8H8#)EfIW zr(U!yGq@Tglkf7~XQJ7n;3Vb=bU4|PoPwZ^;np&e!O}K&-jtN6KtHbrZ z_R_S&uk|}U+rVK_Hm;=Lg`_jRlq)(H4WuFP-pZBT`PRf~cki2UcL|e(yp;2Qp zxg4Zy7!5K6%j;&MA#+J#RBhdT3qeetV1Zoi6eroA1!dF+l~R7vD+4{6%jZ#8hVw(o zM%X6_?3(GyP+BH__l`aBkIv2kxevL@5J5K|24quVCBY&woaX9x7q=*y*gTw@bC;MB z2qYo{p@qBd0^Z5W6zoiu=i`w?+^J|@SprfuM6F^h%8OFnM6X_~;&7}cZ@I{vx>&CW zWu?g4`v(N6GwD}0YJxUnVHVxd&+K%k&9}-?Qz~yP2vY2V3GZo0*93O zbg6x_P(NerYCQvLuGD*9J%>;`H+6mdoo1U3=L-RWZY5!C~D3*8ll zO69lNT%FlI$)zOMDlNhHl?7^nWn@Gl3dC}J2L2(!6x6Rb3Mj#N#V;IvKqV@k<&y)FNrNrl zBl3d%`yq`21A61aATqlfjC*7ruo6qPY!rNhP7vr#dl`jxz;m};-T|eLoTY!LDtC5G zD$>pJ7TBNzwVDVMdEyVpf_kvADMe(Lei`T@1+7!_M~Wj;lXf>Gn;BB=?+fJt)sv-O z%}SjvWW>YONO>4ejGrdY9?$Ud^Nf{AnJHkPsR}PgVXtiR5$d7W+xs<3h~0}=E;V?a*60388?P-fXF)q zHbUp-NzoTDhVUd$Y=!)aS|9z5>wEN58v)f#{%oKJ3?#ens|*{|5BiCR^JB^$1o4`C zmkZbb6aFb{+xKBh4!il|dH2YR@%^Cl^JPU)@N-RW5pnzL=X&s)G23{A2tSO=SfBli=>gCdaoQ2m4!$L7zdtUZq^pa=4lD&v3KGW+l15T=S}mMYYPt z`npDQwet#X%eqG7{ZIGFb~~duX(CkaSI*5FZ!q;q&Jp)X*ToI@i&V~=*AKD~(+FEX z@vzfC#&U$5Ad?azRJ8`y=I^RsEGw!^kcIPdMdif?4$4nS%kLo_azn%jiaFQwzpXU1 z>1~hJ<*bv&o!%MXvbWNcuERnZkMw)CY(Wwct@`^6O+$$)sRWwgo~CK?BbuG(Bi8MR zmE_TElGNv?qk>pO&I<`j_O@J|-^b#DT@Z;HRhC(omRPH8^e3{bRTnU;ZOhV-twai2 zD}0<4|E^;K?=^C?$YkN@x+pV&KqDh@Ox4(i%TUX zXrMfi*lA#^p@jvcoAbe|^Hs`JeL(oNgJVWrYa|=s3EULymlD#K6lcrIbGVG3oA#Nj zhZ|lDOmBu4x>wgc?Y(ZKEY_q-rox}3pXL?QB_tOZCl-dKa?0m)@GzKG3k=PFT{aat z)u+}OMKX{pT9x-uFts+@8hFS)~(Tj5?=bUDE)O9vZPHnlNS}nJ7{Lw~l ze2z$1&{^xGwr>;Gxu-X-`ja8GBkQgXcrUHj{LEVyPB$}*6EFCY z+gba=%=;w#Uig!Ba;6@yFc%RCfW*Qyp8th8-PCya)1WNZa$tUiyC2vQ6>w6$*3>|t z)k%Bk07H;ZRo#R0h4$;8+I1@aZ~W3(x51XL^<8gEnot(fEUAW(LQ1SmF+eI~NNGFL z&urc(0|ZtM3ksYhXXcEb!V}M0wslN4C8}mPyieaDox>$9i?=BG#~4QfHNU!NudNs1nqJ`Ywth- z(9_F&d(%P@J|O%|njKDBx_~;ZDFsM@A<)@55eqXdB$-$W74I*BeW6PabG}n~uF5=S z;_h1nfFBZd37|pB`#VJu)XK$+EDXg$3p}5dB_#8bSqk9!BoE4*zPJjiXbMfH-xU4< zqsZvDn<4jmgIYXEzshln3F*Z|0jyimmeR(7lwSs=+;bKVG?Jw{1_6nCO>bUgoft#I z?BGz0xNQy9y%(O)70bztYqo%H{*ABCSsza0APZY-fxUtlN?oK0@seDspjC>UIrChV zB&0kFGt=6b+pibw1aw_{Uwc}ts3U*mxU8}Jvcjy+1&1pq#*Wk*MbTA@yr4v6)=?14 zlttgOGNAbu*Y*WW;3SBcAPskc;%QM&aPWshE}J2UBm_g{;=7Ua%eLv~hj+cS+L~uw zLN&t)957!lWHYbq#EehNrA!8m#N@%e)9jQjzT@XB?HVP#0)V?spvgB2;Ji(urqRAE zy=odPvVA`F?No~rW?hiBQwHBe!6Nf;gX6?Ys#dEyJRvs z&yc&~h{R3KKCFRfCSVa2y!~NV7PW4gE$WsMTu2))a9NMlj%Zm7&M0`QJQoZ*79PLd zFhCs2zCW;!%n8d+G>0Q#ueGGWF91d57T-Y&Qqsh-fQXE__?@NN%wq1RL;zxA4J+Jt zB6${y$}J2@kf6Lb)}(iZS>jJZ0hvro%V*`gUVsN+4D0MaJ`S0dD&(whVcbl=o-?P2 zNfxn~=dzr4d{pFHPu}a8hH?RmlapHj|MRQGqrV_`ezty6`RO-oTQfCilq7Rfk$eD5#eCVFPVP5U>NS2Llw482$w=<|zB1lKER8NTB!9+)18UQ(MQ@4Ep=Zw+xqag6x^fiA~SY&OApFwZg?uR(>a$^Ug8c8xoi%pbiZO@ zxCv*Fff9qo4uAAGQL&o6TM=6Wu#sKF&)RQL5;O>xpVz%v zg-KSZm$Ae685NqRq(;P2{5m8{{f_1hEnI1vPTKCrv#6`V7Xcr>@eyV2zGB|VS;~vl z>z1|_lr67bkxzIMbQzC=rDkUMTU=2&_48b8OFt`M93u>l`))Qg*i(8&piVk_ht>L* za8~fgDng@~^*TBf%LQzLxmLn%jvQk%!RkT+6UMPs+G9h`@MWPQ`^rAoj3{jDte1(< zK=t&(7*ioJ9FjRXvQpXnGVks`O*o~(VN)4rt<^BGmiE&kQ*fa}0*Xxyg0n|>hR?uI z(;ct=ocXlYR-*id4tIZeF+n6X4}?_sc|5q$90AyNnPlkM(Dsb^yAezk^)-v)VPv-gIP4;8N5i&eVcBg09GpxE;;ooL8QEe} z=^U{1XCEd)Y*`4UBZ@KG4*!Z`$>8)-O|IxtLu5Uv28F@^L-3LpK30O<0efii#Gl9jgEx1KEsJ}H zynP*n=R0VRxx);ZG>WGZ;{ndQKvfMbsuQfYnKzNozf*^D2^%_FSy^vk?#;rY518!t z6xu9+QRlAZeP`G&mO;dzbG<-_L^JjNT`e^SU0cI88PjhX9i3SkQc29!FWRh`;rfB9 zx#Q?OYx^Y4y~ty_3aRk1sAt{}n zR;8@={CbYN9%ORuan(#O6c?nIfp?F@;g#EFJJonOLpQ-x!-my)RNYb5G%xObm;5o1IE(cVb9-hBXZ{%4r37l*tX_)XobNO&1Lje{V?I;MF-iTpr&HtJ56 zTM{`O&+~0H>dr`OA#RXs8F7&J%99iGZY19ssV|JV=Y)2+YuDty?PR@Xix0)= zCb-qz!(>Jd@0wu@~^M- zz^1XK0n}SDBYGZlv!16i^EG5N-#xF=x{d*VaF6jcK9gqFSHLun4Q2@&@zg(^3JhZ> zrJb%ZB7FyD8PuUTLgTzO-e2SsdOQEvd@t^wyn&CQZe|hEVSp=_>}FjT7T(U%d@0K z!#B5`E;+l{xFvIcH1mohy+0v(ZSNp83^ffl0yEw)wYd^z>TON?NXekP`&@sKK6?dt zV{z(Xvn9`jb~!Mm@04fq>^jFVUUL2YN~0Lf!9pUPDhod^OTT<&be@uGS(UFRvgG_@ zIszY2odMrZTquG~hdi59vh+SjrqE5gN?aNFfwXFMiRonen3O`73@TyX=)Smf+_ACV zpIS1;*zrKf3~6<5FTEDh?ZV5GkzQT-URy^b1(>{|zw zkq6Sf6k(5f^^ueWD>wr-V5E5qAhI8555Tl3 zN2~}a|2>(mgJ*H-Rwef_OeK6Gp7)EWeO$@zqSzcEf&SK=Vy2~2$}o^oJA0X3`UI`k z{Qkj6GFmm6h4-qBtI=GrZF%qHHYe76f6HIBr7}E)L%0TaY?L?a=yj3U9;UR|K+RM` zz#^i!1bT7Gez#swCZj~%qJ!z_%I?gl0U2ErjE!5bBE9^YomdNBDRGfna(cNGr+#;x zu-TD@S$4X$mX8=WF||mpQ7Eicjjd}=LAe6c5Jt~=pP>&MUS`bZ~*?U%DDbz+$K8Ni1n zQuGQDy8`A72`3JH(aZbB!rAcWYG}5n$0)!ZzDh?+vWb$wI>xDIW3IB3R`hW#0c0ZS zAOYeDPExzHCKTwZ)6`LO_$u|uO_6txLp^Zar2OhU^PZB!s&g~He1uFVY}UesZcg?y z_tx)hV7qr+Hq$2qFH4bC^Ra%NvRG4opFp8Q`&>ZbJtb*G;*2)w6i;EDpk;TuIHxt%VsANqk#2-cy zD~*DJ+&1N8V0*^GgU=mCJ)kKb3TGSH)6@AS9k0xT#CX}~9mP-r`}VmWa#wc&>X0-X z88LVE*&gc(yehMPmmzwBm03Om_H>dTTB9(~vl{2@-{`dV--qRmq_b(H&a;~5;GHu* zf<(@|t&4O;GZ#JS@$0%8=c)>s=Dn>9OSS3mqbFHdH5S#{h4k-DV#L_=XXv-XJrk;4 z1%H{NRe>VYle}mtS!|3DZmPCaA+>9B-xhC{E=t}(6@5}gB){al^AqLl9JVRhr*t!- zM7#(J6?VK&m!u2Pr|0kX)7Ylo7gGX_e?T6_YRZmF0A1Y+Dw07I(4>1xh2%)`X0mMb?LA=R}qj zxHz$ORx&OR$hY7Y%Wn~x*A+`}HP@S!K7-^TTfqS zxt=z-{!syW8W$_inHO;;6l>R7xE7o{f^H~`qYO=O7hZB`gu-}{drCd)>-Sw z3cT42I^ps*2Ko*M`{;d!N%aJ!DY@qwBZ-Q(o@+ByMt=eg@Ahm>=r#tF>@y<@_$ zhVJz?_B5AMf5WBpQG3CQ$Yu9{Y#bMKtUGRZ0?Bz_?=BCL2zL^9DYcDNXcuf0;6*l0 z;+7c1br?53p8(H@GIq5a0}3;Yb4c+h_^pqu_Kjnup2JNieKi+mqKN>`f^hPr1C_3DM{(y1i7WR+;I>Xp@KKoKsKL>o>GtBpkA<|O`_n=d)= zCZ&y(li5MMIkQkq?}UVEsW(#31dq**(QL}r{Rxj2Y?C9|+E=_WTD-AR?D^+(eQ_jF zmeI6nGD|`~2D5}Y#0*Q-BbXg|V&Y|1DXRM|PM5Wjk4JD~P`(?o-UbL8X7bV@TNlL|lPKc^5)3Lr3pREpw zvpQI3Ss#z!QC)b@j5)f1c~^@&Tg1{FqB<~vNr9O;UlhIABMLUmxR(NHBxs9r4D9uw7SKJMXEJ{Nz-LbE2NeSR|LmYGsDw$DMM zPPd#I`$p%dRAG*!T~>?};MFpx`d60G$O-YBx@tiXtuU$DSwFeu#aaW+fNI=PRbjWL zD7G`9=UO6WK;rUk)X>LMWggnI=I&bS;La<&1?1p2&EKJ z;Xp3JM8dQ+F2vWr^Lcv(>;+7KriH0F2}VUKI3+Te3dX8vS~Tn1rg`S0D>)t{ZZRkyyvVPna)2rdBMrx{sDNy zA!w*5*Lekgz0tU3m&m7$vA7n6+?{3xnu%-*tZ)sP4%rkBAngo@q~N3?p?<1O+m@Ez zHU-Nk5zDR`r-lOg)Ny1S*}b_vqCrbXkkIRAkP**-*jp{~hcB??;E&Tc@5e|IVBaa6 zwF+N4Y(joD2qhwzf{BngXo3PDZD^t&N*sjzBtdE-f;f98cCgN5lX(<79n}Sg4rmAm z<{&S)Y}u89CoH*;i&N5$oa;O+K2I!ezKt_^@^3{aBJSvv6LYd|Ay$B<6IHit>%6EF z=U3+SE^J3);~6bH&^|(ewwA!lgP4b(Y)R-VtVfzDfXG0A3xpr|{5K;(l8#Tl;N3i*{v8ZU$5}EY+~JjY9Cpo2|b{a z+&B;c4`BJonI?sUJ$fUb3gbgvz?+u@Su<6%!cT|SmColYR1U;dp2zyP;5XMq0c(Fa z&#oL#ceUiKA<0c%5)AFpLTAQ=Xbk&_!MFHh&J-|DG{g^29+zEZ);HMNVW8>oqv<;g zil3$TY3(Dyu^pVIBgyEIM9yR~NGg@LR?VYxI|$j$)Dx@gf6kJx>&d&AB^>{@dZ_*n zdr8p96{$7z*)^>$jC6;JZ}lkJyt!AJO#Z-QXx*3O3T@I|=qdT!scd_99>3F6y&PK6 zJPYowV?XwtAAb&LVx~q-^-le^QuoL4pRWtbiy-`6K!y%PmJ@WF7{@ z=}aDs{0Z=r_$JzVsz1AkBX1G|y(E-&kP5OR4qUmfbAwZ>E?2_11QR%hZQTSK6@JP=m?A*?hI$Aa!X0MF%|Zk^z;%rO<8C8FGPs;S@5oTAOY(KGC)U#h2|(yF3*_Vi{$th7EJqz5~$N?oUC(hTJ?`n11ju}0a6Tm{@O4vBI$=^!c5>Uk%zj{#R zx02&`0cL|;A=d`dKcotgFsmyi5sS> z8z|5jhDZ9sR0U!8o`XaJ}cOXKvrLB8WAdfOyQoZaGm+Z3_dpEN+` z#C||^cb%g*AUd_{t4n>*Dh{saZM6RY_NmYIC2=C|pG+<{)_m(c<=?gH zrXdbc`$=^AfXAe>Cy6=O8i)SP=Tlg3@87pS3%uwE>U}BhDvu-bkcY!mp{TSlsB`VI zYKPHc1^EPe@t2HlW3o58T)3y^-_wyT<;Kp+2ER4?XY8;&Is$yR)-z#el^<9;sEFzz z1g4mE{k2+qk=3v7IS01xi#TUn;xW-HN9AJn=;k&7;kF5n3UdG=xh_-&q$_7Coe9+5 zox*gU{jyl&Ssq5S2|Vu}dM4kJ9W949_WH(H=F-%Z}Ohh@nxF?$P!*D_E=#8V4*orkm4nBAl$4vG$2~ux4FjG$Wqa z%sl%l2aMah1ly|hJhO^JCl^CTy!#-VPSiDh`aj`6)b_)QL2dVF;Z(T1KPV)D z?-;q9_Qqj%tYkG=K}wS`REc{@mu(E7c^XJT)D_@*sbB<&E$FPbp&dIYBP(yV=#~pK zP02qs$Zekf-2V(%r+lCRcyETM18x>Tt-KI%JJl9%xt~xHvSlQnbWuwhXahhM{@5@4g87vA;@zD?jfL1 zDJ7Ap$L5DTc=E8t6w9&COp^fBl&T6uhNy6JZIyjxAhlq!D43J=X#I-bQITeT6M*W} zLS-_c5$9FO9-FUUTI&JY$HNK4o~9K*7mJn(!D*8@KepGO2lAz+;5?2d;5?Dj96T(Q zHcO4?DxNA$5|<~nbGx(VdE-=vlQCb&ZKuCc&O!(Ka(v(}QQNgwr#(Tu^MDVdYsFpfBq)yGC`h#ghb)kq1$z*Hf9l9N?H10D^8;LVi}eb{1q36 z*RlVba!!R#MbTA(zFqRJYQiyXf)5Z;%r=OMu6SSdX0B)ePL>lrqR;3v&hYzpbEKSD z=O49*(B=!kGztXkhurpC8HVJEhVz1FX&W4Y0q!070W0MU$N#aDU8=-fnOnFpG;NBKx@~~o#t1A=fMwLCOx}eb$LFmP--M2C~>_xLRw8K}| z7Sl7m0D-Z%C7;-vzIOP1&vhTA!fn6VWqpn?hE1y6(ZN$8;~~XgtA9cWkpu zNInBzFc44ZvI~5MnbLeP-eZn$DBEMxH?MCB-O1U9C!k5rH7xxcRS_h*xLp20Dp~aJTEUDh2w);JT3tdV_|~*tBtwEjH4~dGmB?TSYQ| zXercRcY<3Uz`BQNmnt0!hUjz-*R^J_2ZGx@I)>=H2>wK9um}Ic*gLjY;zZq>vDvZH zvCR|Pw%u{kNlt8coOEpK#I`!NZQJ($H}hOGFQ1tgbya#StlhNXuA6!1#ut9XHj`rr)PvzTck? z>b-KK9;NbJsG+n(+`{YuZEDcQrFgQEnW8CSR!Bztgv>*5Os)+IXh+WLR-}K zsDYoxubyaO%|fL;mNJD&r;kO5{7jEO4cN*dFO0aud}!kx$~n(@T-W_Pf&oq+5ktc1 zL*V#Idp&auWkV1&5=2RP;AGoS#%~s1)CLIo+em@e;L-wMenL@qHF;?@! zi)CA_54iE>I(`cG43`FhW{=|$;9j)T7T}r}>Lb%Cyr6s6S*V9&k6F!n=Y$-Qq5cc#fBNmIH7QDws4$ z&_f=?j6ag_vpCqBjqodshB$$SQ9JG-y@vlv?@ zXKeSu?4d4qd}p8`IYl=3a*v{|B9%hOLuR9GgSiOc6kjZD)G3wOZsn2M z@5Kq{Oa#$}J?{i3Mh$kUph`WXAClXkPMeL$&_Wz6Q5D%4Dx>bg-gjVoU6P z>o)1JK=W$0Q0IPiX47@_=#kR$6>9Om$SLkJ7JgYc{akMQTu!iu_y8ZER+>;=at4ju z7~YCVr_RSh8SI{-IG&ud(VY^^xz&`(m)Azm@>dEq|>`OW@2iE4m@(4&)1}QV>`w z>0U1JtJV6v@n#Cgwq@ajBm_YESyTD+rgJDy1`$t}U@Q{immbYo+YnDG-&=R}I6bm$(SjXBidL&qsPr9eT-r8Esspea3Zu3<^^c7VQ$9Aa zq;N?3{tdiLZ&c*~-bp=)b?cQrPa=kW8phlza>25^kNT3C`}&n`Y;Y9##Y{ z96$lmnX=^{BQ+hxx@tZbV9%6_uB*%Al%G)_nIFrUKJ|R7QRGH@Q+H>Jk;uny&i+o1 z{Ff(6yG+A^;94FxJIyl&XBB6Q`x#RhV@BJ19+1je+QhW{axmDj4;2H4QaesK$C9V)3lB_7U|nykar6 z&3z?W>zM%kdqz$XYX3dwhuGShEfqa*aCb83V^lN1PnV-E_b;fK!JW|o30LZ?kp(gP zf?+1~v^o6e8uwl?s1$SAj3qw7nx4R?)?mx7AhViK|5Rto#L}8Z66k5_XmZEWQg^t# zQ&@s0TK=e9R)TqKD#Lj+W2<+;ez68aX0s-pkJmP-tVXP1?=C$xS+p)1wU!6!>ijFmquRM7-Gz_#fA;`pJR;{LzlG4`S3(c4#$-(4E(wkHd$p`&aKUExZ}E?I zRlItK?(HFT_@4g#xI8fZO|05n`~n3?LScvhoxEaa7&SzXdzX?FF2*?)Ppz9|UN~SL zrFt=^9yNC{#}UPLF^7(A@fS;J9z1;bYe=?nBb4Ro0DCgOEiJzpAJG!P(t-RG zYi&>}?9?qGg|5tw4hCDMi^rr9WPG+{*C46)pvb>g;DGrsZwgo{GD{0{Ls2WuD_4y` zEAt{GLiIsSPEn*`hSmKwERRjZLX~38r#tU#C@QCbz>0h_!PQU}B5Pj;v;j+otn1V+ z>Bkz+JCBS6$!3PrdR6&Vx~5Bv!&@cl>lQn?&qdbXsd`A2e63!RMt#BHDw}4*46P>o zVXmG6A4^K<(lA(6V|Qwu{lS%H{b8G_CS z1g-1c`@<^a+VUQL508G^XQ|gVj1?rFkR}_3C^?gZ3svQ-$pi3~HYKz2SoXQ)`+S8Z zrc4tR#XOb;DOOZulVpTGW0x|30JZ5QTrP>KGnxtZjRN))`4XgPXhQ`M2r7PYaZ0x& z359>!A(YaDF`gFX*PyhCs%KfVo4n$$N)rb;Ynta}XAgZxr zeX-?qAfxEVlv?wNS3CHs-~cB^1l$PB7!oEFAhZ{~S#5`E)}eo}5blKrAUHioo$JZmurrE~*CoQZ4K3B)YX>Rt?$8ANzY#l<|ASDG>gFu*-Pv zo+z?oP#wEVnt7GAzMh_->h5Q)B4pFQpdOtEgf0a3#V<=`0_~Zhspt9ghcFp`M<=%V zTW3bE#4nS=ip#L~=0B%;;g)`0nOmHvL?wooZjC3o2(A0)AiL8IsSF>AFDAH@nf>QGY0E~d$z zQNNOlDd)+?A`B**{}is$=|Zow>iwT7Z$hGiV$iP+o`gZ#tjIx77H-#=COPjVn$?GX}s1BMmR8|*V%8}+{nMPN&7 zOHh{hpW-siOx5i2r7}vxQjbepC!u5*?ODj>4Bf^%uqar%14Y+(zKo@GA5xD?bCi=~ z!YOv%7Kx%wed4K3?Bjdm05hG-i?`xK3(6JnRSDiGU;aOc48&u#Tdk{73R#965#^9w zLlpUu!RXj=>P5b!25QX+)q3cRjUGv4Hd8rzjmG~zXhFw6vEwuaFx00(fIO>K^+zJx z+k8-s!i8jAR#7ZTI zmazgUnf_F07YvFju+aL{(r_c|&n*7bx9>x*pexZ_R1X<5@KdO^off;gZylO$+F%S+QrBxs*;2Nvu6r>j zTC0IuoElh=mF%f|Sy-teB&TltTH4z#*TlM#52?^F)r$fMiWS>jriBps(j^Lw@45PL zNw<1Bhqo!)Rc=deKtxr?{-ZEov#5d0)*3(?xsJqf9+u2`^4g%}U4uIOA3#sesy!*X%)^!Ep@+oa*!*GWGKQvid|$&r%M3_*ypn z6i+eE@hH-d=w>ugM)F9eH+UF9b$7`AG)ehuw*TI0mDE(=pZ&7-Bqto)ko2mOdB{xN zW*t=2qRR=c#w^$E zYUs%s{Zeupd~NJ5wjF%%Ay24!0;~!kI~hUx8X5(m3BAm>+wy*G80h|pp4uOgk@O!s z^W~5C_haPU12uXd?uUzi33HDdD@wQ-zrtZBu1*i!Sx1QcwtD*#!kw*4pX#)^d@b>X#AdDtzxkkVLwtFtWB4x*fYG z5QGSYPxlU^2PA9bm8R|kbwu{NM)jT;9xZD)LT1daUOzaGTt9x)ha^}1l6aOxlsR$@ zbS)9St>-E?Z_=s3RGm$*Tl+WYJ6;yEH5socf1CazF3Z11T6=Gqz)wfPstp;^ROT;j z1X1Vt+!YjunIWlkeGw^{E;`E3m9bcXvM8X#dE;CXhsS&Mjo_lmB6B&y{T!w7Z06sH zKZVeWEtfRM!`;IKkgu}@H{%teoNm4Rrb3P3X%l!P!N!G8YNcm1<0&S(nJs_{vV^+w zj@8{vrk~w6VtH~!%@lq!5i|R>X70D5ilIV*Y!R|wb zKh`IdJ<+246tHGSZf=U)7Ai#xCQdjwu+!@Ee@z{ZwW87RV`Ho}wSJr_>hlFxDIaF& zxYGaQydp}*Dz9S}IM)@3I~}`x^Ao5V)ge@(EqU2Y;vs8*T{9-I^MWAIR;2~n5AbE6If@oIsbycpRPA=o=|yp zva--7x^Ck1Zs>EU!WWz_cw{pY@U@?h!Ymg=WY8%qrKu_hY3ei9o7WK*&P~s$4(hER z(@Pf1sxGms_(3kZ9%XKa3#sB0}Qan{H#lp;&p{#w)OKSP@&@g&YCN>1BIfO$n(-VBdt#0C(%~c z9hmb zqdaDq)*v~V7Kbd5r(}Qi(>X9JO_G?GIi@onrYd2a0ieiad6q-u4K{bdsf#~2YHl~U z_Pb4R)}^_i#v{F7WIbQ;ou9lSl(pGspk!_oPNS)u9h0o_D#@mYKU=j8R9OO=dvYoP zz|R%q{y1Ae=|AE;<}V2bB&xbJo|vdtWX%@pX1J1+I|>q6U90F9w6KR^wd7D#SS)^w z=(r*Yyz|S>tBqgc$<=XcZR#$zaa44G0+@QuCZ001H8hA(R{yM?{k+YCJYSc*1Q7N{kxs3xg8YH`w&k2AYnKah&&wi+%`X!00 zc?u_^s27K;k5%Z-v@hfnm6y_GnW;041QE=+NIx7Fwm_{`%SRc zbys$B=wmP|_2b5Y^wB{KjHszkPD#HdglYL#Oyhab?BD4_#OxQ7pA9MHQGJ8< zv&KIjanRAL!z7~m3nhA2cdNFW+zE49c#T3%qz~PC8VVQo&}J0y>5FUtElx&u_zhX6BQu6%hxP1dn0op+ccAm(P?Q^A>qg`Cuu0R zG87RnRn{S~A{`Hnm799eE!AfwaNSyaSuUWY8EQ1ucULXHzT=lMCp=Zm=G1@I@mA?A zmM?YIx8I~4@T?|^)F;98#IQ+%#k;F_M|!?>Nt zloveySs#K~m?>6OO1W)gBT(S#%lIlXy+#cF zD5jamomlAjtPTi}KF(*%fxW=E+yxqRmUh?j1poPwpRD=_q}{8p+>)bnPnR_9F?X;kCl} z$js=7c{|`z`L0Sz%xp=%b6D<&+2*AeVkM|BMod^Gj{M|Uqhymr z-#t~1`teOTIO>KUmF9b+nGsL$U{@^DCUUKr@s}WaT{ip}X0l2hGul7N3wnP()~*Pz z&=+l{v#JqI3Xo6ic}jC8hG>Px zSi}#&uh4@E!xqaLwi!xYm2dl(C1#<(=5^#lzXHAiYyz1hW|&mCp_-(-bh1;(Z+Ce)qP7@1Zm;@{+M&0BFJ)t~!~g!I z1l$*+X~DlR58m~!2#?p69C8F`<{9BZc|r_mDTa$xvj3b5MLSc4Yl11@NA6Jy=U5U! z!BG`35Un_|(N$QUAJrYi5uS*Ttk{dut*exitt*hDjg92C8T10u_N&}VR;}=x`6i1zyCfO)^!y6!o0gwZLcyE*e{aZj@*%Yo&Yh4$DCR%YG88==T zS6&%+Uij85^FR#mYWfHLqBXa9p0D(wj0afaIMD!J;sdm7fJXyAw|(g(4C6!ec~cuSRCZX+wh2zQ;^zqx9FIMpTEs+9s&Y6YcT8w89~t-*a#ncToJu3*$5ol5OMexO5LNom^_olMlfQ z5mPXA+hYIDf3~>vo_H?gP7QPQ#5?B&|GaV=cS)Zp>>#4LKOydFg7#%zmVe7H^;WqH zP)+%@QSoTr_UWG2^0!F_%@L)+aM?E&Xc-Wqs#E{3_`T1IT;M`jjX~3}`t{7r-St(r z#NeUGL8+wl#Cj5E4l}dy!TtBWDitgE6?}{S=~xiF*)773yDff=^#&oh@Z2|}v>=|~ z#*T}_p~1)X$Wy4i=>JCZDAvN9PF!qUZJ@ds^Ux$3+^T?iOdEZ^DEuX?59uk8iA+f; zCU*+e%V}~6(eP-7YB|UGJ9AmIVHv!!rt}sFnY9E1wkK)aPZEg8Z7TEy@BKxEdrF0S zG6|&GgwT6IH1EPIbdb1SpRq-hzj5R7VS=X8!qsq$*-Z^Vwc+`G3X_7p_*EoS+Tq(3M`C0*%!TaLjM^;)c=g+s<%oP>>9}e_mxy z$A9qvgMbk&``|jRfYq(vnCnS>wa|P!jm?$6H0*3UO4!+Y5+GwX4AK>W(tJ-YWqf&U zpGeWsLcLsM9cs4ZdxD|AifsLXFH=Qe*{xc*dra*`^0DqeC{dBOTp2&IK z$jE@ODP*=aCKdDq)fAIF3I(@vuUeWpYFlvl3L+eZfrPI{>TW1)VA7ERip}id&XU29 zct?@M*^op$g98StU7v|6%c%;T{T_T@kz@}40k-|0aH}2Cn0kR5c4Y|@uJsk+>$Q#i z2hb#x>@<}8ePaa;8cWv;tlYy6iRG?Uch%=n6xkjBM#^zvqq@^U+;0xLuv}8Vw|&dn z@oD|kTx%ww{k8x8Ej(q!i28@*k|!$$!&g6{3v*%T5PVbV<^fqO`A9gHXnfE$RWL3jNPr?1NJ5GK<9G{>On2 zFqZR~{E=IGbq`!h1@0dBUE@-7LY}O?y@L-wnG54QD19gXE8P@}r#%^c`*7xaUfA9u zzlDwNsoui4=UYAqeTQpio{_%Cu4m#th%b+nPA$KJo+5K4eyqk5#wPl39iqjiI$b1E zW|5As{>9*tQ9Lj&-&f}ioj>51im%|2t3Gt7&-Nba+EB~cF}!1YPFa2hdyRh|F}$+% zXwBU{{*uH-Wr4XDHlsmhle`HWGRd-^*da6nKgN&Z-R6mfC7}2GQx}F9-Ne73J=`Dj z$p5c3ND80emDCIa2jBgcX5UY6#Ulfi)o^EaXq80L^$9Or9{PPWgmYxoKt2y2tvB!cr z=biz_o^H23)8jr#$GM%o_vp+IK4Vhe-8&LF*PeC9mV!eB!^2*_KAqgXgInF51K#}I z^gI_;M;2RZ9&OKdhPwi(T3$6r&RC}-z8o5%Pzln*9WnmX=Nd)9bG$y)k-&J;wFJfb z=V`^F`F`&hj8h~@hhI_vwG(OTxpXPWSAL>J1}E}tcJ%SAn)4}l@@#?)>EmCGhIzwV zyOIEfoGzdISm4$DM=wsFse;$sJznLpWn=fAXD0Kkx}cs*gCj9~2PhBf=?<(r zD?HGK&V8SLh8bPc8-d|UR5s{x={A{01T|?8nWnf`vEhZzU`^ci)h1fuuh@yZ53;OZ zo0i|6?d(}9^#NixN(1G{_#Kl`%^lZkyv-}j0_B(?AdH*EnX6wZ_$7{pl0XOZfM7Pm zlu%OOMQMk5H4WU)L6mk-TbOvl<7Y8G{p_3N0wuofj2FAC%#d#5Rsj#^(m2{zly10F z=))qf`QJJfh!wv7I-IqUmI9{1Rua!GBNbWBoRUW$0^RxO=Tq^me=Tb5x3pCUeDS;H zxZ888-59RmaUzMYOk1+)Ip%;g0#5>qJ~Ed!nOmfei^+8?|D41+wQEU(jAP)Ne5vbc z&f^2|c5pk=G>jJln?Af($4Q(IGtbCFr@Yo3N>V-lcah7Bpz`U_YmVmaXBzj(YdXl2 zS`zp?H0$gK<|@z$PPYf!C!*wN1V|zgEl+*MJUK8?mbuSCw&sVRJKd@%rxpS=7Q56X z9JnsM;4WF!TsZwM@Z6(TuDA5f3YyZ7gJee+>OUI#M#6C2J67iKyXpw{YB18jZ_c`aUO#9qd_W0_vIn+>^S+MidUk?**-CDe%S_nij zXHmA2vwulKL#?OL01}Uk@OSTT?kgO{qN?h@&b4kIrOwdj%kd|jNRy?tpFF{QoS>b$ zi!GRVYHye8lKeK5nsL9TLEJRcP78iD(~&;^Q*BC4RPrwzOs=i^-DBiwxjY8K|Wr!e}3m zVglYkqvO>7RBdQtY{5faSK1#r0<>n8HNS%a6?L=AGrK-)lSgV+g5NOK7v;4d^CuKv zjGtltQs*zgcCf(y7#|pW)1q4+?9IV*E7)8G)EnLhmW>6q-#j({`Z^;RKLt02w0zLz zFH98=??3lgMp@3h>fj^AD>Iw!r?jQ)i;BSps zg7+@p=g#a?bz{vSxsPI?TlGpsLt6+2gxd+76nBIs5HGO(W%*!L-4<$$mHE(ABRI)PT_kV<|$` zz7+^1QaAS~h7({$+ah($^woypB6Z{;BfVQ2;XbK_<2IMt;x-@Sn5=C1{be6qR><(Vl3{iz2sJR}XsUTc&DO}MJ zsQC<5bp@?^8Nj#++t^NG)r4X72sU#jlD8-(ToE3q83$fP467>u-na(c==H*Z0CjlDQF9M89fad?(1|>kcIOQqdB&3T`OsWF3 zVZrLpQVFvB-v&izXt`IhgQc7A5lU4tb#DPKMHml`LMGFY=aYTAvkiOyj#_C zVOu;gJDF-QN_)-j2`H;&ek@pDD9YF;0ij6*Ez68hT~SSgyHBidHkx5!6kNAoa@zUD zOZz;p%4;|ATqOC1VfPD;NATq+3mF+0drugiwWpRZw5usW)uRolP`+=%wUnT4`@%D0 z31#xL1e5~BHQ0h9(7dYUUdS&y?Y@w_Vk*s%#<753%Wjw{H%9p<(Xvn3fqkueB_NUA2^H>0f>DF>CT-_n}}m2QqI zDXlFu!NsKy5KxSHf^&LeGq+Q;!MRJS$|y5cIDlhh!S*>`$D4VDg=t>LR^-pOyj+=Q z05$6E!ylKsokHrL$=&#GhDF(PN^gbRdSJJ591p&i=C?KttDfz-z9=5Tit6Rlus-~l z02NDcKVmUo3ou!De)ySEMFa-T)h~s&N>Phld_A~)byO>IxZv%7x_>+kJ%zK;IS7)8%FgtE!?Ts+V3 zC>$Z*we}ZUYrk8U-xC6I?!K9d90OgJui@U)cYnR7>nlFJQ+gV=eGCmJl9gl{=yOp# zUTZd9t&|;IHw%RYdeqz*Rg@i{HKhZ+y1TK?PDE*1UPG0U2qu|Byvm_;!n3}xM^F}M z0|~tozy?2@!7OA+&cHWLnLn+NSS&k{^2qR{5zWzv;uH+1R~u!Wtzr)5bVmyjDRZln z`hZQCGp=k&4u4I6nMkGH7EtlN6fBi!BZ84Rsllh5ydhhuvkwu`;O%k60?stlqdZqk z;kV#yIq#!TQwb6L;#9XR=@a`FbV>>Rp6&Acys88Dhj2^@c%7oZoRcT^0O^y|qlBcN zK7v}YdllwCjp(KBk?a4ojF@iG4c}Ba6ZTLJ-*?o92&JI;Q&E1zB;C2!%g+_bLpTQ^ zB_iO_CbMaR%!AbB$`?jt%Ow;9z8YjT_l0_rIqNkQ6V4AfRs(8?Ue;(WNA{gdIw>qi zZR-^UlNt`U@4Q#Z&yf>ckZQ7QDaJg9gn73|k`bfxo%5Y)_01=eqGEWRBUp`?I8#O} zB#ZSOvM980OQnOKv{C6NagU|=Q=I$;%dph=_fb z=YRohv5(>+T=S~u7LiRyt4!-I+Re};m{>aHp+j=TGUJQUB#;^wZNG~aam?Qp_mL1}~t{LL1@f)3lyJ>ADC3aEHL=*C8t2QF#zP|RGqech}6wJ1CY8}@b>#A41h{F3Y@V>glz zbKV3zK?}V3>1D6myt5*&{4Je9N<&t+w3D2sN?)aLNf3kX%%N0pPI_a>Eb{|)3hJL? zN4r~H6d|u4TIGjYzVYldq$3SLPf!+fU-&kxX5HEVF5k0G9|F;_ol8<74ZTeWo?;!C zekxsLb~l~%YGjbUby(+Zh>;%{;?wh4#coL52XGFL1*_Adsxi2ybmp~Jp<qA`mZ;K7+7fm}WjBfMKZkQ@iRKY1<<2nZL;^^_XbogBo9}){ zGcHPzowbSzb*S^ptQ^V+P%hn%vo)?Qxbb*fa#3EDcy3@w+d4x(uPXRH@ZT zSE&u7fD#sA|NOcr@zIRO`EQ)!9lu3&+_FJMoE%^tn901UFgLzMQOc$4g_!Nwt(Sr^ zIU#3hlvue!n;fIMNzue-vA9E}vq{l|ciE=rCk6IT)4<9gF^l+NZBv<$s5E+MV!7kD zSYc&@QRZcl6#nV%r85c=_qPLY>cS`}y;)?wJx_(HzEsS?boyATG)g8kn~`r7gG!tl zDvgRPs#T9kDGtcXU%ty|ahp*q-pddJM_!HnoLt57C|VeXl-8et zij6Lv5fI-7vqJr^w(mnc3o%j%yqRFF7lz^6C=?2`Q_wqS0&MLr1wC#>pA(`1K z%qLXgopW)V8`$n6heJ+k6;D#8;#c&J_M?;B`&1y{J{)EqCoH_1yVDNWiO@044)2zK z?&g-Ke_BEkLW!Hf(3rw`MEVFz5n2K)*>Cuyiu>8&(JiJ2$o-spb@ZkBmB;PQBt)h~Ce2|*x6PoHKPATQQK%mSVAi;I zJj7oZR1wHUI&S;B@Esf`+lE3+k%R9Ms2}Gin0NQ{cR4+}-)1F71;V516EQwLw|0%r&rblyC=X`@~sKsS$<{6{5y{lJi86mFBE@PZ02 zp+`;9KJk5_4A?YBEi%jXOlghJO#n3uQi{LQE{_g10;g4qofR*J9JnxOX zlSEhm?c$joMkUsX6bpY9Se77`7^9zIb}&0DDTqZ7T)u%T+9U~{9Sz*EGs877Mk*bT zL2sPJmEk6Uoy9JUcf&0_F`l}dzI@Q@_C(6mXZDjIi{@I5Xaq4izZsaWetjRyeo z@1eX77f6jZSePVs`fhi9k-J>)IK}XcSxdF zyQvDMC~zon7AnmH`+Y=aOFPh0h_<2luSarX8y#sLQ6-$6^NqFIF@u)mLZTOZ|6BOe zD=yaVi+-@?>tyD0o&Ei~&Fjd9UV1u4vd-;nmV(65>CtL<7IokwT}$cp#}D%3>jVm0 z{@{-u{W~?nJK8n?R4tJ@0fkV^&-A%0^B}5MjZ_)GRrJxC-7veqKSz`(q5Jgt0@4yv z9eb|r6!fxN{`yGW-uX_D>_CfrE22e}s)q!+1KfhUJ7^*Eib~&`Cr`gN(@*{W0Xv>q zH~pVjH&J`U2g86xdnEqouSssBW^cJb`8GZEeh#=Hv9MjvJ>*=b*BEhfnbf~A9OMS6 zY|#wlWpbM_hLVm3fZh|!hvj1Mp+HG4VaZRtMBFw>!Cp!ly=VwC?X2tnNhtje^NI>! z1_P^h|KIR_mj9o4zp{z5%l||7Cu^R%V`yN03uL%u0L^Kk8R0?%0_V`3$oq;1^9BQ# z8Zq;2vZ&(RjM*@#F|3{Xu{NF!ZWFf`3Jsghvk+l7E-tfsF=*7r} zorj~pX6M;R;2K}+FElgKWQIYD;N zgkRPRoQ)7KKSI#g3bZiPPEB}Am`&Ud5n8WQw@;lQ!m>3_Nn=TG{Vrw5+1t23+~{K0 z`dc;WcG=rZ_@2c8_a_k(7!bYDsgy^XK#2W^@Bx7hAy5ObmWNo$Vy{J9g(+1mWUe9; z=r%vDH&uJMZey@+$BPyjkq>X{3N+@GfZpdqK4nY2`gOLVugV^%{x8er*?4FDN*ka< zO~-$@SF5`qUYz{aa%Lqdhe?3GTq{Fbr*00k8^Xq46=GRf_UA~QM0(2XPuGvLrW-$3 zk2EE4vszIMpUi&r${}ae8djt@3D3W%i|(~)h$SWJX98NUFxI~Ni^s+aoM5+((qYO^ z(>+L*jpcJn73R2>qmSP}YjshX_!3h*3GoJANXZ&|YUsLgbxscW-!Th7sv8r|pi5LD zKktGgKhN9BnJ>)-8&X9ZXbNh*_J{D6AMlrv7w&Zx?*aZ(IW)O(2%gPfZTb#X0+WigHN*$tL+yeAKtzwK5X^QhUGu$CF{Mc>fJJ5e6vG8IHE8c@5 z%->fc844*cPX4JZ#0dLoWom(LM}?=hVp(BHYb-O|zC;k)LE3&q!q!3Uzs)(;NPef% z&Nl6m1r2tuP!^IpS?fcag5L-WfC54RoZC+4ErnC)=uwkFn{%ER_R7G{h_BLTNW%t! zSsp?55(AWzI5K|ZiMp#dj%?f}9<7}x)wy0nyIdJ{9kWOy`FR7VwN7)9D&>YY8uXp71x;HqPEK-&Bg=sVLi5X zQFK;)vV|T&VZpzs0bLrdmejV{G(QoBgr;KMEvP51qslm1Hs*1aLCz>q8D$vA6jdt! zOV=L+NVYHeGu2N7IfR?C5Z;34yt!ctf6Cn<)3&7|97=DGQGCM#^=q^BiG`!CZ%^{zL;}BU+C~lGe%~Sw|nf z35rR{LUK5kC%isha!b_n19YDD^DAuT6JHFR2KWtlo)GXI}-p>IlV@R_D)zC{MKZYVa)Y zmg)lZs>!9Tv)4HJ)z-7+o7|cWha1YREFbW5a9&0?e6g56iSZu={Cc7B^W_C2nm!!z zP6^t!LU{bwYeSi{s#eBV{Vt66HzUI110pEu?eK@|2$b>=_lq)wxtZp2uXnlh$%fs1 zdOiYtUlMA34u^jHEUdVJu?TuNzWsHwM$F@Z=s15nyn3;5)$YX!QvA+jSIDX`|aW*;^9Yenfem>x93QJ$ZGA08ZfX;BWBeZ zkc-IwP8IStC!{O~3s;#(*o6WE2KEQ(f72S8|1Yi409xC*{EzK?u`Z$q=CbQoT;p72 z3V0MWcs+P9qcF2}Fftb$r05?~?TBy>?SI;am$5}671@thveK~_rCbVgRI&GGVk-)X zTwK3**rDP4s%@j*AGO`yUk9SJh4B&v+-mqHWzIyK76;*+v2`Ij-93j zo+BL%J)bF7D1TMn?R8*3Fp;)T8T|gY$CLZ^#8Ly1LPSpkS$&%B<)Is=25I#QmPs< zSeUgkC*2hMbz?EJYY$XVk(<=+a}rRY9~dIAuKvR*9onVMIMdEZZxdo_xG^y+mV$R{ zg1ls{O}`Sa=*VM%R0`3*`LkPU@=7=nD`xJc1Pd{PL!KsMK_v!1keGdngX%|qLSA~2 zqfLbp47-5j4_7zPSzs}@TxbOM)1LnRxsZ9Y7vRimG( zZw+tKo5lnsjn-vE*=@;*fNP$PR&FpRk2Re9zSRa_GdU=ati`M%j1Ox39y%b_-k3Cb z-gsUZiW+oGQKRgJY`8%ipD37QR$70|)Q5b!#>E=27V{1hqn%ckZFq5Xqh@%4F08Ot zu}`!jrB^O(TjVaV$jGT6cp;_S9|+&0AR78F8i}aN$}A5#v>kGQY?tR%xYHZb~G zET}lWd0W6rl3Y?WLa3m2?Q}&ycG@ii71l|nicDGMKW&Eop6c;awyyh3 zOwQel00)WOoc~KE&Y)NQzpFMm%;`0V@6vW$yqZO4N0Uwr$(CZQHhW z+s19%wr$(C-M4Mq?$_U+m&s%@|GYPqN>!y!Ri&zOlD*eD`>bVESN~eC?~UU)5vpS; zHE0I`^sgSL1q`f8L*O47<{Cc>gKQ0aZ@9eWtH}u3!IZU{t%}P88E$Xzju{)#)rdtB zbz&r8GSAup$oln}zZuNqt*)p*BlgFcWyT~Kr_Di&E@m10J53*^AczslE!bKlO!` zqbk}Xf;`m?AE`_U?}t*^l;vJ`FoCy#qE`hm=69xG=K2)>%o+^_%!2;d3Xc6%OFO}A zDgT|dk>Hr3=22n^iXG?_6#>?4JtYZTR*V`8N4C76B;QPv!8Bx@+Zcr#wU(+$hF-v$ zeO{Bsi_#y>XL=IQ!h;!;UTTw4Kn5H;{;2&*47-C?l>w_Zihm%VmNs^-5cWQotGfK= zs*oBT!he*bNI{HR?@H^jcsUjjtUI`+NWEzXGm0#>FrLyJ{AV^y26hNnnq3pvf!V4R zKeD|03yU_}U!3{Vl#kgYe6~=GjAb=ct6LKRe7grM-2euqf9LEKujgja^iyDze-}T! zokAVd#%T$oj@W2g25~-tEvn^LQj1oCfxWb5@eIk94q!)eqgt$DHbN${T6pz%kw(Po z{>E8#4;kdi$^V2-K-9Go0sXR_?Vb$^@`t@L^)oOH#w^f5$hOu}r1X#5?K+1UP{Q?3 z{UwEaSDr20uACy1;)zTkr-zN_VV?VCrsKyw{vZ(-h>=I71Kg(4mL}pZ&9B7dm(}-T+T{P6rnw0Df6fzjUvu-)6nnS| zOqw^V#$^Mr%`q#aldBBttun>tbO17eSdv|o3ME}ecnywu1t09!!b&ec0LzoP(B{U| z5YO>B*Hi0eAZ%s%+1G3|UqHmO5VAn5=1jhtD(l8ApRbNYx;%($=rmQ0=)67BZkWhs zcQCC%q^A$>6qceugn_r>6`ZsP+kILB&z5#WGUQ}iZfP=ng(~yu7G9VNz>&q2DX_B1 zGmqeOTPE1dgAFYd2en@J^@Uyk_=4X6E!6-!)IkRyG1Kdt+!)Mu z!pJMhw%Hu}VaNG&wM_VtLm6cxBDPZ>?k#85ShIb?Sf~-JJDUCxc~*hI4iqteu_)F( zVWuf^hgH}jUS>((7L_+`ycGiJdNldjPn4m1JL+679D=}$X@+rW6$|T5!qQK9;4WH0t{hg_4URC+CV*WF19+)wy%w<}P;hEny$bFV*8*YJgOqC2D@wMT&li8W!zeTent7*f?`oL@rDUwmStdf+t zJe;Z;iYb^(xa#Kt{z&V$#*KJ&dhdoZql@_@SZ8~42_O5lwwrYUq`+Np~@8m%<1hj1?U55oI7K>K)$aFTp zt8nec?&kItz11!0HMPkt={>dC&EorFgS+ed=nD6!_&fP?`Lpu%;%R4zFQ#JUeVuXX zT7wa)yT%o#HOg=@SnKDR@e*U$&FU-qd6NB8c7tbFTPmV8DM!4krN9|x`oMyce>|5w z-(x1QTPv6?qM?!05$~fE-UCRx6ie~eCBjb5pP^uJVxy21tSn8Ddy3sKCEQF|j8 z@>Y+T6e&^4Hy7{obK<9DJftlpEk&*fQ5TnFyijY=af|_UD&FsH#7dR}fxs@SFw|sK)0iX-@2*R^IXPN6ED= z==T=`Y@(uhlXD_pt9Fs_?6iFm(bu#Jbo5T#yApcd3LM?aalwn_Dt)JHmZ_TafH2Ur zI=S@NkBXa30C4gS33|21+oF58B)ss2xZw^sHm;8{8y@+*id`1TX74nk=y>F}((fG5 ztAE+d+JYNCKlFde-J~KFL-_aANfg8G;dbjq%~|RCF4d~x1(jt2;UTs2YFIhD zW3zyEM(C10xI6Z#@4~iFZF&LC)hBz^_=D`)7y3igh3dXKzL2#bHct^YPipJTatZ?A zsMm+9l2F$}L|I1euK%p69p`Rw|E|tpPu`lt@Z`+aVfgm5g=WPRwB}j5iw?H(96s>= z^+n@L#pO$Fdj2id-}SiGyQ>eW7~*R@#T|F!q^gsizh8Nhx7_>pNnGV& z*_u^Z1dr&7`4fw5k69z)qaFvosJz`#Y5GXzf!~@nwYZ!Uf4C*1mWtJzX^`Ye56br^s_5HXOsQ5j?p^=W0!^t_KHifza|s;slMu=y zNgtoATwLMCNk)a6?wYT0v0v&*C)`LY*%hx;73G4$pM%%^; z7eZ>2a9+FM&b(!Q2`#G0OH#do%OBk*yShWq_I}dES-axdfpxA4Jw0}^O1h?%*vWPD zOR14i52YI{bAR4j&Iqp@F%QCN3}{o};C>(IG1{zhbp4GD;G4GFj1kM6?{H;3 zyA)D9@~Hf*XGXm?WvLoef1}&qE;g<7q$)Q(5A$&LotA3$4`oFryemvxCG8xk1?VMP zV<+n=@i|3z)fe-+7RvKDehv>m^SFJ>GkoEoU)wVCHKrP-4hB$5`@6HiT9^Et(ox^a zjp{cG52aH#FAg=%Oto_#rI&oLGpjrw9JM2^`|L6#(czo8RTXe+b)e>;I||^Is34 zQ!+J^`c;fka%?!Tl3;#f=*QDoQvPn(WlFiqTSrM5?Qzd3F|vn{JWlWu7$p*3fXhGC3mX z@HkwLS7-v(=V}pC4OD*cN*4Kq0vnEfZ z1>8qqapritcD5mXx-KTk7aThI@YNUiH;zF@o7EZDeX1%2145+_)!r*bk2pb&sC)$K zVYx+Ks-~Rvp;U1%NPRl_h{q;iy=lVC1%+tWDwCzNoeBY;Nk^6?w^a)4q0rJ$sNm2hS zHwimjlvH$=1#WK{f(@{1K$bsoJxhOBca_>)wLTR|vne^@0^6{7pMk6N z!mqvfGQ++?Zis7Hd15K+Yt57t5%4p}Xk`oCc@E;QJ&gn0`3QKSB-~<_FUnF!8U266 zU#BYz6BEmliHq2kDPCd!)3wH21pr?F0RYs1|4&_u`TwqKxjUQMniyHydZ(JJAWtBT zB3qRe0K$}w6-%JX2t*J71tbB45OtG0ZX=PXP)gBb#cj6}DuD^a{(h<3Oi z$-|y%0VY4J0Mf`b_KHK!$=Pm_Gdg>zE%BmKR7Z6le&J=h*9)GR zJ&|AUgH5)>;GEbD2!{hY|nx{Y5>v0r63_3DTTbY?WMM}_a?`LTIW zW#*O5zI}yAJ_DDmlHr|hB;I1Xv)mXC^DLZFY*pTU0;yL3iCQoK?~+|H6kMvxF+;Up zB!!lvE29S06;~CAnSWkn_+Wy&ZKgLFn}{4GnrmF;nO(bI4uV>R`oau2B=t74LId3> z$G~_>oDdlzd2yLZLtY{d3iMAPA0s*tlC=7I_z&sFeG?1dMM(PhZ<$u^%;xQ24zPLI zBmnJAxpM1+U7($7ses6UG7MNc^$aS8zIlI#ID(M(Ifs9C9tqb+{&(tk(Fx@mW2<(t zZ0JN3=tgDjmG}K9@cTt6aE8|3N6}-O!77cJYKmGdK%q=|KBJfqMq>ItC2Yw>rM6q% zT4%#??xU`UwHv9 zODIlDVP0VauO;`r-TB|ui9I`a=R~qQNwZ9G9qn|g7*~#D&b5H|So{ixb5LbONwD&0 zmpLznfAx68MS+cR$}x!tuNvEpEFrbxz0gb4j}CuuO^TFYfdy@&441Trhd>Bh(Zbd$ zAXT89J#0PO4&v~hLD>l*U}F!n7*!-sW<~K9>HU4>n>Dm+ZIJL;dLZL7r0gmSgNRs! z#+>p5uI;5WlFKBx((qy#-1ed5g3{Ho&$DUbtJ@C zKc9p2Ni-@2D;5#)9x!3=E9zzG)9P<$hUxiU>Sh+m{<7Qf2;fz@@b`z@gO9^Ch1iq6t!V-K`btUmmFNk-OAt1YptTAlwq;m^#lVB-2 za)_4Qlmje|x-MKgL>t!20>jxuW!o%`!$@lzyQho7WPGIv_DUa*C4UaXJBOS7CSZQa zg^FHc$AFBkL#Ddhe85&<9Zy4A0q~H96r0y>%VcvwZ!;iVAz&J_AF{$w3dHmV0AK)3 zvZSz8AycS)Jdm5>G=u%>p8KAvYD4fM}$S--t{nuCfnz0EebJu#M zOxi*F#P(Ztaarm8e^p7UJp^ml!#HKboPRNJcl4~XF8fa$XSK5#WnZvxX+?@=;(QaD z0iT%vq~f1d>60<8@}Am-1P9%bX-xxS$M#|$T~4On%giNFaS*hZYSMYI=h%?Lf&Q?p zPIR}>Ntyh4xC7keLweji$7x!In}1R|`_pNnbLuNxCY9pET}DkvMRFz?VjzLxV5Poe z{{vzDdKSjr-F#)TjpOM5o?p(k-RUWKc4ggs84pP!0;m68)Qxlz zQ6#)0`}3+BJp8st5v*0Wo`MTB1EF+2;-Ebb3~)00JHqhuM(Ol@^etzR3*ZZ0S{Wl} z0q)DLAC(#F7D%}XUNtDld7KYux#-u14<+GgeD%~Z&a#fPi3QJzC?piCOMdRA9587_ z$+>1rkeG``S;3w#Y|1lai%yD*B*|wA10KfnAcreKm??Q(h!&lCoh_63FJ0F96=K<5 zvq%+#OT8A2+t)9xk?U!hyf_x-$1v-_AEZPlZN({j<-DYVP+C)ar%rI+Su#KV+gRABzLhwlxY9W^db#g>@ZttXo0$zO(sm80PRPDCPxg`)8;xNtMdJ26)%Mz*5H{A6SxahhM?Hd+QzR>%+V<&f=KVLLj!sLdI^s>x&Pg zBhZtSA47^M*AkD$Wio?~S^1MQ3B`U&(~K?)Xo9FIPj^5JIcJxHWW=O% z`jrJ3wtOBZGXZ+ZcLWbDS6FtcoHpc$SZ4vjonp))#{ucN*>r;aLPjk0EgQSpEwBOx z#9tiHK_tM4B2q3c+TCu`+=Ei7XpbdVV>Na$wEdMI>~tv|95*6oic=`+mT*|VSFXXV zqQMSL19UUu2{{{0#IDwRF@)7Df%2jiRmFhJ*mAgWfH-!9wN^KcSy*KZGv(iU)Lw+oM&CNOVm5-k=m8qf^CxYtr-|9$JiiyI) zk;pF9u`r%C+wDs_L&UQ!{2U*|+7bOpU};k=Uq}k4YE3M}R%+ek4`)+{kqb-PrLM2IVcXxy zt>1l9$c#;L-7lU7;EnKV=j&hQFjd^k_CD>xHqrSLp91Nf4eyrr&HVEYatcl@-&#MG ziv5|BJQuK)8FOaoabWE|uB(C41~)hjlGn-BGstE0{o)3iOi<++?MSy?bhC$Uh^pbk;ZPvq|5f3LR_F0!D95 zZX(?S#aBN4Pl4NGo5K<|wd-%((_~o9^&HunwtI)eGppz#yI&G!Pn#h>2WE}-;#pq! zLgEZTQ-THAHPiiQwod$y;%jBYXq7cZ_WVWn=9IuFMe(pT1YJmQyud!WzNE=BS)=x; z<2)Qt^c!d{3vw)@XEx=JZ9H$HFbCL}C91cUyzCxh)VAHq%1iOS5&3>6jQ9ufl6Kq0 zYDC7Yz21|Bsb-X5g`2Lkn{>md$muwRwMBB3XeaxZ)ft|7>G+w=De&nV%zEUZ7G=XZ zDm_H4wA_Hwrc{$7yW?R=_4;Nn$M}G|{559va|yPs-&oZ+;Xa_RMvJ`Szbyp>VEd_7 zC4eR0<+u9cwX6sFw(NC-|B3p{2AJs;g52T^NriOF;9Rh#4CuJOi9)hHj92b)uAD$G0 zm8K-2ovJ1k9Tzijl5lPs9R+0c_3h75&Ww!o717O1P4%7D2>}i{*ee6vrzyBc!I|Sa zu5tQr;)JTGx#o>*R9#*Q*m6=+Q^yG%Gjj3l0z6o8^mWC;&EVh&*k%T@Q%hh_=f;oc zZ}dZ25H=2qYeJ}_S$~OJ*6rI`GTc;hq^-g`vKA8OQl+&Dp^}`8mBQ>%1|I$w$?#`r zu514Hr_lYP!T+9QVEw=SZT|xcCVQ}KXkw508c87(45>9i{EFc*B1+qMcmJC1mRS8! zgq>a!rsW-x(9>qHva_-qR@+X16ScU~uD-&KDv-e}kFXk6D&U&pFXX-X;CtaY;e5$? z*!;-4`QmxmulwBT2VlT}VF6p+_ag@5v={P=EpbyYz#wFxX}S#+{A_}&5?sc>HG-V+ z`KR7{pT>o{LJEUN{AY;T{DT3P^G(Vnh`S=(*vyW%#$?@(!1&M|o@~Rp$wS|y;`#}X z4#--wDmhvpwP$O~^gfga9gWIa-dg|^H67#$$G44_$0CAs)W(712tc*Z~*B&RgS;3;H&79{=HJBB~>6a5nzJV%RgBsPX$HSb%SV7}LkKGphpZKH(mHh5c6*RLUB=c41O>npM5dA2vg?N8hG5RHMhX3h=^jfks+$t!%Ve;4u} z3&bOry6?EgRjLIGmVrJ_mR_@$3liQV<-?yAMcV1DVlhP5JZCNNdFa1>>LzJV;3Rz;IC@&{s=gX+*FDP^CwY^LrFAsjMzcxHO%%qIpPb9w!^e}ZJt%H*Yz zPM%G~l{AqJg%*2LI$jN-(DYoqc%=VsGBDPMkm^ELi8{{Z;wvbWq?bm_hZu=;0uDkM zsS0P(nr@6u>q#Vy)VO&%omhA5kSF2(9XthPx@NraJQ5L*&jw!pgAUzW+(zATP_KBD zySi4Qi*IJ5W^<@tVRRLLAF1trz6lgG#x!UM+JD*nAR0^nfPe@9u=z8D<+@8EWHCpZ zz%KXzM!1wI0s}`32FhmA^wv*f;O*2{`!JKIy17S{UW?L9O*P>{8RE)iFnEAl$`IXE zeOr@`2!n28U6}Q_gnXTKh>4I#8!g7n=JO3u?d5TEmX~bXbxXRnlIt$bv)F#M%6MnY zzGE~?dLhAnG2WqJ#QY68O69re@W#BqphYe%mhnN%w|DGyaf0YEb7_(=IhE>NUAi$j zxun#0#^lT=TL7TH9QxEMPmHinVLXZYHcwfmbkn(A;;l^*0rLsz!5K?VT|=Ai5;!G4 zD$c0-YJ}WTa|Pk(c;9)cl)Ah#y`Lj$dnJ1UZS&50w@zi61?r?o1-mtqN?#~pJ@E?0 zLLLhUu0>CZ3Vf_V_+q39B z&|&oD#2t;b`nAaJy+i}njwI~5RGCdN?rHIsD4rNKyGoV`PL>h;Z&s@}YM5m_^9QOq zM!SjfT6s%^A_+d6s8I#uX61?RtJKlb)%Bn)nA|d<(cwl3WI9{;r!BEN&lp3{q)Fsh zY%`@@SK=n|u&txHy7FQteKk5rtEvJFzBxH-Vv|Ly+JnDBAGN$jbsUA26N1Mz!4~pc^iWNCD`FPdzI(uD`kXNt z*3pf5m8QkVoLb^kz{g-*4Du>U&3B{QG>RI zL>nT=Y~tr{v{Y&q4Bbx4-z@Cc&QP$T(KH zly%%GChatIMp9^i$3$-#_v#j~q)x3;0IG&+d9tRc$HcOQ>8J4Nd$cU2jCxNJP?2TH zM!38w`C16J_R6QjaH+5jMh5j(WeFtQA~;;Jn@(_z7LG*kuUvEvJP7bN+K&alu%F%4 z>FT4+@jP^}cQPyF`_0zR6`c6R`@8j>vA(h2ARaP@&Ivz;Je<*lej`8Nf07Ion9bD5 z- $@c%hlx;WJ;{07MXv9SLh{ckCGK_jRCFz?R)TV~$a+R(|VI^Dwndl+?OXDys` zgNSg#2HTMZVKk-~A&-;;_Ek!OiaW+63t=IonJ0x^^D1I1+37J4oHvh_m&0=|5bx2i zC5VND(FT|ng@RUG`@c^8HlKRW_oVAqs};r*k$w$6Te%&-^t_mDZ?NAF&hB{Q0L&00 z_;CT9$Q&1_G+HhdA$KNIl2%Z9a;-C){VPdmKz24_-j+FZ)}EddH0CLt2bk)!3`vh! zNGdU-#o97o^mcXLNefv0au)inNN|15x4`l*sj@UFx2#+usw0@GKC)Jgg!6jogk-5w zcUj&R$m{W5rtrt~9^tSF@U(!--!&jc;GhLz&iC)TY^zwz*D;IAAfCWzM2Nwr6vbAR zN%nTNo2esLWpTIdGLu)7HJ+FwUvi!inZvxgONtLKfhDe{v)MLd8 zdIM3DvT3`N=>H*eHa3Jn>o)>&vUcJxg!w2~)bCg60+3rTsVMDKA2%K^SiuTlm>MpN zxf=)3nh1oPdg+QL<|{2ai%aMS)tB0Jp0{GA2}K2T2lN*`3M1rzo*4l(Xn}-j`bc`Q zj4;i=T_}&4vxu$1ZZTSP2oZAX=2SH%3Y?Q8D0(|&6$Gz>6Cn3*QObw`F0f8Q4WJ7{ zNE^S-%V@r8;7|jIa$_IF(!lm}f~YE2b%mHQ#dOO^@a>XqCWj>XB-%8u$UmWU*Q69_ z`+AYse-MHhGNBu2F&x_ZB@zhsZ3oTT0O(-)xPWw7^M&VNFBl_jh)c9v3Q8GBk3VqN zm_`t`X#SvkVp|qg%mdOObOdi}2)02yxB}gXmbo=Tdgjpsbb}m^KRZCY8~O=2WvpLM ze}T-T(CLp?6Ic&$ornP*Gq%=gapvVyy|Fg_DF5k&Javha=?HZ z)KO64oCw!}hCqTSQs)X9*iwQ4LSjG)APE!lK=l{brT0~R{v9PkVtfSYurl*D?`o1jXYOEk1~&jF3v9C1T*^{%(CG1jJVv*dmCR7AGbu@U zoWL3G%U`QjwG!;9u=t(gYp3Sp+JrJD+5@9YL(T;6U@C<|>s)lb>hKnsOCl%x2Qoeq zm$|OcUO7XBLXM zg&_pByGCh=N=}<_Go;I9a=t_RSXbG(L5lM77|ZAxpKJHG3CexD&a8^6rwXodF|`)U zv0fXHF6;wzWb~J@pn3GF)DZ-cPR$% zV+~|Yz$(b@@&XFIZfn;SLKm7|Xtm))(OLq+X*{b%Ge9JlL~G(PFwiX+5Oswh=$>p0 zI-;9NP;3+jG4bF3>`CZwvBF{D>RgZ45xOw9h4NRsgycM}YK_rNSvnpLdDplI=XwA3g6aC>2kCzdG}w&ZtaAhISJ zQCqJZl*fSVf?3P|K@~B8d`QJ#f8PW(!BzTo)=0wbQ&_Y}Za>8V_8y^9@G$Gajs;VN zN>PR?Kkqv6Lgi*1Uv0iETF)6$wA(X*v2l)yFF+zd|L$=tJ^6h6t-{~&gMR7Sr3J9t+Aht!H4c2-9vUyIpA&U|FGTgz|DSj zPR6G{v;nXsp3@|BE*9bg&4uhMt?%X3EWEUE1Lv<_RdAX3rEt0T8UZ0o87FgcMcWhsN~zKqur)zXqD($ z!(zQiJG_Q6ov0MzU3f08#5gQe(fqU0NKL^Nl9g_uUs2JCVWNvi@o!O?X@pi zG##Cqb}@r5x7Jz!gNPghnE9s$%n>Q}?uBZ|{Y8Z=(9Vjs!-Gm$Zi?uH8g3dxnPpG5 zp?>|qu4hV`Lgzpk#He_&Zpo}}wC=^c{Ae4?aCL^ywP!Zvd_RF*=^GVhgQ3UAYI59F znh9t1TN!A1Di+(4wHT!W*-faXK6>2k>wp&SA)~m8ZMbVgGZC7{^P?Wj1Zp(d(fWFp z9)iTmUlKQQOz-@GN{~@o=C39ieEa^-QF_vB_eZlbi~Mva(|vZUS5M13TGM*K*#=!P z2HlU_8e?jr{%g+qed2q0xXlrVFJ{NNGzizpUmBpmDy*SLNUMxy6r%i$q`0={6NoH& zo5^kuTYbHXLdtQ}#sLun&0=3z(JcBTVMbi^Na&K+m~U+Vnv9HcfX~1_O;uS!gj=#N zZ29)mZD7z{51b4v$~(@y=6y(9|M^E8?nzOyz^VAyz&Ez@3>9^ zXL6s4K+RV#wA^+`^AYQywT< zB71}kLkK`^4tsy*anOcJHV)wUwHl98kQl>4Ev`Z75<^YgAa%Sz)kTEi%7@ZDQ5S`} z`5|#K14a_>Pqf&b{X6~3JKEHpWd{r)_&)1r@~%Ayolk-$4>ERlGIme03vb(KB3taL zkSo4M-JE}PtCyti(GD4%5Vgj2|4{2vpn)JA=#zIM@K!q=YXe*NcFejyTt7WV;oM6R0xm@F*rkQ-3+W@+ zA;a9l!?cUSUS1JyP!ZT8!?cUTUc3lp(1czA$%9(m2|w#Fgi4{dL-ISnK=MDz%n7cs z(pEWPTa8SA4p}z!z@HZF>zaDD{Tt!l#~yg@d1C*j&VCRFyoih5z)N@MJ`-M}A><+> zE-DS7^ZXdq_&RY7j%EXFbHnN<1YL2+^_+mvmwuRB>>J&@tQ_gRb!>)SIQ~Gc90BHD zz(dvWlXQH?Ej@+uMsw>%+hm9CR>q9go`~WF*g@4QkpJNIr^gcQF`_)R$y;ZVw@f2{ z;O4H~KpEwt4D%79et6^Wg9Gh{675S;?u+vc#expWiwr3%4K4Bw&4LWgiVpq06}@+u zIml40$PlyAklo*~9jGvK(V<4Ap&Rcoeuyysh_DlqFs@hRpD*)Q=p7`NTlH7&&&GVj zZ_pqAA2yb6`2S?;1d($&qR;>UwPgQurtbQ`Wa>o!U8es3X6SUkJeIrjFvcI{1GZbI zv_1Z^O>jVCv*Z*&WudC(!w>VsvH|r6H|?V) z#25MKw_z{)B8_VY5Tvn1)cuDd7PdBHYbq}UnBbEl zT#_g9Gs-bnLo_>@!lGD4f3?y^N{P_4#$JbtZ{;9i-x5MuRLArS%MEFaq@XnPJz;Wf z>G>)FU<1Vjbt-{$L3!l7#WfScG^5Bc1q$8eH)lMz(8J|4xt(j;$c=rg^$Qh4+72GL z-9xj}nOXOW=U=KP73d5pd`wU(!?R^dwOc+n7%z_*iYrHjA=-^df-Y++cYv+R1v!yi(-i}=!JpgLgBBn0# zoPb{uxjbwd1UH{Ux)=3&+21c0iY10bf`oRkRZfn-N+%yGDFRXA4gpAq#_UQ@#hzEo82*Z$;fUE?2UyENJ-v>nZzSK z8YAz60Skp|=1m>}O(bD^-@+W0xNTq(CL>9g zC|6`&%zL;w`-CWzx0kldS0*>JX48AH>{$(N{3EC=Xko&n02IIbNZ?33B%`L%(Texq zbu^g~74^7mepd38S9WYY(XS+&shc{(#NN2Elx!c>&;xyuTQRA2l%NJ=B1XpE4%7`- z1JV_5BEepYtMk_h;!C&hoGm&@|Af#v2*Psfk0E9{6?$P7cP?)L2^G*1O$TD11Q@h& zUpFZywmD5+at~_mceV4w3MbujbCO^_jX6Cr4Uv=a6)7cvu1U!vdD|jt-C#2NxNU&Q z#~%3$%6k?(ocxt;8|ZH~8@&2P4m4$id6J5VQ3T(Y5_;Sfn^bL4nLu3c6>VB#VXrUX6ja z<&(V|pkdXbrCIe${+!iGeq+nHv(sjRybFy0B4YQpZ4B0H|2W|?rb#zJ7BXQ){Uk}f zIM&8ojc}MQalqorCg0hVLYMjc8unrmc#dgDo(+rChet{tDQ@GYCRK-WPdF0CE*I*U zcy4}v4GZp|V~?Q*8}49F%7VU3;KrC1mJzE@n*l``s`+3DgUykPdfN=;7< zQm^6WnR29?Axfm~CCl_XHOsZ4Pk})3Is+U7e%56kyuBePN+mFqj~0nEj~GS!5<%pj zb)yHw!`;*Nw?Vo6-NVY9*E5oieB|OTTwUubfK$;7gX6I$2gDDUhflcPMYW?SH>kCW zNBFzhdqz-^aCCGAci1*~7@qb?2Xl~qa+ZtvKxn*$>B7PqFP4q}cmP?yf&LR~yJ9Xr zaef&w0rdYER%2cvn+4Uk6{s%8?nrxB$51dt#|352i+5o)dwLybn+c7s?9 zv+DzBI1^-~C2qQ3w!Q4=|FgaEDBqFR^Xy6gx3yRyfX83g#O`foZf^eKoV2s0sm$M1 zA`fbe?RMnI%Um#@Osy_=$DI(KQ^il3t%;V+=5qdM;WeY5{DChZq^QP9j(l+)V=A<# zQnm4G?8`kYfBZ>_+3R$(7O|FOLep$56}i)n{Fm|EtIngC03u2;@XW&$;Wk6gy*_+ePQxTB_;Txv#Aypl}2Uf*t`R|T%)0w z{S4YLdbnB)!!jscaT&~4a7ID4H8;|w^uUK{fC{WXEcZ?s*XM5!7M$wGbbZWGy{V6> z#U>XGh^rX2Y~+26^T>~We?e7-^n$lgei>poDRRB_&}isX*_Fgd!#@%8fmxMcA=b_4 zBO?muTm@N{32moz5i88fvRMBo=5h_X`hi)sKwO$Dud*8Al<-1Cr1s@}$vrFnGq;a& z9X6doB2}laW$MLrca8?4l*=dKLQUGpAmQaIxSyp)&rjt+jEhO3{PnkoXXlLL*%RpX zD4!_^(I_gl`CL`8W0Qq$UXOthfIg-IzM(FqZr1* zVx(>iKJO|lB89_wqK3?Hw5^yJTNtxemGQyI(qw~%CVc+OL1KV>b>Jm_i5kE$6uaE< z8gfvW-c(}9wJw7V5!3P0CTi+`1g+_%4d;R?xxO@N*bfqc;?JF9;mPF9g&L`VPvi`r zzOrPvGGQfxA-SZwN{MbV1mw{mZ(9tS_bl^-cCx+tR~b_Gp&1aZAuY81&8c8nHwZ3U z#O7N7gKPlvtq}W0v2~3*A||eO$6+8efx%kU1DP3B%moDu5w7}O0i;9B8+*R8=;{Q) zCFX(N5KLs>vpE-s5F+a(ND?(xl9_2gJ3<&2&AbOo0(T6?obLu}7^dz9OQs%gZ*mwI zLW6}7?hu{CMJ$q*rm|78+c|jT=hJIXY2utSKyVu|`&~!ql>w_j`K?C}`5RHmU~U z!2WIc(;;MzPw8stwvnZ1u1Kd78_8s-T3$oJOpzM=8170-^HIaFJFz3~R}F090qOi&5DrUg3J`4h$FLq$`4%txONHArdrJbaoQn)j zn;kPfLKUGlLLZFE_^G+z8l>our9eEcV+U);_(SlZKMMqHoNcRYG9(5VuuCoFl1%V} zGAfBM!&X%g$i9}lr=;`t<=e@nvI8j(Z-!10RAn2w40|-Fl+a8h0jFa@wP}^N!3R7^ z^$Ucdk_<^Lx#2LYC!60AfkB$FH8xSI&tzQaTFU@0I)$Eex<1NRyf(nBc{xkCN)}7 z?uxM~4jP3ZS=n=K-FgMRt&P_Y0u#T$--Jk=zf6Ap z&r~K^n)Fon)REbY&L2EmzMzZ=R#uHg*aySCAn`fKxBXv~D2q>u%@?8=EDc!isS_0c z7Nqnt-tcdaGM*y+?Xkn`nwiKZerz^{?&{ddpE{SEQIBBcIC8>|KD>@yKgD5sO5Jbb z7Kkbmxt*?=3FEjDaCmhrxK>%wu!j(`JKUEXDBotf)laGSSq!36re>M^2m5$~h-tfj z3KsrKXavxyG{8hG;HJ7j ziQXK#DgN8npDD5*G{OhikSPHuOu{_BK#~XA^H#P^*bbaX&Hz6}dlKM})DgMhbT`Qbom?>l1+BA1V?mRq$ASlLz$&gF@AqcFlCQ zqy^U_(hwH@aUEg2ULu$k$ja^yiFM?_&!QgGPv}=1D-^r37>IfW%|^vSQ*|_f$@%&l zl?GWOMo0)NR+}a<%paH`tu}g@uutJQ1LND!W=O&#c7l-Rav`9&`l3^gEX)JpV zqd~|BBRu4#T!*;&bsPsV%oUTUS3@I@7+@d~S8L0K6Qj;4q7@VriU`Xo zWET4iP;Qt%RJMv^R@#07h<~s|OPh=JptQ6tk(bxCGIv(kL>m)znrWFbV>m0yOIhQ! zQXYe;LYj5^Y`{ES(S+>aGs3q4&RCVx;P9pjF#ZAd&Weq1WHNPt%S@-C`L9EqE7%4B zNr$?yYRJ{$4a@+p310op)vM5R3BqL!5))d3L_7u>0K1~~N%&Q_C@-8^R5(VS01~kr zs21{4u9=)=8LyBSwOXljC96UkvLYR?a_8~aHpk7E71oe|h(s`Cq@%lf@JehKkw>C# zCu(wqwLupeo7+MHAr1wl$k7WV><4ATTBa0pxu=Um2fcI9`9 zSOvGBfeTYbRV_Tn89K2yILE1hk46~a4+k!+R`i)X#YLo#g$ST|FY&mnxS%d>tcNM! zAxaDa$0J53wNl@p^{ZX6+~Lx--lYM`+E)BbuoB)N)*y!@THcuam|TJ?XKo(p2Z9z)m8$)fP27&5C!!CQU#$z9BxqfqEP5#IS1GFw0k~w za$=v@wr$(CZQHhOCnvUT8z;8y$?u&zccyO5d#9#qul+|??PsmV>gwJ7eLi1bIma)- zMm=7t>~9G17c!1-`a`e0&(_uDKGHw1_^YIlPvj^NvfmBdx$#epIm#M5q)lF5x$(NA zoclx0?EA%?j5;*?QL1r+m3onV8qN!8P#1R@CaEjp9jvp6w&S}kN^tdwr!j{b-h)*w z$pY7UP~#2B^*xbMI|B^bhMP(1$P*`?i09tX-{6f>-eF<5@q++T%yNLkBbdXa2V*~Z z0W$|T$7Hwgajh^6VxOS5FNlOz#w79g2m`4S0MKNPQIAq||YaoRX84X;zo+(yoOTmE=4@X8=R6J5ZJmODmS%=!cEk0ex znplDvTT(HgEWra5DT6m6BNQp4px0~Qm`+J=bNsN!f@YjX6|j;+P&gM8K%{Rpb5V}o z`Vx=VA~(OjFnXbx@T3WOc~NaH;q;p1bYTs&YEAFKp$}?%K3?RR>O7~^P#TF$_O-S# z=FmI*DWtr49mNkid2va6nyyAVE?>Yynb$4I^Vg&>U5ajD)@3y2cQ19YsD#I=y2k37 z5s@fZv?Tw)oKX(b8g}D_9ZY}yqThZ@ZzoSBx3Nnhm0VgElFU&K9_CSnSq5prSdMN+ z#U<#gxD9JQ$5ft-cZW{)I;SN^qu(Mz2TE}Y7L+Hx#MUp(2zR2qW-(N^Cj%qi#I?)A zNM=to^{TawiqjsU*70rY-{>8cchlQ~DXvdB!kXZov}B@}YCh+Bw8EDhbR}5((&;Kz zb674~);LzVKvjxXu9wEIEZud|sS&9lNwHL&{u(HO1-xbGmtDnz7l-u*jrJ?_t&FzW z1kUZkx1&}Z(tj4tL$Bm*wnWn@38#{^c@1P7ooglNCe3k`N0X90X{>j!of;`HAp*aA8n6CkmvE!IWQx%9oAp144vd@aTZA=# zbOa0*Gh$JzrLoB=_u4^mRs4#UaQo5pUi?rW=)f{uB8O!Wv`Pdd4TzAT}z_~mZw{4FxZ=& z!UePm_`-?fbmXq4TLBt&U42!xkYHsLqE&?%2mZB|XT*6IOlt&jty!wJ zEb9Wxe#&nv0}=cg{%LA)Kz%k6>w+&rlZo7hnA}E?+$L3F(_cYvrvm_%Y+HR+xBj+h zpc@)p35su^n^O$uIj+;KU4LgpAV1=_dx!oGE|-s=!e=1J1ALCFl=jd?=&2wlod?MM zAkk=2Y<;)>JH7jzH7|{9_a&*_i@1B14R0_mhyIH>wvPx->Bh_+_^*)M#F5*ldkPYr zxV}3A$Q#7;zs7GLP(1467pk|kNk&hWOdlLR(sY?J@R)P$w(~EVFWh4nEw|TP^*^G{ zj!zl;)gH;sZNi7=IUd|RZ%njCjHgf|-1kDcGTAZ)%)@B%Dk2_|AX&K<*<@lK#grGV zX8%jto7dE{SJkuE6$RIW58Hz$Si4GxwgtAG4Aa#eFr3#IuDdSy(Jy}DXIycavn9dF zPw;OCyvIa|1KvoTgiqZ$O@k-e0H6k6WxSsFj~=9a-XiyJrK3;iYu!~}=z9+DAot%P zzWbB;46C4Pzt!~nlVyVGT98nWTnG?r6nfc}2@ta^PCed^7sXmQoAyTg$_3T4Jn+jG zRMSAeg~xT26OG;gvlepimIAho6sAZ_`FvQ|f#p?80ZkGa#b7uCl`$9M{4k#m2g-G* zVE%5v7jY*YRkV_#%HfvCWOPh-D+!x-lFVE_p&uN4rNy7oj1{Vgt_d`urgH zoAgM}lWC_A_WL4_`-!WhEKrBi1E%uqgoUWMY>&ijJXaNo7O~7m1x2EgYXrzT>e{-% z=eR84M*2F#H6c-qVl+#MmcWdrX_~U58igrh3raa0T(=9jIpfW7LgEiA{bDN{c`;BOLa7h~RZzAlo_Y*##C<>r!kJN!9H{S_0yYtT_BnPlJZ+ zJwaa%!O2Pt&XVa0=Y103M=l;krcdgjrVJUTHwy8Ig)&2XH9`u!XLcUUsa1JVb%@#o znfKEcODPlrAQhH%3hLnllWVFThP+nKAl@d3M%D99zT~%nY{n@i`<17+{ux z;%c#}g0mAxTU#G>$|Jq%Nf>mHD(r4D;v6%OU!9CM354<@e!qypg{C{2oT4tXOEO|T z?Pfccfi4QDiaQ}R>U28dgxm2%*!d&x3M>Ip41=`03708o$>>iHA%CL4W`|3$fP2Q8 zT+-#MwMsJW(g^R;0PnI`*-lis7_`OE{G#n8er))C>>xc(Nrt5puAoC)+=*F?9Uh{A z2KmAa?N{4bb>sV#B~*BNJANn+Gvg-Kjsa+4z?b)L*u{_be| zdYf`}(z;^YC(HO&%K{Vve#K;);P68BVFN?TDqPB{AQu_RIJNjFR9C`5z`T61sMf5CoH-9rd(?74_z5A~h z4Pl?d005%$Fcr_Od9C8+bj@+Tn(TdV_ksGs8?-Y@3 zQP|z`%W!n@DvO8TL%snK-Yc?@U3j5FrHX3kO&ueE({c#QNeaCHA#`h@32e|z z`Q4x#O1#8C=o0q#Am|%m1esKVx;5UWgx$mHErB^g$oB{@Uc);pVJr$qS4X?-cMdme z6HGt*X|@o=OH)bz)rJuI0*v<+IzTXvt4?8uzV(g>3w*Eoi!QBm@A#!ir|)avR-Vny z8yP@2AN`D62Ke_c&SV-vjS_q7FGruD3tS;4S)k>I)kxXmM90d9n7)8eqdJ z3!;vFBf_<|EeZ1OCMB=T$35#zUCYf=hiJPNBt`2jHO4zweSjSvwoHegdA@

6CV$C#>I}}#S=(xd^-;_qWI|bRYpDGpB2# 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�{?#}5mXHv%nb~!0RPX6ce zH5!4Pn-|xuV3pb$eW=yl8%HJPc95NyCfSO)ZeEu;T<6xXEyn@SqJAe5$6RbpkcsjX zWl0`Hjl#q*#%wL8+ORr_Rj&tBnW&Q@08_O^SQJ%wi?UwqTUJl+&FdmXzlMjIv>v-| zBp0>;W_8GB6tDnk%>MLM)INn3G%M#n$(xUVc9$_!S%Y!2Si8GvwzuI4hvFVSJ&-IC zRV3x1-B1)+?s^`|JVc!}5}CeBs{*cCoOg2ArbmS!)_p|O%2fvwa+;l;Q_>Endq8a6 zvVQj}F7xY*t!XA0U_{lDMIuss5po!Tz0~?;lvI56R<({8;Ic^u{;7q~jIx47JraqV zzZExjY*qaq#^F5I4(;EFv`?Z+9hGBd^?OJ#i-|(4rDGYS>rG-A{3|j0%R34EI0A;e zrr-0Yhb47VPO}`cxr7&QX@b0;<=@N2ZD4=F7q8|!VH6prLBsp)3Jg^)jAAvLR<^68 zDxbhn2{hA@7;&0F?awnOEVPZHsdB2RvX4=XS&W_PNR>kX5qQ~WHp&8xm?ljyB_B-! zUoF;XB&g6?3lz?${xD#Z?sqG0pgmUIdd$l&{yO9A5GWLx$R$HQ{BtnCuFRTI+a@i9 zCCLzznnfpXgh>Ei^-Y9+`;jA=wOWCDM=_a-Z0@1ylO}Bqz=)QYF{|X5{)g)oAz!ZT z_i8`lnGvO2WaRHULRJ?{>#ihT=TYLR)nBgdS%bu(rDZJ-y*@-uhH6lg52TENG;?=k&RTEMX8*MS4Qj-A6Ev$lRnwx|)yfMpY?2<;YIw0$1 z75OP|N#Wxs^Bp3U*kNyC#4jZpR0(o;Zh%tP0@U67YpCXyU_SdikMNJqvVNaCXncH{ z^ohFP9iU}KIz4R{rb5l1aMkYJ`iwHxR>ngVD9vZx`6|n31EFb5aqi(U@KBe8mi1W4 zI4MkeRGN&~G`8Fl z$bh1kL7Wgm2Czwy1@4hqAWg=3P=GeN9m_XDxaUW*HXs|l5{-DX7i=XnWGuChFF(j) zQ|V;yc*tbuc+kwR#ZUZ|2SSw0voB6^5r^%8LlOt)IS<#~|D7D;6_YvZRWKR}q#Egc zp6pa_K`>e&A}+^An@|Ri(4DJ2Zj`r`1KuKIYGFpCjxXKjMp^685vN<53R^9m4skHz zAdXlF|2V;2-lSo)(f8Df%U=BZ_k6#8bIJ|mm68ijw-P)PWEB!7&PhRk`PU%sCDgAf z7?7R3Mm>#+pSKEVYD!85e~myOcV#h|6vk((jj4f8>TOy;&1dyh8l(6{m+D9X>0&P2fq9n&mOu0OYAgwaEVXDLfy@kueiH1Fc1ZV! ztTjOQZgvvx#dv8m#~-BWuK{J&?`SZ^>`I}pe)8PZn;C>GE#-mFU9)cPf$acH-ou&- zyrixg%Sp1keJJ*(o?+b&ZEV%pRl<=bwtQsTJ``DR)L3uqGfcqeey5pu3A&xXc;(M( zza(6|3lU5y@;?8zjcrdL#pQ*$NdfVk#jUTZBtBL^bAQ2bzvXvLF17m2imyhH1HN#f z3Y}_~Pz5g3@^#lfJON(()8M;@;&EQ$kQ!Ut9`?&@VUp7i6{*#md50FwslA9yP5j(s z4UcZCk9JJrSRqx%(!-oM-;+1`Q{MfsH+mmB71I4Vt|&?U?}{^mRs5BhFOS7k?Il4A z^_4s+W*Z?Lko2kHHwZa7OX6sy-_lQbLVyVJ-Vqkki^>X6hyfwph3Z#B`)&t%0~E!=iRO7{qn;GZ-&y-cRaDpJFhp})dd-aV zH`u))9V#Ie+SVm^hOT7VZBHnfWKOFt6HWZ2LKv** z*2X@GxImG4i;x|yya|1OdIRQlE;(Jz!v=p(`25~a}%WyFt0zwDQu#?dzMTgq6 z!3u3_(hgdY1{dmh(?AyLJCpb!a(^#j|>^S;-8VdvoUv@$xn`mLl~Ylp$1jnfBXdAQWqg-@j<58#TV*0PNcNvmM>WK&gHK`>_?FZN zmGS#P2Kvas6lcuPOE8H}oIROKC5h{;#!5B|U?31qL2|CzXEOw@5Qy2w@NEp8EM<&O z+=5mw!Hw2cRQ+;Z{Zg5dXEXa?&s)9AjXr4ttX5l)dWx{X5&DGN(4Duo36{Aa->D$Av_k}y zWIbQvMPn4^bmS#!Kj*0^&8zbYHl!umgW_DMNH16=SIfWN5~y!s4K|cx2FK$84K`+MJb>|b{;g?51nnFOFLO`C1`8gGXG!+th zH1xH?j>x}nzW|Nhiq^WK9~r`-@Ym07FIC~F6?FVP9w@%y&vK+`zTtR`R_29HD(G0$ z3Q*B5hFdo79@3W6RF^zUT8c@3`PjMsQ{T?XfZ}%)W?GM){^`@Wp{yFZasR z{bJi(ZO4rfdagHTOYdzVdY;dX&10OjSNnMDOR(lJI#UF^fjVA+C%Z=e_t27q#p(pS z`H?Rfp|7A)gUJljSozafD*S?pc>K+$`otdMvpIz`G)pBPB}-r1i61gIt0VG!Z)F&m zn)H;m$1+gSBWY%@X%)f1i4Fc7VBpS%rx+y9h8Na=qZmZhcH>rXFcNC#R_&b82|0C7 zc1pwvdF#uwMoJuBh%%lhHL5)l>8^-{CUK%p4bU%T#$iz;OOhb2(ayVzV@8@#q+Jxx zuTjMcaGqUG*@qL|Ly82Fh8`W$5{l#-Ec)DExOe0zeSmnI-XERKsNLE487fIi!tl)BBIz!^ z;8ziEmJ)YS!rxf&eecuQ^Lp*N64Xs7%*P; zVf54P%M&*{?Iq&UD+J86Xsx{xt*#LhL7X>kc$0@Uq<}UB`YTKHmKF_^^l~WD&?cVN z%2@Qkn`=n(yNH6-F_95)4A&LI*1sm34{HDL9s;G{#?-F$NVb;0&8#d*91ebFb80cGS?Cs}U4i2lS-aSw|Z}7k7 zA3;O3-sIrEeVZlxPe=CuS1PypzvTi3PEG)a|2@f(wDrZa`=`M1AD-Q+VqnuW{+eR@ zxuBY4S$7zDU#!XEgd~xo*qVCVw}3RU_79~c_eIZx_M8V>%}W&U1APal(s9|5zRFB4sIhkbO{$>>agSV z6Z+k)rKSAcGKsIUag%>3-n!jOf@Si|9x$J;kc$pVa#1TC&Pi( zi!9$J!6-LMGrA`#d%6#P4c&Nko)CTJ&Axu9lLFgMwLf=LGRL#HK*s@7(0?5^qf zzk{(*UzlW}IGv$Kw8HrMLx{<9`o(i@*x4(tmn8_{ED>E7sS3Ydo%rjL4k8}EDq$a& zCR-zBlv7eT%pdivslS^_cgakktCowd)Rbdll_bSXiMka8wxp>XT9Enye$PsV&`&5jnc+UjUf8+9qW$%9t@i*?VHQD&ei6} zs$gt4sT{zlu0!~3U2d7BuS@_>xpe)=Ax)Q}&yFNpa2~$}`b7L@MdK6(+H=k2X`(Tf z%9cbEO5feuu&wd~WAubqJ@#~;yD|@l_R3fyVYI)IkpqNvjCbtE`&u8OTWlV>{ck3k zpMqTQ4v~3aQ-Ls(!7zDzxpxW=Uh&;Yl^ob`Q!pww2{3liFPtWVFPHmM?4RhX@!iBe z^&iTNb^deR+bxltkFFfooW2!WR}uSA!JBh703HT5sdrq3E&FRrCIp7yyUf? z94YUprQ{gma1}(jz4^vvruq;<53IH`7i;W699t%g^60C|^+z}UQ?Y#z!BxH4Is;PN z>DOS>(=$MCG`-M!fl!ny_&@Lq#5|HNPdGZgV-ExXe`PxiSvc_y7^J5OSl>q&-3NhP zj2$anl2LCod8k_s*M!a7pCl>>budk2EGNGH@4q&!dZLC#EOLiY7!`s)7WtWpW@iW~uJM#(*Mlc(GwW#&H@%dY79?1AclW>7T!(ika{GtJ2^s^Q=W_zY}gjPAC{| zX!6vET+vIWMMmqZ5p@am>;E8pKEqDeN@8A|M=WA?W3GHO!r(fUCNaFDqH4BYW0e`s z1lGM#G$p_rng?M8=ZDgl^o!4vrgOJ95UR9uAR>rzmf?!rv$CTTGpvRv1S-Cz)ylhy z(JN|@<1LO(<&_#i0pQIRayVl$BNyz5fQWTMGw^~6ZHp|G=~4W79;3nBKf_t1dxQli zL1zLYmUEm&zvD|n1yM${U4RfLL5UIv62kR{&Mf2Fu4qaLr?J7afWR?>` zJw(2hHW>3K8X#|-U{R>lOre{u`MKUGQpC}$!I}(drPNFy^F(hsM?>ON8%(M$i2)Ey z2g?*)E{Sm>y%+DHZ>?W%DT@_evMA|i?6X7e3?!aKgvO2)29wiAh>+F;3)9Zc#iMG) zm)^G^&V7nrR<`cbW^3rob(+aBV8MdklSXHmv7=r^ZGd)7Oh+bHIx(pXb~f9^G-=b& zYUV*>Qx8iaMYY*)SVdaQGvHypX0FrsATk)hR6d1aw3Hkcg-f^NG>C*aiISs<`D*w` zM|O**ngL4henpniCJ!Hm`-)vb4AQ9BI=jHL$_2zM9rnXvGH052Ep)`HEJ$Xov3@iZ z=MM_DM)J81MPc!v+y+n5#~sVU30RRu)=aY~WU=1ZFmOv>|4_3F4jTw&4n&kNNDj{P zqd74e#Z5OLs%3yXBAiSQ2)aP_FRdCL2a+>88BrM&1btn#oQb!Mr&f(iV?%FN89+|T z`DuL>eeJ(NOg6-B!!n-_m?{zHGK{7x77%Bi^CF=Thjq#Ki?py~u65n@vNVl4wJ7%k zTDUnt=b>7nzmb09)s{#}DO1OX!Nm12ljz9TqD~%xTMwCXJZ6$pkZKReWhK5GV)5Fy zIAIP4GgP9^$_Od9t7NazPPWfE;qkKm`F24Ir#Fxc#hWx=62d{!uhFfj(PJ}jhir5B zp&K(8DV`3MwGlfhfS*llOPE35%D$|E6Gj&Puv_Utv20S7sMT^^tJSX-h~rCSp?S0e zqdmq8*Sc`$Vt-Hk-JqoLWGLSto?rdajka_F*<&m^MZx>)4|9rq3*{)D3u;ft%`nGH zs$Zvtt93Fxz4@6@XLV(WY@(k*U=;@U$)W|}30YDa_aRm@Uk69moj)wUq@|eZ^c@9d zzl@~%M^|PR;6AKSWJmRzV^Bkt>yHM{yv|Rg^VwPLgIq?s) z_|_Us_qj699ZIIYh^ zEO#6Cw~QI>)>0O8L*_z>P-!|{a5}U`D5-HcfZmi7_ML}m9Z}Xif%1li&|bNRK}zdf zV1I_YW}NSKWdt`aDL!>{6Ls|a;42O)Pw2>Y&EM|ZFknDt>S$`$7IK$&?Iw54Y{XUq z&)fTNaz9AybmJ+M>#m>l+$QNlwAXn+zwz16e*61x;`r`GMF>Gf@9J9tk2rLOj2acY zzFA3lEZxk7UPQ@RDKev{fRox{)i<->Y6_UCr6?jRop}kyOZgPozamBtNXG-*MO7^& zZ(${bj3nc@ry>ZjiN-L`Wn@KJtwu-K4k$(%$vIeslaz)_OCgO4>tO;>XcmjpO*~_B zU8X5E{dq7<$To|jV+Dt5Qqo4$+!2k2j77*jloC>F(!zmh;q&0j@kCr?RB6Z7CX}gN zl;-{%^;SOI*Ua@+rPLO6#kKj=flhTeTsypHImxy8v;oRH=Bz8O%B>kP(1qC@<78_# zqxqQ3V`5B$mV~xpC8G7_@Pz3afk91t*lsfBAIwXynMUR8CFpXGN~q+2Mz3H*3%IPV z%W$L6#nwb1Ry* zfNq@_VkVe#a9)a?FTSMD0+l&LUrblMs`jG+i&dTzjbfcSS(I8NF*ht-^VHFmn!JB* z;*^*$!Y>Wc3_u6NBNxRcpO@K)6{ffP6z@wF3pCBa5zxt)Du7@CC}m2S%9o3RSRi); z3UtLiJvUa?U>0X^E}|hTl0Avj6VT)5zyp%EUd0DO$M7MeXz?MS_oDF#{JWnP*vNh_ zQPYBfNDI<>UEe9u^63Ope}X5Ri|F=FgHa6kDPgpfo&UTY^H9AQ46XBK-ytxY^NGBQ zWr1b*Du-bY})hOuMxWr7f)7*dx$AlC<IiLjvX69#bW|5L2EmBdbD&*y=)jYV-MT({aHf5^?SPOB*~&eB zpg9WM#=+eKUfsdVxiQ#@OA@XGyf3i-IBXK=Cu;?l_e{et3#@1lRa_+V=)uL^;Zvu zO3H_&s=<9&4ohsoD7S;avV&7KLdUX4Uesq>+-0rk&otZBXE8$1yoOrb`^LHroe^wW zi%3V`+RVmLr#e4aTy1Y9{&;AH;vLuo!s@HN!@6$sa5cC7g(tQ>Nb>4G&3e%ecElV3 z;GoYWz%ZbVj#54DOyaq>4|VY9Z{kS?9juwCKXQc(;uKtP3kOg;!_yL^c7-Vzr%0ZSMcDos_ki45B_a zw3#ei&lqdvP-|m7BK1i{?< z$JayU@JKsAl;|4h&Zp?!TzhZ<-+{kJ9@iYm0du8t_#u6;F_nbCe(e*jC$5Vt2N(2& zb+;++9#eM!0=Y?dLp4%k~ue?cR&m<7y~po~?p^D4a#uum$9uRV1_f^lhA$TE%IIC~)+vh}<|TSO%b*x}`g zhX|0!>a|oLi>XUxlRt2x?@w+&Zl5a)_#TL)A9+r3|96ZDYAX&ZG0YUB*4n#dOCp0BbAbGX2D4V;FKYX&%L*s8CFd=_C8M{E8|6xNZv(3i^pw1&{pa^)j&~>~q8sWi`>_R$ zl3X!vQlsc{+!d8|T#T>n^rVX>#<`+jHo39gxv>AfQbCQGy$69frbbnd0+SK z^4)?nDTpw&=J=<26!3Uj6nKZojacCSNBj=Xw;;I7$>| zJP%p8CYq^P-B$RSk0_b3n(oq&)y1S9K4Sv3nS+ljBysH1940!tLWE(Yb+q*QbSJ3| z&7?9F`WnW=mR!!m50UhtoaTY|ViYNE& zJOcT~9=L@CKDqrT>2lr7k|+&3hP5)RB5J=$bT$2COz;)S^2}>qO1Pkt(83h3$FjJ-iDoUAFxZA9aa+=4 zMx=-xHbnGLIn$9KJ{lh!-830prB0+-*u-8^Z>D3)9UhK*A))zqQk)1es<RxRd)wXThwrz8@ZQELH+qP}n_UXOP{&C|* z-0z%Qkx?^iX4TA$m=QHc<{0nu#->BcYjR+sKo3}y#|%Xj#0j}_X~3IXOV~9{J*^2mBiuTjns6x0>=mk5g2*)j5q2ev6BZaYwBH2vwWTD`Mp~6J>iDVe~3nJn2 zflLA_)VDFHDJ-sS4C&S=u|lIp>A043(5=H8hsh+2abQgvq&5j$)>$TgM7!FxZ)%oQ zwOjdt2HHiC2-ZeDDh!arZP0t@m~UI#MuUWvwXhG|OlaQxeO%yvVF?x(q5jcBX6Wcr z@pONNh`iJ*xHV>_$CU(==^+o)EXR-%Qt6lfLiI9jXi|p>9bas0>_>CjU|MIGw|IM8 zVp|Re>T_Tt2V!`(_J&6lYSZrOv4NVRP*;{#jh2&<8PGLe_|D`cKmoBS^&!8&2Baa4 z&)qFTtsy#gERmJ*mL=~wrUv2%nlXtAtYG8N5X@ua5ai{sk0szw%KHU=9hHjp{c>#J z>*I4&q97Q@rjDl@!A_Dyw~9uUoSB?Ogjzi+)#!tFY*6Zxb8L|6qjPK!_))f=h(YyF z&dMW-q!w^M5lzYq^^u`V7l1>(rx%n4(jS$o_o+D|C)D6Ymdw&4lE|4rZV;y)hP**+ z@52unp(WD8IFQP$l^@n89tZBKoj?n0+{4J?ZX^B6pLF9=7$VNaa^%jUOXyfyDdQ-? z)8Lfp<4~K<#k;&)p!W?Wbbjk&-ic1J1I`S^`m>9Utrw!M)lIS%%ZH9ejs)V%0JsFw zUxDm~?JH}syck*n%{x5WZ>{v(MHTumQ=sdmr7z-*{_w6)mb!Swdqn^aZV{ z;^0hbpr$I{=s#rR#|yrz0>1x-T%6^ARdqX{AnX-T^Si#bdQ`tPF*3CB>hvxO26``D ze=&&V>Y*tPvHwsAE4mI^5{7kFBWV^|27oI168iHXqM4q;2Ya%K6|)E^7!>eN8-)5n#%|V%!>ts*T}$0|U;b#cygp&l_zAuus==jTKrE5$ zrgVL>)!qL5AJVK$=K3#<5GQL3lh7!=7Nbjj$Gi(EP4O%=+pDI%By(L&?$4sBHrKRP z-LexD^vLI(g~j3@WM7~J0g)Cstu}Chp2o|*;(L;~q z*Vx?IjU6-|S>kzl?mlXH&cBQAoE3EWnktwP7iX3C7&Z7C{dpt?9jMw9tm|1-Ms2Un zWO0RXQNuL~Tw-u8tK2Qv%A8LLn6rszDR=s@6P-X$Pt{JX;;D&b9I~|gTuwBkTd~hWF>ZO{vcRLpO3}ea@Yl1+bj6~JIw#s*%8c=k z3Q$E3Cl^^!77fWhsM2OBNkV=SC%6PEI` zTL}_IMMaMSGNO|T>DBuZ3TxA(ldLcwEkN73I&u81II22r2^GAt4IuOtWrzg0h3e8S zl}9l04%A>WQ@=*8ADgsaLUC&=gl=#T$i@I_Rtv9N%i) zt$bo}{KD3o8;snkwkxc|rF3ht@3w4$5bFQ-3{VZ!G#Y}(?+?aP>j7FoMOLgdkHM#B zir(qATL#h%W?KkzZ6wUgEOAsczMt|j3e~B8NQBKHY8XSCPd;m6Gti@`^l5xYY01S*1b4)k%6 ztfKH zWZE4AjE3i{7c=pRo|$UtZld}#P)50A){|; zFIqNEPl3dC$$_F1X*O{;r0J*ZCqi$oNmclq&DG0uo$dYboOsVdwwSxRWV`b7bAyPu zM3O0ccO}$dt1RFU@0beBp#(1MPhb|fY3&Mq`^W+1^d%R(IPlk)P_ppX9N=pjXG{SX za4;rs9=nTX!7Gny!k+e{Yf*?_0!ua`mf8zR;H#AniI4RrmI8toELvDtesr$lZsByc zqAHqg0f40}#B7o!Z8b?2^0#ID^?+$O-*c1Vz?Dul-Ici`A1GhI2}G??jSq%kO9;lq zO^6~>2*DHSgX|!IV2rril++U`@rTst7urPn11E(ACDrKYkI@e^wvjeHkWJ-$bjl z$m;|qRuPFz+NjIoNp^TPE6qgXZaAIy5Eo$Wv9#&}qTrFsd_6_X>xGW`m zxe0zgh+6=V&st1d$A;wrJhEMG7!tg|u&u;3L9LVVa*+vcsg%F(uCLM=YqE z{wI9i$X+I2GE-IDy@z?f2&vo<$(MNSA!s(nOS{N zTd>4x8jskNCzN5G5D48sd#6mC4z0dr6Bg>^n<#b-!d=a9YiHfEo$N;iDX{0ll-ZaK zZ&hQb_}~|47@s%JSI5GG@)!Asajv8p6A-Oqb#AQ7YaJ(*uTRI+fnUe zlS9J%intH-e51s}q+_%rgfi(n7s1k8s_Hh55zcoH&~ly2K(?joRSKC@*Bj8ZlcBW< zUNMSC_CnvxgL5(6avcqIC6oiKHwm6&&SH38poD30*!#y1;!)Y7k{LWpDw@L2VLjFyt+lJ}D1 z5|%3P?&Sx^i0p}~je6$p^1{-wIor#);>(l-J_H2CT_LaT9|oheyD18V&^>2B3RGfmG9{1 zJWDO6b9fXO+t2k^NRggk7T0hPJ5+E3w(t8t;3~g${XH5%Du`+f@K?@ME4dR!Kv~}q z76C9Dr|HcC?nvivlcO3=eN=6ed1D&wqgi7f?YmP2u@r;0#2I4(?XeRD{uGHerP-oj znnovenUo|ab>WmnC-!ujMRaxZiXluAF1+28g&u=hI_E3EyM zPrQ)DZ>Sp%D`bFOa0^f2}&ykm(3V1b4pJgF0&D$X;1IYh7FAu zZRgkk#NZCMh3fA^mKm8Ir~&2?c@4~ni9UKigFZ=u9Xb}|E7fmQdK}dHJh{o>eg+n3 z%oQ_3M8PO3iXnKdux*n*rxxgv{vC^tB|PBOZ$EGUoA*8Zcyz7b85I~unA`MW4p)EG zIXy`cGR%I*m;{B)T1rX2+9i@?%Zz#c!n*3gZAr_opNDd;ft8Tuf9$!;mh1Cx>xW{N zg=*AfFIts3R5(n$Qjjrk`cAY+^x3G)oU{5SUnI|adf_wIk+V#cdnPMjTrS(FjGXEm zJDGTlnIf0qy;77hukv+jBFnpa_PdLm0!WlXc;zy5mm0ln#B_G4!)#@9U)ZpIsLwo3R7Yw{5Fi;<}C+W%;9~O)$XDm}vYx{Im zM@}0`@E&m{b<4fow#>!6e))WqKI}u`kyT&z1|gnJkC7j8CP7e?JfIcfy>=1PO^Wb*6=li>cpK~i3->&7Iw2gq@=%ZdaEZ%t!>r_aIuBt<%Xw3@ zN&=k+`^qEZ<>iTTzN)wbfUgjaZh3e3?h2`*AelqX#IlEQ2Cm(EK?s7Ijaeob5ZG zdyzgLMc$S?cw1i?mlVc{Ym$%B3pfXz&grn{*hblnbbpT$VBwud#~s`w8SxCn*oh)* z3~cPgt29%g=$ZspiR|+w#6cpd%N$)TFYs*yVvLa^N}@Ezna8pFb6$J_4u1-HBtAS!2_bN#B)9I)_R=ie(>-4gi(c>Ve@gNUwd6 zL-!%?%D}fJh_Q2dtQTdd$1Dbpa-1>3ipZ(wn*f1Vvl53Ug;&uchfYQJNQGC@B8LJ+ zcG0qrdWF`}GOnM|@LmQLct#Zd99{(L;`yJ-e7>@L%1L~G9E|G|Os4dEp<&vtf*Ytt z=ejnq`)x+fOB#4EhWsEp@m=aCGO_h*OpuIS;+fZtcKH~=(+L<;$Q&7|(pvc?O>D^6 zN5;gW{Kd;E=~ovgZ(&S#O{H?0cLVXNX9-r@!7U-hzx44LZhscMrm(BLKIRG zXz6q6BntF#;nF(EVR8b6h?5Tgh)?as9asRPtBFPcQ;ql}1CunZbm)@j6QwAUT2zul zwDg1$bq9}WnWRJ$fp^a=%3VDrIdgQ2?1pS zeRYEhad~&1s&E4Z5|`y){(l4tQBX$WlQm63}WN#pBfni#(1o9xCgAC{t z$^GcHz$D>B`oU^Jt?tOkp^I`P(ZNN8z~#c+OcCHG$Wb-?Lc2_}pqj#rS|l1f8nxgy zsKY%t`LI`Lmp3gZe@zE#Z^A?S+X;bk!fakdDuQ$eI8c$#)sxw>qu@zvJ_o|A!r8(m zkxA>__mEWxS?Vb4DKr5xhSGaZO9WGT=L2b01#A)42pOxw2EW@CGACU^9apUPw3q`c}E`;q7JSDXzco0)+st1ZLMC~z-4X{%79C(zpdWS>HUx@9QdBwE)kHan9 z<5s57B5=HdTKrf;vE0jB!dxRVUd8uRy2LLI&_cC8plADCL)Twr^v{o8XwLas)^pPNZc7JMrSdq%5AoS4`H&~GNMlWWU``~dp?>^H&838y0sNWSybzmrPGqA1n_0im%33_7 zGGJW)n^QWK4jaT#GKlUI&EL_4+}=F+C&IS^qI-PL)$=BXk+d_L#M^%@DB;F2d`d>y zQMMi?b5~yv$%lpL+X{e(C&jV;um0W&sPz{wTHX*qB(}MY>FE4|A?tIh*gmL{N)>~J z#_{#$eW6aPJhA7psQ!{;UBADBpvW;{ci1IGCU44Sb`{T>gOi%q1BSA><)fv4?^@;V zmj7RUyR%CS>@APvK2U#1yEZ0(!&A&OW`zlNaC)EPy;UepyQy|ceOD>OQyquzvBw%ws_E2b97iy#`OB^!h5}tcVJpnJZIZ^?S0@d zUh;r(o#jOf;15wY)wQtNZKcvZG~Il1{2bhuQsw>;+WWBzS?sRU0`Orr4Zr-0=;s(g zo9M+g>YSZ-FSkaTZEh|$w}U}50CcK$Q;`_Sjp|hc7FQYAV;VFSa^{7XF^e$u>po9r zM*fMJb*1xjZJB{%DS(%!lh4b4Z2$;$KnS|&H!z+V$Mozga>n*NRn%#)NVH^u$T7s} z2Ykj*UeyiG!9;>a*7V$~RmPmw_ym`re)9N)L)P@NyN?7&P6`L@f_rULoy0MKL)T1@ zy8e)h)*if|uaTH0PQrAGQ~1Wc!ZA`KYBHw4IT}f;E2EmJ`{`z}-My39N&?RCRKJ|L zV%a@pDn|O>((_FfaY;yZV{jCQZuR|sf;*H`u1on&&gYX2)iNjah4SmtfW{PkAhag7YFK z*ricpYPnHUW=lgx70W{=R`Wx~8zoWGZh{%Hw?R$5cCjvecEK)sc3~{^sWT*Cv~wg7 zu4an3Uu*n%Wora^L=A$1k`3y4;FmQsBGxWu?JT4Zfi7+*%GN$7 zhSanVjmda#%9M~HjeT}aD%e}Hn(*1hNr7?WaKjDZb^@B%JnH2z zwoCu|)*H@lTq;StGMbpYVpOnvq%;wHG&IeXZVe}aH~;PZO!k5AU&k6RUc!!~>%a4V zODH|3s!LcwKEQp5X13Gm*^;*hY)2u#@%~HmnjsuzQvJh1iIDkEX(7)4E6wXqVc&n( z^!*@F6r8R8A94~;z zX*mymU>K2LoD)1m=`zHXZob2E6EKc40jm0jgsXT=1@xA5#^95FJkdzv^KoHn_Le=N zK`u|&ECuEWWmeJy^T8;r2|vNT(zF@taADuaQ?l5Jo|&bY=J-|T=;u z6c)&aCX*R4yI96(V&7SlR^seH4<8{ewuEM_Ug@Mn5xM$``QvcZgIxR`r!DR51`E-f zcHVw~IAc;B;%)KdLe)KWdg!x;`4m}2n$eEi8dvro+-rI^A3907yxcU+Jr$37|6$cd z;cpG3P7?y;+?tvwuO>LyhtyGSk(e8$wd7FDS{fqr(RNPu>Qxm*P`EK?s$s&} zS_RR(lbd2V^#k+$2^#4X$i1x9G?qD)24<7OQnRG$GgRQL0mxO(bZC2470VXUye}7a z{Aq2GhtOGDl_qtVQUuA<(gDn%_&>!0=h;~}yHA%8oKHI>H@Kf z#Iebk+cgWW=N`(c2=2d6N=0B@Q!m3B7EOg=!z@DFokk?mJ6%fKm_gHa852dxG*#TF z1gNi)Rw`6i4l{=0>@txD7?l^1|CstY9ouBt>n)$J`~`12>EX$P?^uk?II;H>rNc5z zILJX|#dA5CMXc2^Wy9z&wGScFiT@~n*+jYk=mIr41%ZRl|&&p z)cr(kuQTV{Gd>tPNfY*P#2y(nue0jml!lSy2_@$I3v_eIp(=r>n~#t`=Z=~qPTUCf|;Xu|zkDG(9oG zaGUE6kKacsRPJoWPI(cEjg&A%y-U7VRs%m^c4 z_qiNxxd6Bx-uk!00eELW4#@bFyGq9|(2cBnB^*A%DMp7U@V3V6ti|>UZD7yi98)7v z;`Iu7e!UM+@*n@A@pgv;6J^+3LHWI8hNq1UfhsR0NTSy{w`c58&zUk!`5b9c;b7Ej zbr{tH^*hK-t(1Xi6ugpTc|b8$M?XrVo9RgkVgIDZt1v5WUf85LFtdh*kLT~<1VQVb zPhf55VjNA$MG7U!wkP0`WrgJ#Eo_*K9(GuTYdTks+zmhuzqT4R3o{n&s&;ry?G8y1 z4qZ=RR?XkCdso%|W5BcOsJT}6b7%yO zXi*qzX7(D>?eaj1m|oXRx%=kw^Z-d-Wz4s77cpWqHBx?#$)E5Ail8+Z3_Jh^21eS5 zpl14xt>kxoLfXS=s^YXyDKAf!RlnEi`L~OG{;6K4qpBkAYG)i!W!3dfT`__pV*+(- z8n_CgwVPnX|F;TZHpJdA62t>)ELJ1%WYMS-Sx=G);^+t8>CHb5T zked8iROxd~CV*BeY!bq#hy5?dWFrUg_qdKr=hT12=vsN4ZB&N?%$C!^{e3I3sMwVhozIsuIN4o+XI+~Gly&RwfmZC58zj54G^9D;`zc` z!VEeg+u6yigB?ojW{dpR3=+yS5B5t59Aj*QZ|9@)+{ zESArUMw+MY7W!)_$d`G@vQU^R{W7kqy}#WD#s6^oP45t(v;@ud4F07ke(^m*z7Z`h z*Q7Hh8{9iNn$%`6zWVXm^i?$Xa|(>x&d<|(ctDlgr-^_3!MveC+JSD`M_chLUx|9w z+euL$T}aT+9X8GlMf?M@M_v8~@@lfJ?g0`37~?9}Hq9X=(BZ+Nm|BCjxZvYh?8xkH z4CJvx3FDhYkM^LuP-T9wS@|LFVGPa)l}cDscZ*_t@y-00eSX z?SS%FuAA57d03Uc-Xv1TV(-ge33&AesWs2}orK({n3~qu;Xktbiw1+0e|TE0bl2@g z%V%cx94j5o!zHkD+h@uX)!3=R=rPYb*_Mlk{I=jUaLF{w6QFiFiy56X{ z@ar6<2NLf2!yNvtIH+FL^+t&zdKq&E;s~y$82Otp9kq)k^?6^H=LtHU^ITnlJNO&v zb=OqL&lhp8yYy_^3iF#_kaY#~Yg}x*uobR0Ds(+@Y%D@-sOV>dl&ST&XNX3oO1U_u z?sXPg0(B}l7yGGbEC+}eX35^|cj&U$h~Dmjo;7kA=7!7Xq3Shigi17qJ_jf)`~#FK zO3GI!8zxZHBhWfln835Pg$~t&t<&tay39Fa$r3>mj49 z0T{*K()%uFuB%q@SHD`wfHS%l275RhXw^~17FGxpNa*OcEE z{X2D7&JuB5+b^bmT&uM;Tz!n<@QUdZ(D%PbZqw;#rfGFjZK}l7{AGljrGEll5hjGwo)RMs=metVPaq zCgXEL?8l18RHkj04<3{QZTK_#TM2I-c1ll zoX=~Wa#tWYcz;*)4z6L(jp$w&AF-Jg9yFGZOZ%>ZnzzaM<30U+_p`4`d>tCznfTj zJ`{YK{D6$e%{(zOgz!0Gxki`Y*M#Dy)|wdxpF&YmxPznvpfZ$ziURKf}qDq$Wo&%kSUR& zzmgH-otplzhD*u?6xmS8tFfCSI#KmYwOLu1U!1_FG;&ZBnrcXr88pDcK48{P@l_wF zx2^=X1J}lSHFHMLF!?3r|2jS?9p<{N6%Y*zEV8SLc92R~qQI#isHUtX6@p%lmfd9o z6X9_#AnH8{kk%i|m%A*p4jX#&23N<8#Nsj3V_lz3-L+)dR#WwFY?*=8sKRtzxLoqq z#CMa<-7Yo%S(o|PstmcwHYcKsCDS!CTwm8YIIw>7gRa)wvvUH4{KE9G1dhN8`!_e)@qF8HT8_@6gru`rK z{#S+c(BTEiw}0IP_JGYL24)-YS;R^8hz#OFg=@QKdp=*P;7N@yvrv($$Tk z0%YUN6%UYGxtjjo%}di6s#9ykm-Hu40Z?}H2!@B9>WvnECz&~=;iQ)EQ^b?=j0V)q zmGLrRT>2_MH{J-B!$SQTJe0}%5>bXNB{tK@4kwvYXPXO^(zH+oY@VxJ$4gM>s!IpM z>b`g=WoZln$aC~x5UFDrcHIaOSnE-KCq5?En@BXBksS3T1>ItGL3E{tIe|LKFrBs4 zvS%5L=BzX+PS|s`c=s&~PeFSD0_4XOsE1D-oq@>f{5WmM>m5e5hutEMN9l&VjzhJ) zR|lf`AGy)zcCCF*Y0Zq!^oZm7IEuu{>Z58L^{yQA#&4si@$O_Ll-Y)4`&-5PCK#?7 zWLs&S&-A*}R}StTMpGO9F{6QAKSi~-P^~4RBod5snfAnU7c}w!-{l^ht2C2wdKWE$ z_Jr>HDLIkoE70JRs{=VF*Rz~7FfzeaPG_a?I>&^uqfX)dir%?Rb;F|e{Xa57r_*OI zk!0LSwM-^9RNkfr%%+y)_S+?fEJtKY#QRfsFJX)~>H9adbo}rv>J!io6tCkacKdiO zs_8;25Af5yodymqm7l}BXDxWc$XBT^Fz?^fDOQ!TBN{gVnUvW9T%slHU5gGYe*%ic z3l`w8ywu(8f&Jth#gN)TeB*j<2809K!N5>aXRW}9qQ{o#KTZH%xjX$4;i(XuINoYS zHF#(30~S4GhNvM zA`p+OoxR|;O`Rqj=GA0m-1%=0j4nb40A?w}v;?R-036yKVfVclSK^$9k%VQZj!4xL zMubbT5n1p|Ev_^sjZTsX+Y>j%U&!<0O==H4{Ps7ZIMw^lHkrj&ttwa{0=qm!D&fty zRa7Ltdk3eZ&)VzCk$P!F*5`mzEZEf>bQR@H{8E|gaT<;KdK}Z$0;T>lN^mQxx0<<`qV#Q z9nkW@6t6|U{z^t49c4kF-&d_alOJ_LE7C`?%&#ud1$=V#WPGBens>2|cd4$qXnDKo zid8$($0XmsS_7`{SPzN+;r6PN*1jOP;j(CZysD3J&ip0B7Rp+sj6PF5T3;plbL1vk zyWxpwn&m&OX$MWY`jjakxTXl`^-~OtFnwSU!g!j5InkLfw|VWc$TWT9#j~{fKE9!u z)*`j<4NI&htiO)HXrftH8FeySf3sQ_xK7y}XT}|+qmjaJ+^dbkBb2-YNs*1z>~!81 zfSTq0rJ9A0%|D-2`oQBy&DmL%@8NEW{Dsf}x#bVjp?iEhpSX+V^d_C}K7`%0=3os+ zS!s8! zLDVVGWVMWyg9VBTl%#uMm|-IpoHEPDhUH#8Ad-0L2$F2=R9^WM4ndN~Af&`)kITI{ zBoDEM6ENXP9dr=#aH5VDQin$<5*XWhHd2EV&iOE zznoL)d_2ixmoqPnJR8!5KW7`_S*~)&G-n&qS+pfnoMn!19*Za#96#7^P;2O+S$7sZ zN5!k$`>}m?4ySBBz7*-LGeXYv|NjHbCm3goJy#@!|tQn zZ(G4Xr3UKmSlFsMj|l#4IE;&;^tzisId5v8JxOqR;mxCVUbhkM`&a}Qa3a+N>!(*Jv; z39}kaGj8M= zvhdDal+b)cQ8`ytuavFR=w=aV++vQiI0RbeKi<{K>b@+!|71JLy{{>|w`-azN|N>ncBz_ztFfiZ!jn3kAgWK8>KD%nq0S1Cmfs#(evP8a ziis(AJXPcP4(Iqzm-7`Y?Jk<4l{-c&yT2~Imt1%?KKp=n_DSOCW(l4`1v8y-|GQ4~ z`;yUUV9?Wb5lsrh`tNIJqG}cfx}D!9?ebtpliQ+$4UueWGgjq#<pD@DwE z7L`z*4bqV28MU(O{;5a9&TA@K)r~u`OX+c^A&P-GG6*i{-MzM#QfTSnuc|{4aJoCS zgA(D*FaCCI%f;lWg7dE(OY2a($BQ<_n07^(uhPkh;&BYG@+9nFB-C0R(khAKVRbL) zgVzqHCnPxBY`X3KiCSTgYsxFR+EFCbJ=jov)sJ!Mn^ZwQR`UWUOHX?a)RB~pKw3q@ z2n*n|C4*w}8-)dP0txws)zYHzpsobpFTGVM?mG2iZqp>Yq0)Vo?8J~jDJ$*{Nz!vX zI(V`7yzXql0?W7l`%7Vrt6Z@*xDu?YW1=9f;_KMbyf`u};tS=&j^QWZh|Wl(>{1Fm z1K6!W><(DH+fyAaAgpGhb{S8%Fo@BGVr=pJ0_?@rWQv1FzBJ{%q}BHo7WVXG^n+~? zj~^kN@)tORnxxr1>zqaO;jS8IW7}BrC&|h^tod4-&M0G97i#SJ5`}`YE=;MmQq?%} zitXnj3y~XPyEG?jo2dnx0m5shyR$r^k`)(l+mx|s_bhT(zt#oG^8)fAzju+2 z8i!Z|_ne*9>S%IA_k8xYhuFhmK_d|uHSafFYrK6k>gxQXgavGFyvB33EysK|F=#jS z*4VO*JEb!bpY#!UiAgUXlP!Hle&!wKJ%-=_T=+TLrpb_aqAy*#5%M}Jk*r-Iksgx- z{p&Mu9Z`_n4tfWX^*Mg%qHrEKEY^!*X>?e{ap6DU_*PzMjwdD4z{#8M0UHD^8+Bvn z2CQ-^3hG7GzV^LVS3(zy6}a%oO6Y9;sX@oSx0UQkO)j}vxW&UmIZYOdDXxiqF#Y1s zvR1T)ZZJ`Z$=pQ?uT9d0AyyJ4&C?#C5B1|Qw67vl<{UvL=J-Hq{{4wTtiE@M35nD< zM(QmA7GhHc9u+8=F05OMy-KL~or88qC0~^3>zaUj6l*-<(+MLT;O9zadQ&P^h9IBw|*P zI${cWK}vEYW@+7V&?q5%YJR3u3B(1zXQko|6{&T~#0Ii{u|~qkG*=j9Von->cd?z=Wyn!iYcr3#^y|4a;g8 zGi~lz1M(u$uK!2*(&f;n}LTywI-qceCnZrLOB*RNo zE5)9r>3}&v<*BV2Nz%NAFHg1Af}i{1TBLu{BZmUbrzaiR)3wodG!v`%$7Wso=DWC_wosK?1!$G$V=q$3M#fD%#1A z46zj>c0{F(UafXBl^#-R&PF7vaZ+B!0>?Nyuv|-PuYG4|`2*DZw^m`nb)9*NqC0() zusR(e%*zc?_|P!;x<4>!l1c(|FtlJ&g~!k{3_C4eD4K`XUb2V?33Xjw8JWmZqeSvK zR;GAP;UHb5Nc`YbC5%?J%3Qf&#Zto=`>O*Zi?85Fdh+$&C5)5e2sVR<=qM_V`w>%x zdnA9U=G!uIlhR&y5EGScfN+Vwj682f4UP(4;*H?QF3#G^o z4(WA6ElUAqLlodmf801r;CGJoFTZBqW=p2gc3~O`QTWw5EQE4Q7f(Lg&O}HR*m^Xi zr&WZf2p4!erRBHl?~1ZYHIp>nc(s6Yu%%@m&S8fbF{<7YFpY$*jrxWh38sAU+|Fcy zM8KC;K2}EAQVcG6#TQgq$c?n0GP98|>Py3b&ViwNMU{m59#oihi}=o(Q6t2UjNSmQ zG+I6FMIJN4Q^w$jdR!sq6f>Ehonj^;`9N%FA)Ndi9~kB1cUWs%s6J6mtWo>py|$s8 zQ1qd(M~55Q6)1vfq+Tt)5nMgQCcoGWNp)Q@Fu4M-)9&-sLVXeqgFT7F{k)i$PJSsK zu$l;?&uIw{1$+tb;dhbMFl{BcB;UG*jkeGY)giEwb`aI#^#fa4dS8qvY^R9n$MJbL zYfhAWvcf2~w?KUUM&Z*lU?q5D5D+%|aK$WA<)WsqzlBy#ZQwk`HYOxh)Hnw_&={`0 zw`MPwtNEQOyc+|CPa>^wZF;f}{8ru%y2dNtJ%}mT&F4M;VS2jHbYQ=R8E}8%$khnM zK_A9b^raJXZ||31HhzSpanemFWyTTqrr2_lns>eQMqb3yrQ@9uEP2`@M~Nq!ZXWLe zES_SC2y2(kv`l;nNz819Xsnvev`zd79*=5)7=@MHutIDMEWZ5X6b;Aq<0di&7N2aX zP)|ZvIGtYD=~sBp6t?7)y80*wcBF{aT&}9-Y0}+qAK>Y99eXdz*?zdmzwOqCZz;*jk{Ql#D zsmuI}+-v#(ax!nfP+gG7fA)h;svea0h$$w}9P^f}jqGNwl8{ZkJx>-YwOH zHVRARUMbZCE80GNUq7AOEqFc?W?pKTT*i?@YCcleE}c;yGeZQez@1)dK0JkelD3~I zbMt;wI@Z%_|NClPI?N5s1he+Bg`)7VX~ zx3|9Qr>VO?-}|S3>GW-)6T&Q0!bWN0E^Bo;>-y?0Q*F|`M`idF?4~6*VX_>tJf;tC z3UA(EyK)Bq2{s?5w%n+h(8#jvXe+{yX*^p=zjQlVYBEu=Om4!`%%=%9T3kI?3b)~! z8PC+Ovnz#+(`_-u@Br?3@H@po2`=kD%@Tw}2#2RlGuC{@q%rPx)$%E}d#M==t*=ik zwH#`YwoN8Tm#AiRIuLUQmVY3b4KRWs#jxQzgwaZu$c3AJ^OIqmC|n4s<&!3FORix;IxeoTj4HC+m_pS53ZvRqiqp=b!$T5FkxrOoI< z>o*Rr?W`Yz9X{0Hc{uB3QxGqt=T8`OOx7W-JytyRw&a)d6K#S}wPOwz51#G+h@ZIu zt~_UWzN^%>zunonteiOnJ^M(%!a_qCuxq`tmnREeFC$8}ne|O;aCt6CuD%7;8KR`u zGM$NTjfijYQ^jaw%{mh4YSP`TBFC41A42bk>2HZwp-3)iS26%UWT4B0k!&&3xMU~> zFcQ(iO?r;Z&jciytsO27MavxvIF6RyQ0Ug3XWL+Tr3{Cr_IqSSS5P!}`l~-{EFBB{ zT-n2skA-Jb$B&Gf&RV(U1QOlYgpgMdZ)Z2QFlSK^olr2dteX}OT>RY1b&MV{(q1v9 zBtAmh+HY)+)NgnOH>v}81}By|Z-x$801f-KjI2|b*_AFMv|kX3xqQ;BOh!a%^dRFE;KTdq zn(7mIk;32lp{4D2N6KmN++^^)$Nb{}=#`}u2viMfoxi$;?t4)xFEpT+s)+v`AAb*h zz^lOE$~4+mbl?xnP6qhtFeYy;<&%*dWkneQBY#Z>R*#RDggyvP>?q^wA_Z)#;Pb}E zgMr-{lDAgy`A`5NpbyX#?vjCD6B4!L@pHsR*P#!t6&#fPJ`^RAkw?0V4%TLkgu3dt z!$AR zpTC~)0d-Ed3X~;9@~8o|x?6 zowF@NEr*L<7 zcN%Tn-Q69U#vK}WDYS8ScXxM(rYUIL2R8%9{-PSody z;<{#>;@uLO6x-Sh-*h0Hze?G*Z)~2dz#`c{(S-qj0E2;3c*EZ)=6-`tDpM4j-<`+c zUz@%J2DI{%R$VL~OyekrWA2M(-k1vK%VJZ67Hn;4dIWUHrB4J&)9-F$z5f z2(gK3U12(!^t(PVr+9N`mALLX()bxJa%iBf%pz0mcgRI z0uIzy8N=lG1|eZd+p9?US2qWkv)C%T@|Tn-5*n8Fz=~*a7R=E`NpBwdiZnWc<2%ji z2mxY?GOJ!YRc%a?FXqZb)8j-%Mx;Uti*`aq`^J;zRzvENlLy~2$W9U8Gl80ZQ7W;x zehCnqhC|>CW~~WwQBo|3X{S*h&e$z7bk&=LmCLs>&hZsq;L!@sa}kh(k{vwJx@22f zl;7LGJeHF$30Cdn3D{mt;mUyfvJa1F@35`$MGM(#{?dv(=|5w*{*_Y2zV_92R=CCl zOCy}P8{=G%2osNz`?pST?$$TaT2N%YL3PTxYbn;XE*A6d(4|nkK1scQ?&x#AE@RHQ zn*PyTkmLX!E|m1t9X=!AiQO$(59v3!_D~I_K6-1)EMxlMY}Y_*G+%@@UQFDe52YtL z$u?j3s=iB`JM0!-wW~DLdLlxATDF32sRk<2gQFUY9i(vo56;qrD>_NfFE5$nG6LOZ zGDzv7#w~*;VmjkrMpmmF$;G(CumeZW^HSvVCFv=5QPIC@M2Smal0`-8A4<#t5eTgV z(^<&*$7lvfA|qkVDCWL=$$<}ym^P!jdM%;hL4Emko&!o+&W{wlG2>vh%w^?AR$^WQ z4GML}JOrRsD6ml}M^~i~E#Qn*^0*BR?GXBl*v(l|Z?Rzb&`UtNLB9+L`6v1B^l!m% z>`TIWf|3ri;4dgT9HR^folZz&yGL9fKxWk&o8;_s8?4eOc8e(~9oq?;RcydW*Y*p_ zKe(@8zH_=Gl=mcNGfAIpldF5N|Frm=d(GgvF zADcsJ5%r55(|Pr8*aG}(*M7;f|0WnMm@%-5+qMc7 zY7Jzt8AanRVDxW^uH76Y*iWrE>{anrfalvib{a?m&JzF3{aWQ9mXyp`&8U&2!0Sij zSYi*0?JzvL6_ls^)&#v^kJR2fA8~l{TgIU!Q4~m;f1jz4uZK}S)9T&OxBn+-R=BY3 zg;r3+8mc%rS*YMv37?(J?2RTC$dNR!BP&hoFV|>KgH*tgGEXL}OPf=8yHm+M*G5rz zLgY53V4ddzm}0NL&+kasQB>FN{FMBu6B{heRHFAmyJ%IbsuR_;Pn6m4)X*g-#2?n0 zl$O_ZmM@ms2-IX+k$ak@_ZvTq8DRmq6rd~iYERkH;|IXm(x;8t&1+$J?BWo);s=Nl z`iPEdN6c!ec|o*zcC_J)Eq&h)Aaw_f&-VMh96H(v*U0nL<4m3b2uKgT(Vv0dh$trD z$HrvX#^|YYaR!kuwV56ZK4K1`1TV^g;=lUQ)D9qRoREq9Vs!LEP}25Bgi(8Y@(fA!$urAy~6ip!bgVR5#${iWTw46G-xOo4d(#vA84uAQwpeV}>- z&P0=TnQ<-1ME5a#GOpBmsB#%fkCdj*y)UOp?RWGiswTGZr@eHEb5Mpf>Cv)jurs8} z1*KgPhGJo+f>%bID6`JKr&p+j6VV#ifqFe-y}y8D~lxSDJkp+qX8&?kUwC@bpgfGRie{og?1- z#v{`Fc?n_-d4An_ZZo4f$&5dSd(>mN{!OHr`wDxlI-M)CX?iiOWv`%(-Clgm19N0l z!)mR3^d31bscN~Nk#vLj*9TK3|3Y(?9kp|m9Sp+;RDDzy45n@fnX;J&QuO> z$*}kz@ywdpN<5UZ+0NI5KiJxBvjE&SjMVe`ln$Hau#x4_Bi%MyjdMTxmbLMmIv34J zJukHwJzz>jlgmWa<`;U;vB^+hi(hQHu}p`rFscD!9cpfhLm9-tOTSdco$%{Z3*-DM zvYAw32bkDK^_ZrkkquE*P$;}FaM<8-4WYg3@<$iTjDgppf!Dl&mJM?y9FEnC`@p$I zt#c|2w`bB)gbrqN&IrYdNhYy9Yplr-2Rvh98o3ERWv5>H)dvj2z3bH)?JZhe51kS5 z4?y%=XGmAq&o|C5FQ}W=bpaH{e@V@DsEmliz@y(x;a*5cUy#4NY|+%O3MbU!z^!@0 zt;(?sn|!GC3w<4ZZ~xH+IAFL(K=+9M>0k51pY5V)RXC}32D|<*My*nDZ=YEYjd6h9 z=y#D`14&@S*n3;Zn>XnT>6ebQAcCYfCG>mE5RfD6YVfay)ei>a9cr@xx!&y`YuGP_ z6d>x)j}TUghxMZ05<}iFNMBgLynr(_uJ-(_4InoYW-tN5fX%l zDW3%jNUDuTuXl7a)4XK-cx9UWc=*pugv89g6}C^u?ne55$6yft6DW5zb#(gN%kzIk zUda7-jWPWX;^JSv-`1wqZg&520C#k8GdGhmH~vi3HFstD7vsTX=;mT;h}p6@m^fdsXwnsxxY&tFHKI3yuqno(il+rArMbEUYjaIrUB$&E zeE1sdJyH}XK!r(Ecpx}}YamMU&?XKIg9A}4^BcY!g%VY#Yh5{>~0K`#g{?YXX=)D#DYLo}@IRO(_L?yu#V1!a@_GC-vn2C>;m7fEGj}jE zv3Bs+@a9-_#Q9(|vmWn^nawBV5B`=UD5*^~v6^PLpcXNQ8^XXktbu7dmY7&4eQ$0y zK@?1U^D>qj@%{cTO}X>wtZMqD`+@gC;6&(T^JVj$RRuBM&7;0VNW1OB3kO{a%yUU5DSuLqKvO$x{4RJjG-+yR zC={cKm(T+@D=q@@31|^s9W*8J+BZCKaCz2`8QkfGh7gMzhjQB5o3`hC{S~zzHuZ)F zaHy;m*{NdvP;#2-Gv3x>GQZF5ugwN}Rca7}pv3XLX)N_sl1oq6&}~{|Rn)o2f96Ix zctbwI6|3HQKu|%l{T;x3wV~DGhivFBuzCCAmUS3PIDP==>4-v<*e{Y3 zuTOS9e>~)>PW|%MDczFxZ$XXw+EC z-o0&wT-CX<9)J93orGMQ_Lm%+*!&#Q`!-@qyp8xLU6RFZ0ESHVgG`M2OeA- zCf(+Gw|l@-RwTKL+6Mn<$fsX)${p?TXl;n1MR14AK<{uMa8ei}r6Z+8Wc2%m%#w_> zj|4zXUEbbbdu!_Ao3RcF)$GNDOJn-58TKJS_<>VDZx5FAS0+V1u$U z9j}eZf`)SEZJh?|*}|id#n_)YzUTJ`LeSI*J~)bP1pKsOzK`^b<_uM)zBmK&c1&Qm zbk=)|OuRNF)nPWwEj&ZDt;={3YclP4vS#Z;jhESPcU`IYS{h*;Q=tTTjq7wqO<&19M-%RsH2K%Iw<_qX@eK4Bcn=5> zSDeEK2J8{J8U(zDl|F8qFSgy+R+55h)z3^UIq9qPz#|k%ws$R6ba_Ikt}H~73u-ze z0^W_g0pbcZTGV+?$ch^%Zaco}Rq-xIo!s6P4Sj24wDt866$ z-$SQ8JKIam|@$+r`niB+mxGpk;c^d%M1t93;$_2d}o+--Cs_;kQb~29pa#-&|%02 zR8jEhX>TkD5O->MV$t*I3H8U2yNIg7ms*&h^$`FhC4|An73;9&py9`x^yTO19dch(?i$JuT1{Ao=U7XghgOhFZ`ID}XS&yF{~ej1sVrH_U{J2}o7|gs zul-*BaMP^Zgcx1?h;mzSSK!QXk>9tB4Q~VqHMl<39}KerQo=pcHa!V!0e8_Y{=3rk zM9pIL+7n7V9FIh)cm^-}R*h7I3+gT7Rf@x{v;u;R??XMu6|d*CaZxUo@{6JG<7au~ z6Q-p`SSgzPr^RmKWeFr$M@d@cjen|z&@;8C4&@hH3iQi+xizC3;Dgl)U(!@2#4?SH zQTkJx29%F%T%P8>vmTL70U0#2<-k_Bz}3ME8w3WuN@-sRqptE5%jt7cSR2qJ5_m8| z&FiTyuWXYnTYAoyun#hqZ5f~J$vdKh^VZ^*kU~ZB8mKiTMYXgeJOF$}EQILX6Vg(^ zWV)J`XoZQ`C1b-HCDV^|GkPlIlk)sAvsr84tju2M!E|Lt%12wvs?st z+G%~4XfDzb&Ur&wRqY<(Iwald#LSQ~vU!m@Z|1P(+M}E3OmZG|$ax#`o*Klqh}AEa zx<%=go?YmIavmJQi9aHpCn_mviKgzE&Yb9_^|8CGj_Is?saZwU7#xM4YP4c)h52}J z!VBgb(lw2+8=1U)6jpkKFSOvU>d?O*iv6!vA6w^Ys9qFrG|0{i#;QeMvFrCP)PETz zEqOzB+TK&l2{YN8oBG3$8K~7Q zRMBJ46J!VTs(Tl9A?h+?`a}RRSrcf~{-72WB8?TvGpo_miHsEWNLoXJpK2Q4gm;{q zU-$XVyeIV17YgMX!xv~S$=NR@vpo4;spzOO40TOcxy~I)*k5VlipQOM$73qogvT#P%)3v9*TAdW4Hw^vuWmW zg$Ew}_|#HVF47WMDHX0i!2d{^pR?_YpIJwY+GlB~hC3`&r?TL{5y!#i?`dyw2g>um zu7&m{pp_F6K|z;V2l}jBI%wPE>VFq#F%XzlKKgUaBqJ3Wtc*CHqh1V7n?`-UVU@w* zTbq~YQ+Z4N2z~=c>m4FQ))~R5e^^&Em1Q}(SslsK_Ad>z^&=h>#F%$d_e%jzj!nc(Rph-STL}M&*PsF&Oh!^`Y$Z| zU+`1)6Wf}9b8+;rHZynmUm(ub;nBX{qSM{+$^KEJT;=k-Ox474!{p4=6s^=>c}eMM z)rQ&GhCktof>jnee+2c3IM|3Nf7iB#W+9))KR?<(?!o`}kM{rKH8o$J1zW&} zy@C`5t8KrUtK&eD*hsM+eao?D!8ZqXZF60Q++TVwVvNOYx#&c+bc1zL3c7Y$F?vyY zE@O#tPA0|dYkRM*i>}j8-7^o~c@O@%e;@qwW{%{XbRopSop=C73v_V3DnD?Jaxa+TZav_JS83vwH*9)N6z)31!~ccAQX1YA9!z; zsP-|tzs=uU#xq(WNh_={juE2N#v+mQMMVW@X2_nSOLs%N;F}EKy)$6Goa)wlnz)I!*oFe{H?`wy4;U@62&ULE2%#l2>Qb%2zlx*qHLg2ShjXy zy3S1&*=KqIjn&B@sNWXU(gh(s0W`rWG;!G-UEO$(d+hCh*k|{=<9AI0n;AO%7A*|C z?x|*V(HhJ$)_ca<{!7rb6;$k_B7V*7*WeA_x4NjxQ6tJVHe=lH-oebx$<51X!Z$sS zOM8WWwyKRboxs3E$~gXV!$;riN<8bx9D&P~p0C8uP%tw*>sv*~z*~+1Q&J)Fd*wxC z^y})D%d$^g<(q}iKqAR{ZIk5Ci1b{MXdE7pvXQ;*Xp(G!jmV>&z-CtI$9c<^l*6YhSNP1X;#(3_TlSQnvHr#1W!S-z{&79Jk1hQqwoanFxe(;20BeUu`2?e`gz1#9 zK1@NZy#2PPip@|{Ypahs($-WuMM3)U?t@!vc|prF`&0SJjOx%?wVNg?Mhg13R3%V9 zC>ZWxN}z@C{t(*_xaAO|Ie=QRh#$@^%PfGPpO~7-w12|W8q1hlh#671I44?0BGbzQ0B-pKZE9Xemd|Fk7RGp8sSf{LV9uwMfl?K_M<*&ZbN=s#3G-|dU8W&$I zD}5P|1y@POMncf#Ts^L|k&N<5(>Wh5EGqb>^?V?+ta|97reqq_>3>Duu*Jv!jX*gw zQ7l^gK|x}>XRpvUUe{%Gz^w4bV9@gYd8KVtw~`;2VhB3CI)MoVI2vl<&2gq zG_|a0gx-`_&T;N+7#lg*bgBNRs<&yZ+>fP(WV>&qM(!ZTHHhfr0M^QrXt{9FxoUVy zQS{lvF%!$zt(bmuXkxVQyrMF|ZXoew;C~ps>vblbd1%)x*_ny~r}~Y>F#xd~)pXAT z_UbDdMg=S$%nvzf5KyV6$LFfysIdpZPX{6opY=|lLsm`qM{!=vGtn|e8^@kdwT3Lx z5xD5eDF*zSBf1<_c%`6jUIS_Th8PNW)7}q~Hqf~rZ1jo{(7XC3>{t^vWu5$78aLeb z9`XBpg9(q7OGzXJQQ`9C^6LYgcTz_`(eVQ-3A{QC#=UWz8zCH-FS5{f*gJvf8j_Eo z-x?6&Cl(~>H;PM?u!^l{un*Far+;onE(G;_#Xn& z9HlzN0TxVw7Hd^8V1)2*Xhbh#Q78%#6A?5qO!dmRmv!9GR+ntLo}rMzUYJYeh!Zdf z1c+w0zuR3mr%!JOcSyZx9wu&(aW^_Ddtdo<1j?HdL+R4$=RM3@b1hRmWncJp^lqHS z*|zvPxLjRW$pTf+QWM>bHL%8pRS(RQXpe>AGOqd3P((XmZ#6?iJ_eJA^WfYb?k&OR zigQ$hn7G1z1DRQ56~1!csY+cKm_xyVN;E1=O0wbJT5z8>)xeW(cX~2lDO7d&6*Q?R z;y&1j!$4Mu1_XPs-JMLPlR0+2`JR_See6ld=)>RXk!#0zUfG*{}uo%sCi_zuVIJbm8GvtGGqx5Ta z3d4IoB)lH9*l%o@euNQDx`T9r#5@fpRT1_BA3fD{h(oCy?&LA>(0w{Ii4;|hyD5Hh zYwUD~-Li;4>a%jJH9hFRkVad=m3`NhX%#6pl;?k4ka1X#jKXvTpj}udSUfw?=F~fv zQ~O|WTw9NK=?4B-uMn3**POB>2P*SjrzF(DCIOC}b4YQb zz2wd`Xn5`U`N&KqA2rtD>JpQ~(G`^P3q^j4Eb-3|qN?K^(Z{;9YxViVJWRJPkiPRm z6`0Ll)A1}B-{#L9CAi1nW}iNc{UV*nlfeGSeR#WYI!^nrU&q~SzZeSKRO33El&;O3 zH~Ml*mGIrPv9Lv^LY!JLHGz;hV5p6m3pCGXoWq;lQUUd|ON1*6nGbl4?K_spLCYuQ zkt+lLE_=^kvSR^1fD=h}mpWBSwklMX~{pK}N{ zu;&-%Np8x)Q2niQiqd2|vz`D0A~In>3lOpI%8dM-Lv*%<|Y;db;zM|JK}% zLlN!ZuMyJGsFTzE7MMM_2`M38l{#h?t;Kn%I1;E8l}2v+89v)Kd5|Z`Amg!wSHiTTuGAIU|4`>^dIg0|H&^jJ14v+rznDFw9_dQMb~4)_^It?>1(o>}b} zF6^ckjMN~n@AyQ4S*b|@&`egRsy*nc-~tlqS2NW z{WCAoB^TgwI#9OjLKNz*+*J>;v z2D@)#I&tuiin)%gxY&3-7JKLShxNo*q%WE3Wm2S5F392i#vB7u#gV0AzpP<+_idFa zwK6oo!BN7%V+*1&J30+WMX|!wciFz8N-rs*4=xqR?n>civ?pu7aa6B}RMoMoO(yCC zhksPEUf7@vA2eQkT?vk5fGb&nFX=j8P>ppj+e~=FDq><)!oJW2#3KQgzwqY!n?@<* zi~q7kfkXeJe3XA>q}J|o9Oxn#j#P^VELDa)kU4cAzBmXQSHR;C`891QnDj_8LXBAm zBIgA_NoO%^h|D>Z#~(YIRDWx&#J1Y08Mncs}NZMDwpQ?E=EbI^B0ux_>VL=7xC#nur}&o?P?D^^OU9JIR` z#Hqtr9oHgNbNlc{-tQ0@#DzYc^v60iKyuHSu-5T?zRlZz>0voJNBe>#_iK#5_(p3r zHWwgPrJy++?1EVmHTDvs+exRdJ`++PdqxQcy;F=;O4WEyKR;`~i*!v8=>LjtP7nba zR>-aXO2@0H;c^RkyL zjQ0ySth)CJkQW6ay-O6CiJ9Wau=2`tg#e=9kyt5tN_jO{;QjnJmFY#rCyM^VTijxy zei_s=Yvh^U57aP%p(vZU*6O&Vy6!GB`9o$C*coT9Z6jFocO)01u%0)Vrigg4f($SEC9?7>xq zjXgKF8_S5o-QfmwV-2s!sTM{`H1uGvPVMHvrrcN}pR&`_0_o(6Q_4qs_~FEXwp7`X`A%Uwp4TZJ(0xy53>^QzdY z7U{1I>EgMF?TU4TOjIW4XiU>#IKv>~xgUB*zb{lwsuZqZHZ!f}M$Ug?us-2N$C2fM zHO?z4Dw%Qu^g9y+qFBhvsUSp`*rFL*u+~&Gz=iwc2li441;zLWux?w&>KJcc2;?W| z0b{Jh(xiw{W5x>EL+`nXwCbPRkI0kKZXWdlOP(gq)34vy0BVV6?v{jPr0=1_|^vq=YXaNscYFm)%Cim|Eln9HF#bQew7Xj2#>);ep z-Mr}&3yz%VykqMXFs!VxD-wppOQVoA?Vv**arylN$iL2X3`w?Pe^3nF7ay|n+qA_% z834Ik)^#)Zb^{An0Z2LPm^kWLPWGCrOx7SgH+GzpuUcW>GC9A+9f|RqvMnmAabp2+ zV7G3+DfF-IxE-mveEOnrTF%J>ZA&|+JWM6ne_57&n_&y#T@%Mj1dLy?klGSA-B2Ks zwD;2U62+;*zEzI7mCuv;PGuy9InfCK|7fKuE=#u$3du<@?iIV zq?>Dw*!D-BM=UJf#Sc-z(S5&c-MB8z$wxloiDINQB;9|?B=tF}>z$;`a7Vx= z?BD}(q^{*sV-a0Q+Mj|KVcmF#O(}vehQ~F8*~t&humCui4~v1;Uv78S7gFPZ-znyx ztnzH)UPzsPvDG_wy6HY-plSMzvmu`6drTf~ya*ocx}OnQ(jRidefGG#Xk=1kKjvuM zNFge}v8xKJTwt)wBNDIP82ubgsNatBX6z2R8|P^05&Q?;M7?z{THE)-M^(2oVEr^P z?9kn%AyDE zFd;X5U6-@&L~&6~H+(AEVqpq(hJMmXjdQc@tEQy4^g=sv{X}A0YY8NKxwi+?^d?Lk z@2;9wYXD{=nGPu2+g}AyZ`|8^XJ^LB7oT2B)vV;7Drd)9n96@TFq;`JKs%+ZIKvL8 zq9R-&ZpNM1foEC07L3aWe@k)yj&w;klBCLObww}LciWwPK620fd1AKaIlFKBO*=0$ z%02pK4kR*NQg=$Vj4>l^ndM$lI0xEQ`>RiHez40L++f0$1Rx0xARifyv+FU7HLi%6 zmNlPEA-%fG3|tZCp*MGxhqf;m>lV%0Rgarc(Uv@dM&X^dsGvEq6RKd*mK4ywuOjP) zPPq#$+qTl=dfIgV(lgV^Ndl=gxMtEkcq_G$$@AjaSaqfxs+~H1ZXglLm0rw~+%T{T zpR_?Jo#NlZUk#q}cYv`+VHp83bFp}Z0p*Eso2mh_g2%OPX|VwbouW`$E6ZLxQN37J zJ;w$eD_jw=t2L}aN5e8x0ts_1PXcL|uEtj7e25`V7{0GFdx<^Int510`K>E`=;{Q8 zV%f+WlU~g6EfN;N3EPZx;W+t-noOHNCMBCtJ?yTmy>iIMmE2OnE~#vSs*jhCutKq5(@XCMgbP7crP#Mwir0}NOQfPGwgKtdu705f*@Q(hrhtwa3OLgWd+ zVK2lJcW1fEKf}rr(${BW|58&6(GjChS~tNsgV92m z)svU&Yn8* zbA7cxTYsbk=L9y`Ik)qSzT(GE=8!Hr z7I7Dd-AD9Ic!t2JFL#d(N1anA@4{3RudOMR&)7WT=Sds>qOU(ibIwoI29i4d1Bb52 z8a)&EHoP%9Ed3jzX^+|*Sbdu&^6Rjdgn8UDAr~lyXB513CXb%Mi-t}htvKp5(T|J8 z7@f2Q;?gc%s*885khgWO9=N9=yiInpo%RF4lL%fAR`gz1|;X_zUDOla?m;o1I!LM2%F-nFok ziRMdVJYD(@oN}?JQSv{b__*=eL%nDFg^ob%_iY{#{m<)w1Mi8?bXkE#d=3w)Q2(*+ z)KyJbgnH!ZHExjZ`C@azteda2T@-r9@xB+_lt-$xqg!S_^0z(@*L%SiQD0`eZbvhD zHcss=hNO}2COtAB%Za}>3oZGVUf(6tjm%Y*Jtj;TB$)d!bUtz#ghPD75@2mmH~@bm z7RHOpuf%@$@VsQbiBCrw1VP_omL{hT!L^5Pi0D!OuDp5_=;I5awQnE#3MRp~&~4w~ z8!}hb3Wos9Pif&OW=8v%&s?uvN^71a<8&35qpv@e1i`f3-FyKERh;@0w55aE|!MC~RiIo4B>zodJelnxubkQ+;NGI-5Sq+?UU z@4(!u=wXl=Lw2-+l4vh4<)if2m?_Uu`1i&-Fatzxhl_Z)1U_p>#Uu;VDljCQ2Dai1 zwUG#gUWoL-i}=AI?c%y~Ut-I${Kh1O)V%dTBCH1+5; zfaT9e;hit^>?H{)^N0#p1?78T_RrUC80)deEznYvZ^D9C3tN4(tHRp!u%^wcV=4l7 zfv6?5;r+~*M8HdiP(n@R6*)|;l41=Sr`A-RDv_qta#f?))N;+a*c~v@ODcoD|Dz1Ysara93JBA)ht#Zszh6+G3v~O zOiW1#m0ltn`Y+j1K!VT?vS+)ZTAU*sWrkZlS!482Q=bj#Ew~msCtr3qwX;sSzz*Hp z(g!a7l|M>m?DFQ>THB|k+ zgjQkZMjR4L?+J}>$Qui$bOq+BhBvC(c`p2|LTi7*d?^+!9}SA!}IualjjLpCkW<&^8= zHO?-xoI*Kx_gNN$N(=ckjMO0-{yc$)(hRLj$~{6RUudww)WZnNLlk~9ev~M+gB>97 z(fHPfWb7q7vyK_|a$8x5DZqr-@<*FGY!6@X3=>KTWx(5KIm4JoQYjB3jNGmM2CI_? z(LnGliluVCp<3m#orPhx!2wo0GS|H!s3qLkaA2mRpGB;+liDKR%W+cV>iZTLvC3tF z)qud99YMaZzm9FIC6=FoTvz38h0Y%ZsGVh%zx0p5I_()wjrpj*(N-_@;3YJXGDLtQcOmx>$p*QdX`Fi^`TZzJJ+@h7d#x!=Cb@uvVaD~0_%AG(B?vK3xO3C{!B?ppd{yqXBZeQ(Nx z=vk`?+BxSQAinqAQ_7_OsPBOeSjc{ee}j2kc}D>`ACmF3lk&9}PO+k%$0huBIy9{| zB|GM&BJ~7B5E3rbHke|2I8P2c#KD6uw0;Nz=<7-cg1Z2*tt|% zu#|atJ%+JXiSj=4MB+3#B(L2JHy`=&{4|5Uq+nsKN89xQV&Lck>giqCQYrMV`({w?ss={&CV@4R`0} zSG;0w$%(QSP~vCs!l(}sN0MCNFAuY?ylkewcg0^a;n`Z`$;hV5qd+pOjgHF z;i2iUFMN*!STB@zaEK@JRl*Dy3bych$H~puAlFpTE2m@_k1G}S|1}R`O){^+cQp9P zVDiMWd&Uzr1aH{}uLe=aoAgHKLl{&>@yHY|NkUdf%aon11xwiDd<6f{Ffx?>jIXLC zR;fcFwG?y(ZNPOB0N4Z{X#Uv71PNej8K13bieTYT4K|g?}e5DHZz#_j&7T!SAy~B zn^5T6(sC0o#sWfMLysg3BjLtaLg1u+$x_E7yNLMe{1vz5EXsQ=5}`Z&)h&@nmvp$c zrd%q&Y=S+E4y5OIT+(;o%>$&zw{r~ExH`%~;(N6kMt=j5F^fk$eyvtmy-(m~xs!sb z@r?M@L4{UAlK@{9W0Wy4U6ndptK4aTFPX8@I2b>5(78R72dnYSBpAQukb$(2#PO;e ztgkinsyE#|^tCkGNHry>9kG`G*D7^yWL59B%&G#Okt@~<$Lc0LXaUyO6?&CW9n`Q3 z`s_j3)im=TTVIE|!It)Ik%w*PmaF0_4lydr@Fwh_uoO{vz4`ofZOA zO?S_Aoy$J*o>coW4%U&?i*3kd9%oMgO=vgpd2_W1jwX0~1 zcgVg!jfb*8@;-J{xUwJg&;V_&+!bsTw~9dGKFiP(W=*jd=G86GzR{jxNLX0_`SRmG zWQ{(Yu-8@qFtAzse@8a|vsmSS<}|$>+&)z+{}ZV>r48eUv4Zyzp!H~XGYLPDF==8Z zf(wvgL7j{VW*z3T2<5SSszu?LJT;T&OT2KSv|mVRRIn^4!O;1Z$pz=ua=PvNH{)Wf zXvfzxkut}Og8bR`(;wog%dw_~$afzi9^9$`4G9Bw1$h`kYLp8+)%h_(s1ioZ$BYD( zok0~PqXkzZe}TsjBHlA6V%2AsD_DQHt`!XqKNXr7NNIxv8DlgGh{6j*+rX`3w>G8S z6p=HWY);>v2>Zrwbh=mT&;%JQ#UN#6LtnH|JBCXe+ia=AiIE!O&d;;DfgYU!kx+|P zw=tQ%wP7AIWyFCQ3t~|O#Ou6u(fh`u>1+%y>c;;DVz9Df%Z$Nh_}CebhgFe^*J}nd zcxI5dn5xp?3$(kNjheVmT2bVgQS$HZJH|<+8wyxSS55iQ91a<7ZT$Xr+lsk?xD}@x z)_-ws&yKu7*glkrh+k!HC3gPQvkCG z#F$;sUc3RNX8CHX|EiqYg8POCjiV;n1Ezy4eZ84!wF9Kf3sr_6&(Vw}t@kd9`Sxb~mz3V9`x%W={2>MxSby9}%8P%n# zHG8o?IxBebs}`%jSxu?v=g=c1?2k+|4(FSVH~_d2QZQmty)gjRph>Yn3nT=&1P&uw7u*W@HS;0eE&FFR0um9phQk58z#jN_Qj0A*hiOQyB4r#=EZ@W5zog7)*`{nf2yYh9l1C{n! zDo`BVSI9KaQdK3`<958iTf1a05CUeRS;6&BkCIWMD(o9LG%^NL())v5fQs^};53aF zuEn4Usx(J>c9yw0gOl3xV|hQCG66TO5CdvLtLsRFv}w6JA{^|9X{rcf=eS}Dk*kM0 zEw?>EX%>J9uNyD*Y|`053ujt^E##`EDe2pTyyuxv@#-g{!$ZG-W@R@rMKb=f7@AR z;0E-rI_w$0@+cs{4sb#-DBWuUZMfWEd-;n}bMPs81^04{z&WCOv2X8737_z&>fG8> zjVrT-8-`sykOKGK3knPc3hXJO$f@3=OP=puIF9Zf&~#AE%wtfncpk&%?D7#_Wz;nErTKnw=L0b zw1EN|cXxNU#@*d1+}*XIaVZ*icW>OGad&rjcZbKh=SI92XJ*ceITI66krk0YGV|B^ z_S$>xwRnE*liB1&$RydM#Q5(^KBDqhY%$H3Guru2Y}P`^&Wq^aPaYh=J6cAQIi#Ab zd+Tk&JrVMaeGO6M3D{1PdrWNg=ubUBc_Y6rP5i4iQN}YlBSNlI;;-5KtE8!r zjTRIzwEH3&9sd{;dw45vYR3-HA_f~O1zmi{v~e8$c7n75;9lR4n(^osEUwYPK%yt0 z;e^NnKmi4jfW)(|OV+z`J`%d25-7gZmn^U8guC1H3FoF#{H^<~Ym~&Ns*hwj+ncMx zs*h~`^G=cOe1n5BWWVB`V;u60JI3709zcag($XPlcW8gx!3i5i$kG7YV-A`wV+cmNP&T-sVNC`@ODw^sj{Hc$#4|2tWSRESn{S+ z;1hE}7JDfrs4m&PhXAZbq=juzJ1$3Ue5=46X1b?b=>EoCX?NA?9A7eso1 zBAM1zNE`GOddw41ubPO%5@EFH!(M|z+p1_|t%I`rr;^d1R*7NMVJu?hx@H*`s_ zECsDduWUn_A`uy5U+M$qO&3*Gr6WmoDBL|vx~*`#r?ZSn<4z!K+P;%hr=~&J6w<9) z?txq=>k|RH+S2qw)gyg|Y1wC%IXJUMXO_Cf)iWbh3p=7qGM7@Wi{Zg5bMIx-AZ`L> zG00X>a%vfi(ZH6v|75sdC%M&7wtS+HI$wCd~rl{p%J@r)V+O9RuWcD zOGIm@B}<^&D}nRVHZLK;W(z|wdtew6g(;ivR1+F&LkhE;I=VNf4*lH0o0=7=p+=f; z8=l(Ni4Q%|WaY!JVsdEi`I}=39Vbrw{%9RTd){Ns!^XGW9RAqVF*MQ}Ox2c8_cEvL zQ|gHCMz?#4c_e}3*U)k#{E9YI(E9u`CJy`UZmxcl=AnNqan)gQw}q0Tys>dlutCus z2d$t`z=+pPRkLcTagIIJpmAkOYyJ$!EH@IHae-aUlFim|B9?M+~K z5pKfjlq~85HAk{d^rcSx#*)?OKbGCRc_VobcG9qiig+dH-F`#k|FEEyGL%Ff!S5|) z(a2!)mPJ09wU?g1+$U`)+hWJJJ=hA1&NlK35-PD*;Ep>4##g>|q)+{FycJw^hVm5L zHb4f~GsK542+Pxi#gitkM8#I@;ZNF5B+bkT&dLZH>zPpPX*7fHWDMh(z0}q0sgl{Y zW%ITZ^w~)6)oy>jJ_NV$*+}WTS(9v2zvA6FJV6jh?uDMaY^G(I?jgXJ{VAKS`WJZ| zQvkZ{YgsiaPc?v{*U>wmcHc{*D`Zg&Swj-;PxyRp7-+|`1-$HtzdR?zAxbJ!Q%KV-)wp((@IEqR8)s zG)|Q=$jl)a>_p@2Zqyn4*a5GsNs(&HZLuhRv+APeYko&ZG=T)#(@Dr9(#>=A@D+@c z>CJ`uG&Q~{?ogiV(tzTb*_Hqo*BeG&H$_>htw}silc$^Uw+dOf|Nf1A*ZNutjJ1oR zx>0XtZpAV|964?Np7QBGj+cU_t%?JdVUqL#y8Qkw(}dHZ{BGjXLHge8YH0Zi)2&4( z=r(VGI0ezoBIyC7R$CZjaBOpP#S`9yWz&+7L}Kyv1!G?tY{u$^~iJENIZP}`$$ zjK@hd0NY*cVSH3}k~K5T(+r*Tk|PuAYMhtM|KfVIww*;9`SIJt>UoA{>R)hPrzAJ> z-+wcBovPeSO~4#7J&N4+k0B7QN3kwO*msAp`HCr;ZR0lYvIf`i$^m!gfLb&3y*_Ve* z)Y(r+X(R4!`$GpYgmpZa9VryokW~E`&r%PctMp2I( z)N(bNp;jl-8`A0aVz-)Qb)VS>&A@;Nh%Pql9Xe*%#IlLmGnj*^EfdJl(+;pRh;pLb#z`8n^$sWf=Ucm^==o)Kr5V%@WDj7MJTBd36CaXYx)4MsE2S*NO%{F!3Th zGyFs4TwO_-4fyn-<7N4G#1sGDh;v;nj7*&Vx1_o9|G!WBZ(**uBhbbM=qPCP`35Ia zK_@2*Gg})ITW1*yCudRX&*(H;XD9l9?qH~`sI7>hu7N}0XiI)Wr6dddEo6ve2np6K z7}pYLHCpgP;zA{~D|8q+VVCtSz*qDmM>lF_I;66#L14;PQhnkZ){lUZrWMSsuk)WAG;ZaoKGX9IjJ>g)zutGl(DLzk3ucnm_szw6K@3(63 z&M98YiTjw#pdn!k%<)Lm)D@1PC28bZRe0u9P6SV{NFvQOSdHk8F6m&~w1&H6zmJTw zQ`lzCqc}`}%Aj5ruYf-phTC{*Ks1UTkNg0O9NEJ?yjv)U0@mz;*ui8b*u))?^3UxG z=AgBr+vs9z8$95G${ku)l65CG!1k7fwTMMq5@5gxq5Yqlz&V8sIi!EWqA=-TeHj)YS2uHq0f?xIm*!brLTxiSq+Dz< zRrA38W)zUP`%1?-XHchXv7_?h;)kpsqm*rnPT@WLIMY=16$mgH6HYqtuZB8#IC+sgoen&Dua>_fRB|zNrKDUdvW6Zh8;LC}_S|f{yD7;nmz_ZfK z$|rvj>oR*xSK9b90vbO6I4rc+kPn5K=GM?^p}U#NjJa^tYrExD1=v~WrC*i(1a87_ zKw{?qPCMcu7bVTn6lq21vhyQbex|va(w~65zUh)uxmk$t*AvfPpxQk<+ZGl2K)ard z!uRZe`?IoJ5tjd9EKYqm_8#7GIw-Akj`<9~pa-lA&|!Z8YbKeL?FBJT1*$jcch&ut zBkin3)wX%tWYzvBv>sow7v!;k1Uay^sVlb2MOBWAP{b>Q2K%l4(ot+OToyp^;z7zwb?F1O!N$eA+zK|U zawPvcDPG2-wvoVl5yAQrLY^pHDxsz)1-NyQZ6;7Y#-O%Q&@F1A@-jeT6hLZ62PEZh z`dBQcDPCS%*n4GikAC~xL$R5}8T#|+VKyl=>qtQQkM}mm)Y2DgzkJ;8u==nuW4N2JT?-jxnVuRR2!Dly}Hl+1QQGuW%@@%Dq@sIbCm{!@30z^QxAy3Ce|V^ z9H*6P`cYw|VSdi;n7eXQ&ZG^+Tc<~0QZCq!4Q@V==+ix>*$|V^^?S zD^Pe?iBIznH3~v_5(})HBsywUe4|UONb1{hu?x}Ir_q~J#48S z-$ElZfM4xhqqEy8U1Mcho`{e`Bh%JBp`i!2=6tLBvK9a0S8JmEz6QvsSTM@A5x}d* zHxp6u&q>%ZeWeYrB6Ae}+W2*i-ZbC?2!Lt{gXAyDQ;X zwM!ZJI1Gb#I5$fsiRDy7o>6`E6qZ##F{n9pa~KsCWn#?`KlTBmDA;RdVVSq^7jVd15h$pYKx zQuvfK4kusiNo3bxuQiVN9T95Z!5tA^BEh8*+ExT5X#CKw zo~Y?N_qNq&dNEEjEPH^-V|t4w2s;9+lf&oQ*au|pIJh^LN-O#aGaqZN5FL2 zcoC3MiIyi}k!ksRV9cn|N)3dfqFL15{dBva zLWs*qK2|{BI1$~0zpu;>V;(JtokZl`^~JQ&PirGrEQp_Qh+YRD zwy;jyMc$?ox9^+#Xx4S`dg>t^Rm6L;v0ZBiXC^6$(P@ZwHhwW7P;@nMuCUYRi_%{C z2yD2Y+c1zld$yZ$fWaxMZf<{zUiAKYE2`@IwUe@k%sQ)Ij%v;0tB*>CM2i)+m!X9R zZ97Bactk$<3}*av7hID-!{uLA{74rXLpW$d3u4e#c07JM68I7yX+eleYfrVUB07l@ zcdjWDw)BWmD;CvQvFpIjAhi+Pl7^OYe6TJl{jiZxIK?cl4wZ|lpKrOg%GMBZPeSz; z6;-Cv3=g_=#55040fmYiMQ1L&a`3>RTRJ;Jas>5$j{lRyr$h1*DZZh&eX{HpEl>E( zDdziM(9Xpv#QPY2m*0}4+8DkG&5}`hT!vxmq6K^R_@A9q2UieZ7e7$Grn9E@H0zY= zp5WdYYmvo7dT@a1dcfk>bVIL2dJYBoig=SrOd(ALFmpAzvlH1M2(<>oFnQeSt1q${ z+oc?uuOys6P!ZcDKANv8oIqaCh4L0h-DR!295`a>r3c-s)vFk|Kymkl<<>zxkU(Jz zvF;LX*^)qIE4u!Y%Vs=8<&lN%HJAMWi1w}o_o0S!9}4>+2iKWTw^$78R}rK?zn`wS zWkL5E&VJy4_O1rkSqjfn*6ladU1b5(4q~v}TBx7PRM@(xyTn-zXr_K`NB33MX4DV* zC=A+|-sdgpPO883uo+jTe*J~+t9|m64Es?Wv@wN#8VLI#4A)skw5Cb7E_(sd#Jhsr+{e6)Mx|<#Nm%&4$U|OS@#Y9=5n+fV2i> zm1bLPd7VoBn@5%^OTn@8*37&kz3fgy4d_)#wF2!_;qa9`WiN^sz!<_1X7KghCp{q+ zF6%g6+@k=zA5ARyWr z_JAoCv)R4ne79xqFU>8%GB@)kNv+X620fpc+m%nElEpMywBGl(mwt}JjNsCh(K|c) z)4`r~t2AH))4*Ix_LQ74bc-_>)0E!#XTS+2Py)3XV-O2U8D$#ksu5$w{uglfPdXBX zNkAO)cD{`L53yTsFr!CCkOT9=2HQp4UH*QuteK2I}%stmT zf;p*d^y)qG~hEyvGFF|#v`BuU=%ZYsU$derZm(r%iNbs ze*nLrefpP{A7liYcCM@mkY|*4$$w?JEtn^_Bwkq+*lrOA`3>6_d^HN1h=AQTKlw{n z?4VF|$6;JH*-@5_7skn-WJ+QjG5IDW2px}L9JHqzTo$!NIlF+`79wrvqAy5+Y8{Uy_ZJR6Og^vyHPi&F_Y9`C{mJw`-%z;>I@ceZ&8c=J)7NyU%hi7U!^E4#VdS z0wh(^+ApK=);A@a6GQ$`BAhAl?fDu4G<&-+MFl_RCZwD7&B*uNzwo-5B1qcI$&B&W zkfx=96U)L=9HGP$dZ^Tw%P1Hf!s2fu!RO$$o*wF;MyG11Ek>GufifAZX^LZE zTiBZ=9$w;^H&9@3A7BP#IgJxRCVQTVW3aCsYTljWOa+&`?OUL@XE3MBprP54Z-NwLaEVO zi;r=yAYeqMg}^q^@F3&!k)^Rg@c1LOJJ<%GBB@WL@UA zOOpTF&?jCY-4PT)*FAU3z&GuownbEtZU#}hYr(!_Z%F)=R=i9{eWiocKpYqCx>34( zcoYQdz<^|s=n{}x(~Azckm&MKYP?ar)TMf)C|SW#w6DZpO(@{D`s#j)`U>`<$avGm z^x?KCzy-^nU|7cynkzpnjLX*e@n1yanQ%8n@sntjeVUj4ulLkd|1%7ev=uQiwXn5t zwy?96u`>ex;gMs&(4ShfG z(&pt*~Q+rzZkH`r)< zSggwoPEs{)Ol%!ToJ>TpY*)rJhwo|}HXZN62D04Q#MoNTJVAwC{_o+yGkddZ4NKKg z!-7$L9+OaRQX@>Ny6gGx5rB5jL@)>1>x18|03)K~C~OFg3Rs0{Nxlj#Lq zf&2>1U}v1TisfF{cQozF^5%28_cx=JrKMCfS_~l#FvyLt>HZAw>L?VafCY6*RfHzx zoeY$=*hagixLYQDP9N-{nmW=N_b4FI6FEeQtd#8d`W6#oTSYeFn}hQf9;6x5;ADb~ zO+Qm45*7v~eb)NVfCx;J&9wlGB{n#llsOjA zb5^FSWbAbxZ{VE@0w~Kq^p5GOHp!d@N#gl)W}&HZu+zlwU((Hx5Ecvnzzf(Kn|Fw%CYF*Pf9A-Y#FlKVeF2C3k<}DV;*ZVudlwB`qnu5ThqGEL&oI4CdPw-$zzW=FSt7l_9fve+;0?0;>m@_`~lcq za5^Q1f)W^@OBfFni7K_~&yI+AlUkCmnrK5MPQ}T7AnQVT+Q%>NuublE3K5mquw-MP zL`{wq^q_R~hQEW=9no$_5?MDc{<|9w`2`up(6+IrWZ_a z94n&DAk$04oK2Tin6C_Mzx)7@8=_1Q={8UwsIc@wTH~L$5Fj_;>eKC@KBi&MC#G%e zAT~>kE|sm>{g0ZrqU>eq<#QW^j^r@iir$qQ=X+UoI_L5- zdw;vQ@cXjrpGVmJr$u|JY0qhFkH_noMz_|vHQ!^^#{_$I=GyxJMiWD)U1xr+PLSQs zI_$+$(M{H8WZPnbMcOrG#kYUk@CwzLaTm8S-=T;3fv*zp@%3-j!0fbk=Ebqtn%{a| zV>6FhW91<|*FFupK=s7rR%{fI^u>0UoV;(+gtke}Bnzmpjb$A(qbjT?ynHD;u%2$% zL@P*ehV1@7>T<8KJtV~zJxgfm5MrUsM&8s+_dhAZlr zg(fuV*Rtq@$xDb+Ey}qVMFLG5V^Jx{tSHF(B!`y2NmF|N; z1{}DCe#^zU0kxJVg~2vIdQA_r!_hxhS|lme5FeMrHRWxRN3FaZlF{>(ECHKaM zTTGUVK9w821Uv(Fa$2|d@W$+iO$O$vRU#6HQZuuTiJqQxy37E1HW{j`eHgQv$KQH> zcsp!sm^4@L**?ZUCIK+C|LE>|>jwp#dcKi&RCBlo@H-BTYX7?ZiY8 zXYqN_{X5C$%*Rx>-bMPvIm-y8Ygb~kx*at8xNgIX(9jNY!i(C%`O^yo2UFSgE8`oR zTFJ@757S)$Yo+oUV~a$g!wQdI66=xN4XcIL2BAH@Wu-tU;j4JRsU~-G&{epV_7okh zi$;2;zrmZ}TVe^B*YYl*9H#>y&C4c8rjrLypTR`qE$ejDQ>oYFe}u_JFO1p5Kex0k z?nFjUX(Xud_Bh411t>ef^V@}2A`JHvQ}u@k>ektuk88CYIAH&YakT?CfjWz~1HXk{ z+xPitoXYCIZj>tmJ5AzwjDm}(mTUJ1neA5sCq}tQi2&c-$~l)Zlk z0~oE)6p67boLI;i?@Re@Rl_thLN;_mS)G{PFY?JO>H3oTpmZ&55 z)N&qLmDf`1q$9d48D+j%c$C8jqg2EC*>%2LzD&bXt2GtLu{#w`T;na{8kGHG1I7V` zHiS~Ui%`43_-61A*yp59ug2xIJNz+$uZLi_R_vWxRi4cVPxR9{H8Stzr&!tI399PH zJZH8v=2AbCy&3o`d`H4hW#AYE{doXHI zb2|tDsQfwuH<5pqS{7~xCDxy%mKosR0iNvtIpF;(%>8q?1s2$)HbO=k=m-bH+8|jW zWIpqynG+-{J6f(l>tyv0s1H^)-r-4zLpfwszL@yhy)KR#vg{rJap zE7>1MC?YWE*XKrQbP2+Wz^tC-=XA?s&SYF#*sQXp{~lwgWz#$;V4u{brg=wtbf$rI zVA54KkzLbY6Q9c}?vEjlN5WB|!!Gk(!hoI!n!Kgs!X2*c1DJRJpZjDMz3NI!gs%(X zs(yPOFg6HFq>;OFUX>2}q;)57AYI;AM#3M@$`CE(3uc+Kd_4`W{7IK#Kb14dl%hMX zosPH``Hj4u;jTo$go)>43p?tLO zub`Y@g9}nrLuOWiRUIm zTObr`a=d1{*Nw~)!*O8Ss4CEV}kkv3wGrvTnvPSPP3CYV~_>&A)@2Ifsr1|3q+=c27M=M zl=ZRo3@#xANy6y9sJy=#ur&0@r^Tc3k)-I@q?}|LX*_W$9-~z}g~M#Ily=mL^fhX! z66Wy*XeTQ%!c!N>CDzbI!)1oI0Yfx^`g3POT@ACu6{4~SfQ7V(O}JH;gZg+GB3a_jF6D*YJAY*% z+nYqlVpwP!bZAeR&3>t)O7fYVq-vfqm>A(;lm?zc7t1WpTht0WV_W%RbdbmQhVid% zNe^E1{*r}IIq!ReKy}+8BC1-BWu!XGZ% zF*d^_tHpb4*92{Kd4mP1#m5Y_nE*OZa`TGc7rDxreLs1jRWrr4Iznuo`1J-6FC$*R zcMeOw5(#v726{>12Hgj_f=^u1MIl!uU&{#=#7qo%3;32nSsaLQDT{w5{9Ii9`pLT? zF%CO4QB6WffiuKK^dxQ$=GYR`MofAkgz*~#XUIzEI+M|{GNz4+lm)oECw9$35H%})=eEM)dvSFgp+FuS-qTF zzhz3YWr+MIUQ0I-yj+&OWhwi1e_;J02{EI3CS}~YkR{^?jpi)UNT9(lw=-9t$49;f z=)e_`ggA8WF@Do_vE*a-^5ECG@pUo^he(A9FowaF>C$9+vo!J?P-)^~B}ZfL)y3*A zD1Eh58<<&rrz6+60|g9f0G=PBwAdWaXl81*bwk(i4$u{S7h>zNU(cLrieallZE{`P zTF3}zqvO}Lw_dZ?dC#^Ovv0M5tPgKiVH&wuGAV9=FKk*i{Ii_VVe5{i%x=Jbcz(}><(LT5{2TYR>&#X`0P5+2_I#CU3M2-w5Q%~%YER_Q)5%KFL4ifznHGF?hT28)tPX8id_i*N`4r4SvPD!K!3C7b+A}#P-vA|LY)XbB41Dr)t}aH_nK(+3Vpgt zeWrnZYoXzECe|{dx>(XB#SBJRXxbx-f#Jc-_if=eCZ~{SDNh+*D1#J?k z=nNcPkrH&l!N%*8wKOGaP-UWh)A{b7ML{~B${-P}OergEYQbH#rOqtU-Mar2b;6@q zKYwh604oBdXCf$yud?fB7g3dyopb0-xd1P=Zhz_(QT_?yZ?U9m)4;l^esDm{Tbac* z)3jVXG!|*a!zGy5&{w3H7lgQdRoWv?7>U5SF)A4-FZeLOT)HrW=d?|8+|1*S?Z zN@x7 z|9b|bN#O}vqAiCqzVqKdLS9#a(XCTEAXw+w3BJ#(GuIjPvkB`z1>I6tzzNhn{Dx!n#n@HG68jTQ=2&;SUc)<>8m6QtzJ}35X8LPv1Hz z33eFvP+s%A!~GH_G%BvStQ0#81|+@0PK!~o!l9i%O<=rk3oL}6?5L=Us;_nscLYIZCHp2xg+A&syfJJiC@ELuwyU*i zSsqkvMIEPpeEkR1N7VUsT7P=#P9pxh0{DL&onzwoPqo*fMs9PNKrb2Hys@4*tz-to!=m%h zWFwLltYNb7beriIyhA3E>XI1KV5Kkv@3`J!a4G<+6N*)wH$`M!30$~M3|p8q!fgIL zW|Bq>V5vlgV&)X;(1;S|@n}_)D~l9N-w>i>_nS8yl1hO>fO4g?SpO}qf(SKxE;mM*LQyW%9iZ$OC)jB!w2W_Yc(c_ToVp<=jL1!>5jXu@ z&ga+d_(0=IjUYjuEAxCW9UE6-YEuFEz>hd(A;&G@2e(9Fr z@-OG1OJzaD+_!T@S3MVEoaQNF?zyu2cS1zrNhpYwCdCr!4v*>`azO#*ymh&{eRtV; zBU3yizzB6=Zt$(0!yE@YLS$Ic?sd$*?Xznf#WFfX4#Q|@y!i4F*s{Z3J#Hy(u;AQh zA9$FUyQs`baCEM9S&z7mYlj6pr7b~M{Fce{uCJxKR93i2{Kdr3&G@%Ws71vNI;X$G zd5b*`MS1k`)vB?Zz1hnR;cK2wP0^kdo=(xxAn#Ar(5!5lS5#1!YgbguYt8bg=T{t! zsKc$Tb^4&RH}b;`y&eL?k-fwg@@Es_$|!5il&Oc$Qc7~WGp8QP>&#fFOMgpajMxR< zt!tRaPwV6C*%VC@z?gRd$5|ahKEOZVYcU z{85)ylJ!ctn2e86P3k0;z>`FFr9p!fVs(o!Wy+(MdQ}rI}&%SOLIWv`@Dwt>fN+)D-I0_Sb=M3GJ^`_rj?iLw(Njv^;rj zox4n)iCtbP(TXhyBfR1zNlI@8Zca>S)TM8%G`m5p{7PYw(JJ6OJCzD}IXy`w!E?m9JXL1BMnze4Z=1?E zzT!E&sp_<2i?b=({S`%do#QHvc$c$x7P?*7EG9bUJIaO04AN>3LB9tEqQYRR@D7<7e&8&7{rQkUaFue6 z(xKwpPqv4VSoAt<8NZ=XcFn_6{MrRJoOK%S7?z>&^c?x!vNybCH z#@eFK8N_4J=bpOahNy>afe70PyrAb!>=PU=7iA_}27AI^r6GC<-Bne(_G!`=x{uhU zrF#0xOG)$)v5QOfL{zdT7*j4ageYx&tv^a?_O;0AJ}@(egNZ1J(Be=e*JA>jm%E} z4B!qk1tBPY+QP%2{<~xBKV&QlLe_RhR-*3qpYeQ7|Kqq!%}Reo1@i+MjP7jdhpRt= zD=+}vKFXSNf3dIIz_#q?AEtwJ%x;UJL~>eLj(wZ;2dZ0^LwTM)jQ4xB&cLkh#$%`H z_{r1ww@pz;xy+l_tQ8OXr+7(YvD031k_r?nwu>i006;YS7A3e zD@nkhCDqiST5lasOXleB0|$iz`Wtf(y5GuMi(8Yv6}Pr9asWp1Z8e3OzHiVV>F*G2 zg{3BR6QTQlGauI26rHiB9jNp;%X(DfaF%5JT^`X|zdQhk25o#ymCD!Orm2yjH%v7Q zZ8t}IhvLoJcteWu&LPy}7jd_fRB@Yx*dwd5jUH35^w%ArD`92AKl@n85I zwgnMpOZgCNrUk&JoIdj?)pYnZ1LDcUD6uq~S;35l)78DynW2vy8LeXb);VgF?RBwM zi4tlb&0Lqw7KW5=irIq&Y2!Uz%{Ntm3J}Tdjqn(=4;LMnAKr~%PhgQ=cSkmJpofwQ z?7(1VNrxtrVp)SUv3effM4vECx^V0v>Df@4oXci{Nu$6t45e^DDl$q|np`W!g4rJd z*huu+2U*qvPmm%PFk=l29}s%*dySG4`Wa|-x?bpe^y(;>NUWRXY|0!CzMn<_@Z2R& z*NqNEbWYdJ7S-2${{HE-><$4yPtv;*FyWRHCt|gf7SRCK4B|z&X7*Y3wwc|kPDXO? z-1c#W8;iA*w|NLlbK8b0bZ1R_V8oK}@_5o8pvRdknC7C=oAkZkCyy)?Jm;!sgd?M% z<*QIzxja2#+Qu$pFnl}eAQ!b9+P)^;SAf}s_*t-a>0M?8^E0=kywk3ffGgY-=oXoO znyj`D>z8~k6=nXElkL|p@p`l}`>}yh{sR6E{&l14XBADhTSR@H@Tl7JIU$_qr1VA4 z&ueha8IhBeoGn-o;4R!pxJUlV@nF*q(>FKwu)Vg&yi%vNqP4N=E zOf1LOJ0-{&qWb<9S4eeXOKD0XisEK&7#6fqnB!Hbec@vvNDiTOI`&o6*)$jAP)}(E zyE(<7;1wcO`1&=ZSsq0j>70f{g#didDQu;vEXrKj&D+fE!Q3Z-x{@E^zE^DZFv^xJ zwq?}kWpwVj4clI9!C7;h?Vy6hn!QW@$^$}1e!VF4 z0Pf?Btm8V(5+&nq$Eq{K@7Kj_!#|meKv2rF^Cxp*`Tl!=O*1(K z5;qk&RVkI6X!niuV$v-&o;FN*RxE+~j!4x~wd75aN~u69hFZ0Bwp6J=jL*$~o%(7QOz0^)spoQy9Ky{77he)YEjDsp$SBFkwtRB89_Vv zh+KTEL>p#p>##ZfJRi`#Iv&&2cIGM9b$LCWojGPZlFBu6zlv#z<$91IGtF8vFSsCs ze>a+^H>AbPCP=$>DfD)h$Y;TwLFO#tCgD)`n~i1{P>%ovluajTfjGedF8v4;`kaH` z)yf4}ukRo405qs=KcsrCB7rx9a!&ga>nXSwM&`#`%;bpbD>f z;0)e{*`Wd!!wk{1;b$0j3e`eAbA!ZR_s&qM`U{B=b3A^V=*)WZkOna7z$n+C zs8|F|4ck*@zBlB9x{=;=V-eodDLm<{!PF%8BNV-DvE_8+1BqLUnfg_w7Fz=i)BJRq zE`~T}0vxOsk}hw0_Gf70NUao$gb;bAS?B?Qj^P0)HRQW^(K`3CI;ZEtI$x7#)?9`!Sk8ci>am z??x;m({bkOr8YdsS#`sza`cejam~94{o5yS5hHW&&p`|V2gj%}ZR2STt8&cMOg?uN zBHr~J+6{X)rcKo+JD7*-!tjQS0v7B)fqVlLmqTLahkJ)Yv4SVZ>ocMJtKY%#x}h$H+W-W#(2LlR*XMsWMv5KjI5c?rg{AbimL%-@B~YFb2;-s z#iFE{lv&rGI;-MVYqM60`?O$j|BGD1%ISB}(N-?QVml%1UrdqAb!t{mLQm`tl>-sjB|GYLfBi-WAd1N zS?kK;TQ0o~Hh4BC={vp=Z;j>Q@TVnq+yms=icFz8(lPCF8CNVz?vd80G%1Y|AM2>d zkXQ*He}*nn7i83gk;7^^cTgr=)!No$FQ&&Em0Hy_s2O14raAJ0e{m5B6u z*C=UZnh9w#3^B0eT@E$~q)c1gahV9G+)9xr1nu<)J?%^V%@Y5XYNw~E%a?0!c+`4b zylLHTV6ErrB{qDz=`$Utj`f$9lxC=w&nFJ7#Y<+s=QWj33^SS z$M7rA?$O5xxsdLDD9CxQ`L2(@T|tD8cvkgo&xU9nf15_wTXj$yZyRr`g?v^Y=U5lx z*d_RpyPBONVhgmsViBTySoi^xy)R$4f~}<-mPzc1d|@D*djM8xw{%Ny>q(Fnu^21S z7DZRv6m%Z0XhU5j=;)bptM!Txo z%kO`l)+Z8(Et(u-Ym=XbWG*&ePi*I+2!JMLMb{jJVWrR>6mPkU2@*zH*1;g_M*E{3 z^Nm^OyLnDGV+tqoQDT9kST;*dkP#Rkd5EigzP9OB(~oF%4Z_>NAMz^Ms69SNT8YDP zV0=_wJZK);-!+>AmPN6i|7xpfvAKu7^Qah3;*0#c|GvF!L0TVDEz9$(eVK$apD$c_ z*@&}@4|KDP@>qXQ%0HRe-C19x8FvrR&f^=goz67sS-!DW;u$%g*E2Ay!&u@vBXd>s zN_i9X3i2s#ALgIdE7Qzv*NdARpR*>?FB)PfiY*lC@8J}-lVSZV4r1~Xj5P?Qp2nJg zoIn(}BgGs=FvJk_?7&|Ck>Rf*74WA(+ht1e7L@dbm8ThW8{E|-d&1%^BfLl$!bsRX zxNHk(lPCYsk>roSKs8n-{}7V&RXpM%iSsKV?aaTm9@^EX8e*WS_4z^mp(g1oisdRt z{vjvntBU2SNB*HF=_`wMPn7a1PWI$tV$;g}G$D1(wU-IU{KO!2?G_Ith#4ZF9NJI~ z<|B#wC?)li$GT@qdF3E`dKu1Z5hwR6CjIzPGeyB6SUu@`_0IBtC4tK@s=y z`2n8>qLL}E3}l}XVu2a4Lm!H<8!Ev*oiguLv9F1-uRmqpHwt$5QP(g9V1`ci2QlpR zh-Wq|2$1|lKRzJaz?m%OewQO&2#x-(eYE&YYWlBcs6wlY=oB{LSl@$M>8bCqB zr2rL ztf3vLqa8cvC}X&5_N_ zP!zHXw*6AYRh*IGDWuz;#nLB23dxFFZY;2lClwbnB@wp;u|OhL^7DI611@!eMh-{YCU66ahWK}IXF{;O-{>8HQou{6cVPy$?LU{&kxH1Q{PWLua0xqcQq#f6%_YP|`3L{*v@+iV_n<{5&qu1Cqn3pdUjD=5WT`(VR;T^~sQDK4S zcS1vb-3q5_9mVxmsckTbv_T)8Km=0L<6$HMIR#T19gFmruwbR<6$=?5EGZujN(1?P zqp@=`QVEZN(D~ocFlusU&jrD@%a{F{<@VMXGG@MdLY!_%JAjzlrBqUtS_?Xd*wIN- zGj3`_a;kBL#QbvPawh2rspSx4wmFjXAvd;m3PS{{6$-k1F5}dsTJ|8_1ck(23Q8;H zsHEWbiE~rvhwJ%20840B7PMT|Xyr;e=u#+BG|lNnN=O^yj_kL zVHbEj?JGaIbO;d6&UGtn78lmeR-*MQI@II8*8FPWe17Hf30R9;V}4ip+8yTrQ8UY$ zD^m;*#hcNfQoCbn%{Jxog@PwVE}tzKFD_G}E#3ED_NV?)+l%1c9)a-ESQ7i~l=MDU zf;3s_)R?8*psUwUX|^TTbc#FKm)(Yq)x<_Y6xW9R*S_)6>Md? z_65OdkYh~#QOZq1g+Ti}AbV;)TTtAI}33L3mgoT78KteAL?qj{4US~_i2Feod|x9{s#O5N%&bE7inxjF<%iErG3!RP=tq)VmG*!L=MJ%K)DYA z)FQHqyaCsa2~oO7K}sB`Pu*-t3%IqIx)3%9->H|;sgP~u#dyv$>4{q%?!QOc^*QsCcI^n9CEETd0 z;CmQ{P#t%*=Zuj4kzy14$Jg?&Ur0^wYo3I2)$`Eh@26{B#go7PY7Gv4S4jNSRC)iS zrYiH_O@S!*niSQ5I$o{Wx^$A(y2q#*jaM_ z!%@k)wk|WeT$WaJzQ%*DLey%kiE0ujBr8$fTOe!!Yg8GXQ?yIaggv!3kr`vI^UH3n z?Ps^TEpVVi>KJO44cn7cfOSx$h<1Acw33c(+WP>nus~dtVXF`N%QD$8LvfAI?gI=4 zX>}W1FKmV-KJ^Gne;%a7Tgs32b=iJN8D^7lb@}kdTy~m%U4t}fJ;)zTa-Y~69RBxy zS_nfCqU*ipK#EATLlNx`URpUxDc$K5@~t8s{5ebW%*r zYpjvS6jUNJE?67{g#<9-2qqNb#kh^MPJtlK&)uyp@Ex&QP4Qxq@E!1%i zF-4LNmG?(!WcBIWESR-aLs0;fP6gt z;l06JU5;Bz`oasuDcEaJCw4d$eJAapvQq&sV}3QuOiYk~u>w;^MF!U4ounfC=^Hfz zg&K}cOffnv2NCXFFj-^%-GtD_$nid~y0ok>F7R<;s4#!*XUe29__RvqmAzZjKLRwo ztO$5-K5|?A!|HftK=WISjz1--UcV~w;R`0>U3#|D=C9e7LLx{f7j21!m z4Jz{#CXb>v`;<41b>xYBc!B>W4f!w#b-W&VhS2lEoX%pq;dPdw5Y_qZMLAh;`u zIvHmpz16n((BG3~79iMoAlj0-(C&l{{vTZNp0>gA^m8TU-G5wZtMmW+jLAEFPTv3f z3#h8@=b1z0#eu1_MXf9d49gQ;D}Xcl(?g^st=OmpZkjcVMLqzr3kq+L#PW;$C1fr# z2s!+D?)En1@`{4N_((Fl+^7GnI@^D||9OEGfQO|*1r{}BOxfn11=jd5EW&NDWvOoL z8Er7NmC#=&myr0LpC< zkBQTBq+ew;;*RGUwI;q2d^;g6*PZp9E;Nv^m~r3%!e=cyfOP@z%I=i_=CdWcxc$$w zcoxUQp1@_Qr*E8SEXnYcnt4+M{Sd$o>!!;4Bsd<^q7s|!A8SA}MxBA$2*TU?nn?9- zQ|s2?ali)k0D&hSb9EYX`9Pjjxvb5B*kWXNZPtR12HBcPm9pF*lw%$qwdp~P)v<^= zt|W-ngkcQvKy>NGbeJKk5j9F(-DSQ?O;@}|k4tAd z2X6khX{T%$yM?rSMSYe%EqUA^6#i8tI9SIq6tCu(n(zPDE^heBGK`4q7a8jSQXw~m zHhgY{YHFK@CCxaUT$1j5?THa>8$vMB3I(9%Z_q(#y7X@;DplirJ~5yWR=aha%lytp z;l2_@scD)HiN>2F6Q)(MWgb8ZTA1^yH2fjs(E>x zK(pPEh~zV}SNN;GM2$jcYZJ$0a%SCoDrWaMQzYO046fM|GFuZyeFl?hL17-+t;O5y zL+tU1bL;4KiBAGv<|rs|mLS4Of5JDI%lQs{u~Hpjm9`i@Qdr$tMWvx@poubQiGnHu z0^vGNjjV<=Ou0n$l*^PQ*BvlslDBRL=6?AzG7bLgkybBC{x-6iP!CGg_Nc=3o`OR+ z+PeXLYl#3SKXeZ<_qKhS?bmr`)zpzA%|E(BcdxG0AnwREE=DR3r0|b_LCOFr0uh@} z%w`7ae@C4uW@_l->SX%=C0k$UqpG6%eTP&_VGI*EP*srWF-l$lt5qH|ZZuO>vETq@wZHx*ulUWuv{q1jKFNa(Lt7*qOd!0>IS=V5nk0DaB?pN ze_DLWL!RI8porTTt!(W^UZP1!Vxw9MEo)fW%LXxNkz8BcWXluf#)H=92Hl}fAkYi% zqJT1(zBfwB(%1~W_FL7x3c^-w&89p^{Pdd0^;!Z??`O<9AG|U9W3T}CO5D;7(=e_y`<`yW?}q+qJVV0sLScQ&v70Ksygba$ zT5muQVmffDCdrjtHdLRAE35~;Za_vvnhaTzIiWy{h?jB0t$oY^DpWX3%7V_KG7m@m znCAqSM5X1ie%kpo{MYxfoyIIN%tOyn8B%D{awCujGU6okM(l23%8 z@|!eK6QQ`o8^RO6|s zt#ih-X?J%6k=~(rOc&ZgFg_V=z9bVU^iGSP#us#Cq7m1Ra9HOnfxb0iFG-016q^pV zI6n@fgRfcb2gPPT^2^vRL>u-Bn0e4Gz6>2ZkE6Z}k-Bi_B1|VATz2+L!2zje9vDrk zoHFF)y6MMSP<^qzA*MqCfAA-yT`CR{i@EFV?OKs+exM-8O{HvESC# z{0Bcs705@WJ-VTuW)j5+QXgsabITt=-z*1OS(<|h^|`W!9QCQ*nvHe1nkODjuuEF+ zetkKXgk-;v?#8r;OOeZewK`~VbTWVl%Q@tlC@qugrfEO>27_)Kg#DTe4H z3e`^;+{O{Qwl!RpL-dh``cO%G6hicQ6Lb(w8k#Z3 z_c-&t*7d>vGQU+oz2mRn{!4$y+5w-2NSC|YG5r<3J5l=ogx8l-^9?_5v!wsAYE=F& zZ?v+ewnnB-{~^O!Yomyx`lUjEjh5?(R8vt=7>vVgMmEXDE3m91RV<#?0}NS5cg=!k z-ZnOyp5FW|a@m^ig$aKB4>Ry~KVh~qFfx(FdBtgdnB_Tr`>*7-4dn-wC)0Oq zq-E-uS%$9NT1{(hr6WD`8?_+?F1zSAWwS#Hs6Qn|!a_}hT(jKRD2eni4b3nkyLmYe zJr-e5Gm!K`<;wx`kSujE6R#ajQChoE0~)uvJlu4Vjr6>&I=>OgQTjrBqMQXfrCiZo zrGdUs+h>aFC^)0_PWuX-{90>ToJzt1%aTp2v|1uBqwzi4%+lZDQ%bbxn5r1UtRNS?xclU)QaIoF;qQNj3tuC)M?xn8E-<& zaEYz+39fdRsn#7`%&rC6whk%S;;G?See!P`tDslUq64cbbz-jcpt#m@Y0{AhP% z_=ykwC-c+Akda4DGT+GkAStQZZU@J;8L~W2X%%C>YhAhKtSr_0)D`c(+FwKPe#hYp z&z>l4ZcB8l(7wA$Uo(UeMowjzWwa&qZt6`nGNEW!zua0%d=y+5d|V+@XdD=aT$64@ z!*fWkibB8`VvM0cFC`CUeg<5IWM*n=u-q1J-9TV@W_WPA%KWDsOJM~%4?xTj;`muY zdhS_TA85`Xp;=@jVR4LoGR3{}yzW}OhWZ>AJVb;#W{j_fD4+^uF3@fs-Vl*Usvb*K zDi$|Agc__cXpRDtbZ#Tni>?B}Anc+X_1d~w8CbQ9-s3!QC0Z6kt*4|AwE88dq(nVq zr}YsQ=2U^8&(sfHHjN<`z#*Vsiw8%j)Bi=Ej$%2UcfBA`jOBX86+%`MOI6$XF-;PJ zw)CKZ6rxI#S6Wb8Eq1ORrAZ}Ok$7}yuCvjcqeP-KGNT=R+A)fn<|s-K?G0+WOXQ7= z3R*!^hI6A?_gM(`)i(LAAUkGFYoFKL+m4*l4s>>jtTlSp(VHbcH4@RXyr>r_9lt3~1Vi+nJ0tcGcKYzg(Z;NKK&C*^k1 z&+h|zIr%k*6}r#YyXbFTajXcK^HHj;E7;o|J?OP_V@S&L%|o6*_~#p-(JO_^Wm-y` zBYm<8X0x#82lUBwCM4;gxIHbZ!DHH%q}R%inAIIJ{)&?bf?LCAUesopzkuH;-;@vv zH1UpH%}M&)hT=NZ)*U0ckgu*y3s5C{`A_cAV79B9E?Wnm4%yfdY8*h46tnR0G z;{8Zy*&}HC`ge>Q6t_-s5uXX#b829rYLRGPr>YvWox`hdl5s;T|1!pHXBeV}>~Fb} z@l%TUB0tdlqXaTQ#VNmY>6>!EQ4jr&=~s?jNCLz_{oV?&Yfk=FaVS68W6$3RY9ZT8 zA={4pt@==Y!caN)L9sBs_PexSpF0VBgrNLzuAq7_{%n6GeAZn@|5@|gTN1MUblv@h z=Lj-1WE&ya)6DN0>od>gAEgoS(181s+}k|&nul!1hIn@GK*mCUCNt&a>mc%wZSFqi zOuy?WL?3mJ!_OB8!e?c}WlH|%IWGser7czl>bz*$^F+^?f-E`_+KWC)U@SsK4A%9X76T- zG+4ktpzsiA^Ai;Q?&XLp{NqsR2gtphCP=e=v#8^YUDSRQ<1M!8k&A{SVn$|Ko|fxnO7g zNeyFtdg9vtI&1i^>Q1EoA+Eshp*DbTC;d6&S(HFB-^Ds- zZvZbc=$A+y-5-Hd=nZBY>pe|i2??l=s&4h6sl%IRr(J9axy&|d{Em`1jAb{GsxaJh zY|K=&PjZrleMoelFT9YbFSe`Hl-gLH;r_L`&Dwf>6g$N%1y>F#6z^4N>OKl)j1-t3 z=tyRsQIXT7j%$D2L9jZtI7BLVo@|2rW#Gk&8^|qFJ9W){5(k3t4!k z0wd`i+49p)y4TVLs2Ix!p?hpz8XHp`${3c9IK?EB#q%@JnPVDp%7MO?`CeSSsA-@6 zlWq?tY)*`fl(_k!q$3gm`E?gEf;I{k6OK^I&zh_21gkg@a|lzbMe@t8nYoR)4!b3_ zmk8U*EuT8?a4nN^{d%O;9V<#7vx=Yis8m){c^;B1lFmSDAhZH)(>2J}Q|MOZKvjI8 zVXfTGyrH@1(1PBI%C>b=1$=tP32Isy4*`kqNjw)=M1FAMA%UUUTW>4Z&$!*A;Rxu+%t?ZAunS=AWqstmkk1-X+D)ym8lRC2y-s>}o^s~}tU??$$rlesU7h{i9@H&>?@ zeOG2+gDPU0;0I3ZXJ^ZCi!9acvhOx1DdJiTPIiaAo2_dL3x&9?%l2TywaH7-H0>)7 z@T?~twBcEdV}R}6M0*OHRu-^E;=;2Zee`Hm@a7h~N(S-ivk3~OgV~_6HoB6z)5@E#*I%0=QT)Cz06zCc z|0Eo1&FR+Y1A$qI-Y*jFU&MlR{7F<_iAN_1w1Ygg8SD`bLBx4gvhTh#JVH4g4#1p^ zFK2}mt|q>yIOB!nkDOk{#!rkhjPDRRem^5U2aM~y!>)qp3JeJnT|ItMd&AIrf`VC_Vpo_Rz3}f$ZH%!p(HC7<-Rh!jsf<%YTwlJpk;XR3Te7=q zl$d8d!aTBSEwdjRZV8!g5e{~j5IqOjU5NV(`1K8+oBIs;^$PcG5XA@`36%sa-F%Oh zNs`$C<;_tnVh?)yD8bB;M4d0eI2nh(vu(!5l~j!Wk{rD<5*CtEN%T)m*a{*eEGZxL zml(~QA>Dtmy3JL(O<{3r&v;Kwnkb6Ls2KH^9$lLo8DH4<2kisgNcNkoZhwW2+Cozy z6aR=!8hNVI7A@YQ-6HZU{yWiki>4)R9aQT(dDUxa@j~!V*J$^)H?I1V9j^V4?C^hk z|Ch6OvG{bx{kP2{Rc(0`MZ^y|O${xzUa!6Kf;`*VY6_2v0yNkHG{htf*@=2w1IZ5Q zDLb^k5x;~`Dt3czdbOj%!^8cDIm~tGn%A&>mYu!K4l|j}4>M1e^zFC4V)kW4K=o%I zBuv5LFG1+*FyiBQ_131kq(%;>jOzLV={Jc^S{Wilg-v7=+I;5|V_Ixhq}!TQ1b1klyHP!EAW!>+rI6`eK;{X zK3qZvqCj2>QheK*xL@ckw|wJ(ezVOujv+_xGXdl%r_^R?Lra)lv=+wjcKKiFE1 zKl2IWvm*2HvZ=T*r_SHO;B=48!f5}oqPizZ$X|I{NH@bZnn{(m^i<|*rKGi&g2Vt- zjHC1;;i}F`Pg#3)Uuijc3}MVFs^#DNKL$jc*2aqu)mu*#w}kFInHwCTTe$lOiGk7fq{z z*yb#srZ0{mT-9b668#m}T6v15w<(k4(u1CKmsof8C3~L3EHKW%+I>z$s(R~EtG|LT zT>aszl10BKo*VWhD5U>pkWKPc{PCPq4Vw2SlS05+%%t4NKb|bBPu*T{Chd%FCL5o1 zC|T3QE}W3JY7M|`I<8bkCL?Ir-{bCMN=?Bsn<2BwjGPVJY0t8n(X?OQDpcFtsWs<# zk9CaIgXswPD8NQa{UiKqHzDyu&gIVC2xVrG3=%s#6KXbsP3vjq1S_AokzWQb2}!2zeYI>y@Vu@VGZ`Lu39DA;$ z*nnGGoK{B^9^eh)wFBw1H^nm>K`j{$mQ&_w9SUB?T6*N|zQTK%H;XWxUVx*oolbv5cNdSD3A{|$u^QYZf5ghr z?ZbS%E8z{zvIN2#1FLse+s!X;nEHPPD_9FA2^KOOExY&)UgNsUwN%a&YS{Yq%uqWz zH|o1GT5}Gy7;+HNRWsaUh2SoAMU0b*M==AiLR96}+;qtaUd7JZJNmoY#ZUnKVumX> zZnEAb)eEXHMT#1`IoVDS6+rlK?SMK~)EYdfh>MJwUhz`Gqz z7_e$bN-a0`o!oR#a%KDHxuxy^W1zbcCh3tY@79fs^k9bsql=w#ZzRn=uDd3^;%E&B zyHkm;^E~57X{f{$gF`8`CLWVXWjfk~1neUx0=bN+BVSt-8bOh^Wx>p47AMeGP+(4c^7dXKh0led@f+X%H;^_L*L1og8>ns-$en1X+_d!P zO-DHc>JK@y+fQ~T|Lv-YW#`Tf)@O2{{tw@ubux$UQFyz)3BL)eS#}`E5Ew{j%7hi- zKW)G-zAOnha*EgoTS$jZ0WGY79! z?a7ccNwO2v2#)HrHzJg~Wk%cS^&wlRF{vgkBDl$5!aF@oY8EC14(0g;QxpFfa>nV$ zAXuX1-GYGYPBMCf8Nobgr0Sr3*Y)_g8u8ILrCVT<53$sTp45kuR8Dk)e_X<^gamuB zQGTgWed*CQiWhRq7aYnLx1@I!scvdg`p+-9WaQ?h5|#=bsE&If~Ehqd0 zLQkZtBHmpTuLbNqnQQ;ktZyVnAy)gm+Hm~GtBulsSp+JXes=Bb{#{h7`oE$Y4GnZf zblF0&f)*kRG^;g|D5xL_83g*7KbTtX*r3zr#@5l=QT7abkMXSZXFH1dpZLaQT>jj9 zV$T1Zh&!#zMiPvZ=JsCuWH!w?-FCF@oYU~~w#EM!j3GQCf)3c{CVS-8;~Hzf!FY+? zZp(qTakQyBzTd64ue~JMevGwHzB8Flawop@4h{j~NJ*^?N~9P1~?W;A&idJl*YX9DK;DNf5y0EBDW zj@z2>fJp;PD)FS|HfIT1 z4b(t0_meSD8jJ+=lVe+ZK+`KLmSFuW&;>JxH2^7LqH@)L#!iVTTdLSpkMGEnN~x`R#X7LjxzfGWaPA z=Rp}>Ms_NEuY6XHuu?4TowJCa2{qQuEG*L?WQgX)cY%53<`_y^}ZWRB-g8N9ufb9>CK{yULC zUY*OnZ!!yvw4izKyo$>hkoswwtrSkP{cp!6%8PK&(&-4Sr5}Pl8!yd5-8=Q*TnJ8M zOjuK{SDTM+K61C4255%QM4Nw4E90sJe> z+fMqg^esXDd@ynov$p<-0mJY;PdA1*X*tOXL^-j23j&-rQ*?81eSkGD6m6+<{(q`3 z*!NZ|;?EFu@gEI5|Jx9yV(4UU>hf?Am z;nIrHrMO{g;Z+amV>k#i&CVpXUO0Ho7+&g>b@%e?eF!%63iy*|O7ArLi!z%H9BWEN z>Ybi9=yQU|p>g@R4LHi!n7-FnR>?#nOyi4&<(dh1awHqOSaKwR1-3qe%w%Wx`tHK&68QOMEHe|kmJQ}4JVKi#nLU9lUK$c^w??< zFvn3s7?Bo%^V?1~QviGO_srL5y<&@%Ph3fF+h|H74lbL5t5`9EJ(zSlKp|eXpW#Ix z5`{HUDgw(t1{dMrSU(Z8an#5!?UljcWt?%Ju)}r-Vn^*{RYV52PNUqRRmr3x@ALhT zoW)G`RqDq>E#)=Oj$n96Bdy5+P;0BDqzY!%+R}+h1J9hiK1U0c{bB_F4pUA$*o1P% z@{P5Jd}L_F$8`z+LQaVNkW=}rxsVZK$2G-{*o0h&~Ro=XJeAH=EDWwc-Y9NWxJZ0>vjYq=Yc}N zAYT1ISNCv@jhTy`NdyvMQW8H%NJv0Z5>THH5=3Mrq@$?`FSnZMRXP9Vr_HOZt1Rc~ zb??g+_rFhx`d^kq+?5c&$3$VwHRCK>ZsGHq%4JwC-4D%quI0MWaOdJTiX$MmZ?QLM z&R;b{jkmx9(z}h}J0A7coMg8ESy@YGtD0-Dx0Ju*X0!NH$kLhPTjrGmc+rw*iaSE@ z0_?Q}D}PPjh}ryV3WiVPql8D-=@7EZ8zP_R0d}{gpva{L6fOGktEVx{j937Pl**%% zOc$t_jkBC)PmIqcS=1HV+ zstC!i0Nm9mGVVurQ)wmjicI-Y4rLN7qXVv{WC@xz>LcYk4{6nzY0BTVF@s2DnOX)< zTfRAOmRgK2S!;dUVUn}DEu!iSSpbo<8!h$rxP@1>Hsh;rbA{U; zvp9%qzbWv#{YV76pmctLC*h0IRnZta|1osJ+}zY~K!NJMubI@LZOe>v?@NVdx)FYPwz5dXGyGt}Nn zn{?`?;j5e%JIACSpho#OcmSEkwnuiEcs8i(`{{X37DnlC5PWZ?b#u9cZ| zLbfJ8u?%;OPm=R84n`x%AUbyoKMZ4}okf=XMN!9>;3sJ$9PF!UWE|`(YLqxOyi{tW zM$092bB3Jh7@e^}TSv-t2N$kZ32N9l@_5`4a$A0kEz>qK5Y?Yz+L)^f@5NU2Jihb& zS|ZcFNOB9_jOw|ae1UuJcBTh4uB%JHLh zZcbE0BVc;IPB;9)Uz#}j6yj;`{sKBAmX4YHfwRM!+o71r23}GpN5&{!IQLQWHX&Zv z{dIKsXM6E_oerH$dh^ogG4}!?#9cf)tyFq7F-z7)T}_PLbVE3MuF9QuF%McsKE6@* zVM{oB55>#;yaYR~q$w>_FSiHf-$1U+7dAMn$NtY<)_N-$X&` zKKpp*-NBg=t!;&SpTJj;otK)~47CGvXvDF)#a}>-LJG2rK>jx_uF{!an0pN*VQ4M0 zr&gg@_2W&g0qBsNwB94+dlRH$p-C(aXfCAzivsP$;}~ieoh9C6j|$1oHW*h|`y3(O zjXseA?ZZj+(wejH;Vq=$Es`N}r<=v7Tt(Wg#Iv+_Zesc7E*sp5^eQP^4KTdg@mn?M zj_QFaE4(E$&g~oCn|aJ6*Rroyvzmde1g^VZSt20g(GlWT`&(ss0_S%X*J<(lJ#RQR zQRTOnc6l~Y-Wu zmGtk=jXPehmp^U$2OBE){+Nj^Qwj9D;@IgQmvBfA7+qTYLzxPA@jq7JJ0TYK&^{%+ zjsF2zU(KWTqCP=Z+W!c${+F(P3WhE&rk_g1|FW*tR{PThsT&2xcls9qXD6i7LkAjnu9NKlS^Et_< zJui|2RPT{&nU(hAG^e&dG zPSPEdI5Uw>x~AJsscIyr)2)O{Xf&PIkKIQ&ZZka0n11faE>icgpxTj@X zN=RqOMp!q&aJ$kG8YRjI`QKC?d|@Wd7uK(>S`7$p6qx5GD#G7DSf%8MQDkc?tm-g2 z3;6z(T<&L4TmQGrId&T7h0WjRnnIS%hjZSD(@|<=HX8>iHLx`7EF*U39H&)^(BVTV z{az2QYOF35M(MH3?ps=q@Tqr+d;x;`A?HP+&`ufXd^j_hXd4^MSpd9P zjOi_b_qk%Yc?bR^2YPR$Z~d9S378k*BZd1iVKxQi!E9Trx2fzTEXLvO$ryh2QrJmh za{u}U(Q=KxA(P(LtBr$ok^1P(H@*Z=R_uLZP{1pstXUq{nqiJJ# zS!b<+y3atA@0|MFQ)9YWuii+-XvF#!!4V+{Jgc@%JD^nj4R`B_8nKIKwWMAbrLL(u z6B9#nX`s@JxtWY;&YW^`3;n~8LIqcCL)EoHt4XFwtgX~pwBNBL!2{u`AT5sJS<4jS z>4s02RQKyFdk4#U(#q*0-@GnN7FSsd#EIuW>syIZ21vvTpC!^vdeGrLN`J(NAR}-X z#AsEphPJ&129lt5Yb!ZGGj@A}wwa6+ePpt1BsHpA%kxlleV)PtsU@yA+5>;r^$x?d z&x$VTv&b|nRoF3m3$Go1V^nQ)sS?^}eeR%-a^RCn>-v)3x0hvwT~tuxIsa5#dm=x% zl_rjC5BAiQH*y2GBo)0uMfc`p4ZUIynC1+B3t7xGb1aDeN{}LT-PddBWy=~rh(ee) z>bo2Kr;NupKT7V$HVf)*Z1xUyn84HwKBi=GiBygfPLoP&djcOMB9CFKWjbZTgqn z@eir{+ePYby|JaU!`o`Qj~c-%7|+%SJukg)An04N#QWTJ3A~f_n&a{4P622ed$&orPx@jcq%($a?Z)&VV#J$*y+Nrh3eUNJZ25`PKhEK5!z6_QOSMr}Q) z#II%ShM$}u{o)FrHDh+NW+>lYrp?kV5Ja}`>Bn>r!NMQ|J~ydGYX@56>w6Z~oMjYoS7c0gxz2BQH}|NU zjc^^DG*@}62HE(#5x?89`329IZXuu>5=0CWODLCHK z+%HlajCjiH#;x&N2!e*;bDGZjclZn@s-+xhVi+;y9Kpr_-IqQk>_3f&nA*) zmhrJJA(rGi=xp+o4ce0Kmo!iGqAW&;i)MJFpL9dOEoxMPm>WvT#3KaShJ{H?*QYhWEzMMsZZIEkv5=WMGO#@6pUcsPONr$JXu$DIIMl-ZAL8`5-rX@cabP3v z;}rw{$dhA5kXoOS8jIZj-2e&OT46_HfBbR;*NlIebKJ$o#3DtsMSc{t$0xH2>uXZ>7?7DlIEzjB`ql@{a*2is z9~afds$D^6=e?LZ+I$O*)OP@JJYo$ulyn;%LptGb=+pT1y~yrMI%l?~^&mvq=h0Lh z$m)<^4qsrN`pQ()kcA05hW?9> zJp5zY!obvc^WPb?J|wdplTpvabvh`lBZ&R;8lxLC5d9*P4g*Nt389!*wX~(og|9@s z=S!Jj#k`AZ-BPn2W;9gxP5k~BLhYGCdqD-?YDrmC9jG@qKj!hZz3^K8*8kvLsx5`a#yWT;(&t^mO zbI?aA|GrG$#k#RdCnVoJo#A-U8(<*0r4KNGRXackoOE9HaTHa#F4Eg;)Q)VM>8*mp z@-lKoXn7bnfO&!E57N)jNw7Sy=U{V;_m%SXD$1mL*2DiOD6&O$!d>u=e@7c_XC3bjXR2$z(h7vtg8I7vV`kU6$0&F}Zj#~&m=C<9lF>YMOoF!EZW42Ct+S1@Rr zDeZgi6gc~Y5d$7yO+ZJfha%YokQ2XjF>iMcg&_@Azb6_=UnYEy1|2QYJi#<4=d1cQ zN3(0njf^RiGS;*T8A=i>ZCnXm6reH`gfwLmC3C1AG6&+JvXGkfC4TwxDiO z0Z6N3B}CEBLbe1u3~yuc>v@3JdYw}CtWOUP=6%3DO)CsKW9xVHy$&O_kU+(5A6CqY zsKk}cUDj&}Xo#-t<;a$dnzIwlTJY+p9@pnvy_xi0I0xb>s;Tez{i3XcF;j=^w5-t- z=zb`6Dv~7MYTCjBAerj(kkCDQNHQDs0df|mGZ;(_dFlTLXKxwXX0wIuwoQ{X%!$Ly z%$zg~4l`quG|Y?*Gcz+YGdax6+%Pl4$@}hq=bUeU(zf(i)?>>v8cWNw)?DkpQ4)7z z60~q^oYV7Y^zeS{s6;Cv*bKr$ylpAI(v4;F|GMTrWxxh>Y4+&(R96~AgJHf}vHEFk zJ2U(J>AgUQ@bkY@f$#(W%LXCjzj+2rhvJn6*o8X5z=TCxpl2MySfFPHkd^D|Gia$@ z7|0Qn>l!f#?luSYh;KizLge{xE@FnGdp$4$h+of5;YZa=X2m2_VQl-)s&yJnn88#n(M#pKy}l0Xd} z#)c}q8b{O}kgbj@klSeny4mzEYWBL4v^@1m9Kf2_)%MwY#a2iT9cVd7p-wpjazOD) zA}fX*eq#z35=GeNjS)=U(6gi*KaoM51(Bvo$sFYIwq#F)!(k=OJte{e$x26e$}tGb zQgG9n*ni+tn)33vssM50bp>@O;RCN2W$3D5rqUG*lE}F75tqRpYvq33Q4iWJ1)$54uCyr*rvC) zli(wokPNvF8Rk(Kxo)P~J&%`6jZ!-G=Xju`!yuj%n@wv`JT}_leBg)R_h)`IpoMh| zgtL##!e@1z<5V7)WL}#w^A%v$LYpE+LXmCHp?r_ZzZ2l~2>B4}b#3YPj+OJwM*QA= z!xt1L*FL)4JJFh}Q&&mRS5AFQbF!klvy6;SaD_8GnsEPThEIIQuV53=v`cE`hJ;UP z=Ls2~>}ngCKKk(orgeUORP6oq44>!<%${R;eN^0g(x`b%J36on`ALiFZE(~DW!FB% z<6iQ^?&uozGN*kW4x>Jayf{Z5!ZO@!sN@$#NYDfORnnt zdhAd1I$$y(9`8?Sda9w#9%XYWHhN+_4?K+fmf0MT*QNqSM!=B$5NF=KyIVcsw>^8k zO??66ipAU}+^EH-n*Y7kkLBO^+`V>@bgIO{7Ml*-f<+N-rz0wM4h0(O7-DU6&E^)m zV%FxIt!#APj5SU2Or6&5aI~ui*7Z~q^~IKc=Pe&O1&`xwlm|A0wohve*N%LcPXU@7 z?IIC1^V@5S=hoOkO(k#ZmU)ryjrI<0SdThlTT^U}zc9p{`@si@ z@Txs=fqR79m0+JA_dK<5=V%qPw5p2WN?jeC_B6APTC&BhtIx`NQQicL{4-P=#xb<* zXNDAHIajmN%DGbUjMpG9*29Z)CLhLOHRuT22Njtq_m|H!FS5Ca(@i7dWlms?R_hY% z)f2)Q&ZoawQ8%pZ5P2=7($B0J&)eE(&xY7y;NnKx1_cKKSGJIh0|p}9&zKg5e_2c* zj163)feY5!M^`gKch9+p$&&tiecV)KNBHK(#m}LDtfflA>NVD{y_L&|wzPkW%fPs_ z)ARyPywr}kzL#lD3M8F4s+~Q5S!ib7HhvISJIRD?YCh4+SoP6d*RI~^K(n&H_yc$T z*QV`7Wa-cghOLD^aNM*-?Spv<9F&3Z!0m#b2_lck$~U0zt7NhAEsfN38j z`}-B0_~VC{RJ3D)2flrqVTC?5m>79|C&CVT9OSjBS(eocXcNal1)FwMk{W zK@!)azm|~_+M`H5(rMZhN%a| zJpm-%(Kz)^l&)=KU(IU|?x>zfB)lR{UHv5aq+`8>5?QX^xS<4U8NAGUN8Cfe2)5q+x51}v^&E64ybyzwuRv{UolthBIZ0cX?u8@oNvrm9H6MUy+t?OcQu~Nj{QJpC}V} zxMI?IVMuQVV|f~rJibqq(Fdxn(!CGjU#ZSMD#9CJjV-J_o-EAN-`02jr?b=WuY&B{ zCs%+&`rqgO|I8?*Cdi?h@IC+_sG zxVjB?0ip(Ah8rycL#vY0!+ddxz25h;?qPI(s!2v~UglvQlZ!b>feuG*s!-08&g|?G zQ`O-yF$<2hWX0*P5?ByhS7BSH$4hU27BH&Y+`yy3r0awWa`1d@H?p=fd89B?4J}Lf z=6ymbR3^k2NbP30fkoUirB7!16lvMKz(>yvE4ej@B#g;$m!PD8A>j~~2?*fq#fJYX zc|X7*R4y?r%3{=}G+vk_l^4B7-$l=vhW(dl)JOsye~Z>2(Pfz|EE&<2x7#A;*ZKUl zOmO?66mJU)canu*#;?OWq*nPcYb@65d;)}IO5T)F)@_-PT08<}hLJridr1Z~=Rqoj z*{w#e`^+2+mGe(US{dfGh)$sIwBvEGl4)F%Uyf|Qy9y@}KF9!y$dJ@h3Vlh~$yHdRN35bI4Ua;E+lC;u zOuecxM^g$X8klMkAwtCE)3r;CAR5*qb?a5QeFpAp4c0cH)CMfx?o*Qcr@_9B7mzk` zR_4M{RYDeRJUXr8cicsM1m^zUE0NT=KxriewuCf{B9@gktzq8Y2)HJ@c1^OPMN<=mDa!_-{3Ghg8Go<%m})$Kzn8mtv?!QW z?fReyZeikz$`yDg3HfLORpjsit!=AkZDMfPg1#JvMH;sbuWjji?WB8*0QcX644J=u z2s}@;5*hEI!s6e4F|!<_r{0~D@L$OEUZ3N>zxwiD+#YDZzvl8^px;!|T{&jANTRvf zgjC{xIfYj?&pG6;sR6qk@DlO1IAyJL@_xh?-S9DJGN@5)cKi|H?-X2u-rmyzMk35& z8$9{D!OP+K3o{Xyeekjyi=&SN?yAP1u`mltAKhGyrK5$4aGk)Z0&dw{4K-0Kav$Gw z%0>-1XRA!;x}5QJW&Tvrn1JGpIQ5N7>95O->o5EiFpu);ee{y(-c(%gWT&ZJ*7dS3 z;f}4$)3Wot{-VxT<ucW0VVf-hB^{pWz?gUV|$?z5J7 z_+L@b|Iu&azhhPz%9^U50%`A!i2q<#)~J`?d>ciu>9+!?G-?Rs1irdX+q1yI2(Nx; zFWJ$(Qa$8E?}v<&=bv`qSze|uZ9s!xsRAQ}sz-~A*R7m*${;(n{gI9uZFIc@gaQA+cYu*-WQX{7w1SdFWZ0|@;*MfQHOTc zQCxy1Q2*Pa+K%;S$ckY6tbX?ixP?%$pVQn>03yve{6UQMTg`zo>3Y8<3X%*C1)D-i zK=W^qQ&WCAfq(>(Xy$au0wLfo24h#>~gw-B*6Tmw7x49(;i^Lx9V^Ra@iYN zHl@A0D2eT^Oy$4T)wLijM;coI^w^c7C9m4!kgr63os(ZDZH%LkqWB~~IjeZoe`K4g z{7LeNMV-AeBEr(0d%H11L3*%{UVU(Cmk^XU~@W+fe>Qh+!W z>0xMyZ*8~<$!MHTUO5HE+91c7RHsPvKbF$xLm%)5pKnZUY^KZ z3P}a{h++3QQMh0+6K>UrUZ#2XT=A^80DK@%wxoH?zRV^)kY1vOHR=@20SypWRuawpQxC2r#wKp{|wJ>#X{r{Y-e)h8fc$0byNq{->^>UJ5 z|Jeb#mQ=8!NeFevf1&*DQ4*TA_YD{qVa2xe{>?k!Lts#$A3?^%!*U+s-~N`!4BG)r zlUKONNjMl_5_Yr~LEFP8_?ECa3< z{<5?ea&}5$qq*f};YYlI$#eLs2F1?_l-kCq!`%+#!j*cGQ~)I>{08D`@jcjiVwx& zb6f*bg_Pcfhcl5!zGyJP~i(bg9E;#iY+GnjP?vJ zL%rzCoBKU$nr=~QzEPKOgPYAsSb?rGQuh^Nr5=NiDuC#tX)=H#Cl{#)Q8d6MeWb$J z9Om9X6jABwzBH8Vd;h8<8hK+)c<8>Rg{a6VTcWb99d?=`QlR8R1|uz>BISNd#_UZm zJSZhL2Ls)471a=<9D{d=;psaZiLJfa$QRr@t$8o*f`-mPpR|zYX7C4bQa+S(!sQ$` zk4|H|5+r9AMk5s(Yt6~>fc4b! zo*-eRG<5Nji*wDR!~ol)7qw}Fj5;Bif)aw&QhiMZ{nk!>%}MQ^Q|{MPUp!m=i&=-f4ryuJTAuS8%lS&SODD;kJ$iB3+y0_Ed(7Yl^*0xYye?+fNMdSS z!M^dqR0HEHBB#Wr|465YdIjDecJrn~@jq}rpZitAOdo1%E%}PVH3!6Stqmqf_km+= z_KwzTVBoIzCI1|3v>6wQOA~ipbBp4poRZ*YKeNT=IgkHY^txsmRpzp${%7L3g`F>l zcR@eXE2!U;LN`bL3CnVXeJb8MMxhfVz31Lu#nT-$BIJ?(>LdGU8us%E${UgWAQL+S z1-)8amh9N{1vY0|af~%M?%9PshUn+s0q;)WCw%9kNEG?f-zDD9ew8T9vybsXh1M0} zOtKTN`lY$%-RzIxZAb%~35 z>QkWZ>!g=0(3dK_ZKqTFinsi+?>4E7XvezZ`ICTJd30o14AE2uQg)YGzasn-G_9gX z?%F@MN`U`*?D{{7s;fzv+B-;@e)1^#|8I{L6?a)wRn!mdUutTi1r!9|s6x+bmvFyV zSk@@z|C|;f+^2YCDTD8c0Pk{Za&Rt+jY)QwdrRnrk zs~MjUH^x<2fn7PtZ=qqoc21!nd&0&jvpeH4&M8zN%@U|REJg~M%oj*y*f+7C2uLMO z-#}ty1r#JA04h@&j9W3CBpCt}zp-NZElUNi21+14kaXGdnoo}7{Q4b}{c7mj0FdCj zkkJ`GV&j*g)7dUt!V5h1ZDHp9*9l%u%;G5cm_!pGXJ^^_JvrkqYc{rA4cNH6MK2y2_w+4Mv!=ltQXL#-iF|3d#NN@>T7)R^gZNH5_a2k1)LV`Fk45~0Mf zUjhDuqCn2Hjvm`BM(Jy@K|0%u6S%03Yl`^BJPM;rZmRv5+(Q{-`^KIi=@`lJT3D%I zDN++L+OSnW({)>py=$i@{3$Wm6_od{jHer0_&?5mU6MT;uKK!76Pc>guS7N}h+V0e z0XABfb(8!1>H2wZ9A>dYxoKx4yWMsquv`ekbZCCPr&O00IN5Mf z#k0I}U&6g;4ePk8c?stK>5RvF^@w|0?sJ}F2TrfD_4WCNgRFQ^#U{P|vc%677JQEA zLL4vet1?tEIhdI;fwPp{;KC5@hJyI8D1Jf_l8gdlvKgbYcBI;(e=to}HiHND595 z9Ph+|__(2Hw(^1g8;G#c1>G6eB&6pC8%31q-0|S4`?aQNL{b z5Ns^F`b{Q%cA&&;D4g(XW_&1%?$qEnV!pbYbrDDGSTXat!=r)&6HCd}G<9nU*)_zO z@elbaK@Dj@O1+nI+8B0gkbW4}#Ud)R$!}jeXU4gbt7I84<=2Z=Q>^*NZl#S~cT6X_ z>u{veU&c40XLWAw!o$aAHB)a3uo*Ik_2o|n@C+RAAvk$Zt+D*Yvsm51 zqH%E(_#(3%aSE6)@&PIVY*-~QPaxBg)p?GRdTJDn#;t1yrz=jrl9Z8VgToPFg&RnR z8{2TofqLWpNkJHSW3pQd=7?76#%n`K?z+?L%!P3f?2BMjY_?^3qz(&nNrK;k+<-C5 z_Zn#KUlsz)pi;S27sQGm;Fkc+5@9^4tMKq`b-Q3S3TN;=ztHnqHzR+zT)KWQDf2kmEaL6lPv3z!^Zl36K?T)C$=zk?uxj+0cNwL z{Y1>@dv)u#jwSqV#=z&-2XX}bX!%Hjhs;EIeRp!Bp+E8nY{smapn($JRq{tRx$=5lBF8u8wG>Qs`bg+6BVii&g)XZ2&Gkr90el@r> z|L7{bbAoagku@r*y^;`>)LiA76fv}_urrkOc;ZE@#HmWP>R!pmFrMGL#6-*j@O$cQ z!#p4ixgFinJX@=ZRwJmuTv=aJ8)(+E5-V)VPnRSID{Up4D%XldVcxuT9o5k))Lfm)lRQdkK_*HsL5UVy{yGGHpU5i9%9gU#ixkgaS zy6sY_W?m1?SEe^h0M&hgxBN0d=p$e}P&Y^B84KwM`&MFer~DR|4!HTZ^%m^2qoZ$d zMz)!H9mIQN@=E;HTbi${UUrMkP4YG|kk7vqeoNj)_SVlA|8C4qu?f4EXqq;){}Y+g z&EQpS1sf8n_7=Xt!+ouJGlhvx@}q?zBaqYuJqg@q4l+qnaOtPY7yJj%S3(QuZ4@sK z3V(Y+j{P9&fXj45yj#$`;A1Ev-aY8V|FRts?+S$Nf9Z>ecLQ=1d@M!8djP=+KDrX( zJb+gHFJS~9!||<{}q!J5{BtheFtrMfVI+g&FMADS-M?Iej)Z7S`C zXlKq>ol5^fJB7F+V_`n!+1&oCJe$=2b~L4?X!L(dF;=Znl>r|aGe?c9U(J9p9X6Dx z>vYXv;KH=%BP)XXIa7iaKJiDl4%`gfn#RV!(REE0#(y7#pU+p)d0`8Xpt5(AceGBd zE@tl4Wq6a(J^lUkr-_FbtAn<&&5yS$av#4(jzFxy?H1nw+9-4Qtd2_h!_GYeUUeG*z;{q)RSFsqq{e5@4osphIQxH_7nu`B)?EK@aBqB3d16eg# zos_SF<~q$xi$?hy7Tcs`qz?`5AfwJL^4Nl)p_Pi#@6 zfttwkXMk_3=qZR0&3cPL2u$|CQZ^qIbT01WVx_`NA#&5GLZDlp6Mp3O7U2Sue{LCg zZo*W?;p=?Jb%X`bKq2lx%Z!lGJqQ$wja0BzF(vKY7eHg2V>kE`WZ;sd4{X3AN)A$H zA;1GkQ013uf2J4;(?66?nWz?$oJ^E0etNBHEq ztU26;kMO|_xtW+Uox+SGfw0Oh;dGW`Sy0^h0d;0nb1wn=lK~S{Mk=YWmVFc%aM}t> zBMwV~%~Ur6I*Z%>heU^1%tShD+EO7-&&6!yyZUOZl(A@+CKI8S3a)6gf^f7bUX2ih z!7||!W^6Cah8Om!s8SIXI}3}+*xY*p#TFvABOBaQ#xVt3kq0o5|D+gVXSJum5E@cl zvCrc$Q=qf9jO!ZF+tpLFfO`)RtG+kmz8iBS`?#LgB;&Y;`OX;Ke1z0yzt>aN6#Eu- zt(P*_ZUEeAC|$%)-(Nxxfn?qyn@opTW=U7ZaG849!G^wW7MO#>VLqvJ1{C>;uCl0% z$O;M3Zd~~b0d|u=j#HHF#KJh}iw}|*@f7G$8Ii74)YvGCGZ(;1wy(^q= z1X3-2UaeaEVBfDq|>D?%%9^ey(l@};yK+2Tw_ zzO12mw5NRJvJ&qWlE1`Is18W~&Vvl@O$olLaCt=WNKMH>fA=JX`r3fX6ZNTH@I>*5 zO}X@k`m3yP&!%Kg=G^Hp#bXSrRy4$^0_tl9YCFN*lO*bE2dW3~_~z3w7?RRO-t4}C z;&HI3N7_#b0Q~Cm0R6~lCDwfl;1l6-etY0uduY>z%Q))=>)Pb&6KjC`kKW3cHo8o$ z&kTd;zh)R5|5H?_`}E?ow{OsfbifgrsXWJHR)G*b#<1+-MB+rc{E8fl;oKVXzMBYdpVh2GC%$rNH#@sk z)m3(ul~pC@zaKqw2J4={eO~FtJZ-KmVUbUgh%ZDLMF^>iOj_tyq?W`+Ihr3{5jH$( z@4HriJh^r7m@jo{El2k@ukSIClh4wTPc5zhvax(>kxi1oPd;YP)D}dfIJC1dH_+8k z#f(S+3lm9aKySLd%721jxmcut3#5Q}@JBeM@tKPB3sP(e$ zGdPAR6iNEJ)JS^w?*WoTzwOP8XKePy|pOCVM?Qh^D}{iM zL)fiKnpGfj*zv9*Xx|Mv0wjmxLHvys`79#)B-dSNzWw`q=7^)749Pb|*=Qp#o(`fI zQ|_=5@}z&`mD**Z#2Jb@dX@XL@ne?%4)2F8(nPQuq%8#uIX8RN_m5ai_(Ws|N;&1vV!?40 zmFTC1xS_I#^tckk2vg&gQfYT_h2#un#*9V$+Aa>@NKIdiA0bg~(KWzfEmF8kIdyK0 z5s(nEd@G$nySt-4MlKkhBMe!QIvOjVQdZIFq9GLcS>T%@*Z(sdr$O$UpDT2!KHvS< z;dng8{u75_*7d3e%&r0oQMBS6qI`|wY@EVFr3l{=2I-0id4NKTPl2b@X zvkQ2G>eZniw75XEG*s28uZ=Z1=!5lV7!ZiDcjz*>!N{04d9)YS~^h)f*(})}N}_ zk-hX<+(GWhkq(^i+1c0*P1|bW;od=rvb|hM2OQwM*+p>Vdik4?+Zq0Uwcp4oDFSua z(tUXa+(n#`WtE>Obp9Q?J z-+i~`xceQD*;-ral^DK2tk}rc8*5M`##ImRH7oTH04zXz(>k@Uzh!!jD)-A!VgKZ? zX@T@KUi|HmE1i@-lzSKeR-nz?yR7X$>Hgz%AUNp80HjZ=_!vTmA2i#dNj>t_xZ(BN z3%@Tc)gH;V(N#Zip+$RsW1oi>^OHEl*%Xz1=ztsQmBT%VSv>wa+B`V+67S&vScCWh z_2zSA+xkgcjNk>;9dNS3BtKvfNqEkYc`EcEm!<gU4Yi&3Lf3C3NGI4l>Uk&)V;l-75S*Gk#=KvY`BP9F7Ma^Cz%N=hK?$bDsrIgOg#f%utyP zOO_{sHmqbI6Zg(A=3GS9dQzjUJ-RjYHr@Mx3|5hm*M}}%O9Y^21l(ZzQV)|TvV}1M z=FJcn*iZVh9e&9msnCs!`h!zvIOh1}!M9nvSDNs~B#y zi<+}4D6(b9v^u%(c3#w>UyZ*~q;r)azw|-#@Y> z+_c^X{d}mz5Pfr&fik{vnb4*4r1k7=xx>;=R%ZtVT;_v)*6(~x`Mz1+GCfAs%(kBN z>o%fH&H^HhQa^yLlHC|iM({CkJknV0(AUWpFV1?3r+>d%63THUTOc_iv*{8}6LGw{ zqS6Q9htWM;g}eoyCc!p?r40EIK*p6 zE%>3z)U~?sA)7Ph?I}B_=cmIrM$A0A5LLQZlBgTw=OsB}`!QjA#`F~#J5$1PQG?qkAnXl3r)gVvIIGyO!hB7#81_#b0-Z7|oD9Wgues{|Ck61xn zHF`n)AN=foC^I%Z-I-< zYU7<~bt`N2c8lG9IGwl{6i#@n6x(Lr=`s9&7Y1xadpZD~5~7>UK(y69y4dQL{^s_Q z=teBn-(TD5hYzux8w`@_s7cliANKcobg|uUzP0hWp;&aPdn=x5IA!>2YK$=zLav&r zJc`Ervpfsqq1uyH(KaSP43YZkVr``%K77A^_C2S59H%hCA7M z^3QS}okkB-PULOCUJz|!N}Y*iL;0tQ2p?*e^)e`QeG)JF(q%L)nf+{efxTubF{zUz z&w33dl(!cz;WFG>>pk2QJA%4dw(y_1KFIcG8pr}&daNJkwx|q12$-7xuAq*}sq4M3 zzv^oxVY#EoDHb$K<-b$K4(;gGNw_Rz1A0T-7dosyQsy^ZI3U*HXLlRA$y+O{kW{B&+NT(mdH;Pp|VV^c%OI- z%_6Wl;Yo?b3=!lTzulzGbx!Z+1TG?uOVnO0J+Qst`(+RnE1hEoYq% zWzdERqRgS&Fci9o>Fjo<_gHjBF%Gx=#&0u7n)ceYQqx*yXe*(MgLUKNu1(?``6hF( z)Q){|&X)Ri}OZadPjT2fhrDiu*sHv=w4 zem51*zdxvKv*-BoVIhu* zGLni%CrGvdbX77K!WD{=rrpbC{bi3@Rr2yJo?T_6y7_OFJsd^r(zZcp3ClOOR}Oj& zL>idxq2DUcs~!zH`|z*bI6WTjlV0`Cba34LopKx&Va;muHb)?wBiOqP%!$0;e|LNh zLJ6hcYdF6a0CYd_6S^wAc>nNw>IxFjfuYuHq)Cyel&LptN~mIz`$5@{u;-}Ll#sRf zz)$L`@v;eMScPWK+smsf=jG!X^~KL%4K;C592GNB|GXl0#ms^tL*J*>6K|%c!@yaW zbF_uD73kyT9h*7Ka04mfn_FeB@}3xBAuyQwoxL-52TdQM1}AQu8HX>#*0w8Ezs#<( z=^-?`$L^3{qPz{nd7g7S$L|!;ZNNL6-)fEfD)DqIc=|;grHX?ClrU^8{dP{C zFm;p=#}3+>1+MMu!ww8cRwHk{DvYukI~HoqzEx&aJ-T}2>6$MebOH~6UNKHbJ3|fV z**C5A*Di)+0^utMq803l`rRF)XkGrg$E*P6qKm`5SltTT4hT@26KjusOKB%#9gnMv z&ZiGoZ3)BHwQ+yd-l8jA8mDIxJJ8F|>1m*tE+}OyD!l!`5+Bnw^cx*l=w_ew{U#iJ z&_yco)7eS`H&IkLtfVy-uLGrx&Tf_Xp+>gTHD3S4uCpuiv3{BFE8Z~v)COO$t@R7m zHUui`K>S5`@kHuP$4b8#s&_E|sg+kb)Wq|(7>Tza_dSUp<(a_Yyn(BywstOCn>X2^ z+OEdfEWqYUy+3P5*1aJ)Y2Nu>eOPyDq7%@7E);QTR?}YDSz`*!Ms7jp<^77GEB{LR zUaK0W1F>17O5!cVeQ!Lc!SZ9>5|#62gjq4r{AQJ}X(N|;Yo9x`tAF!86)9%f`3ZNJ ze~Qj~D7&-+?kbRAp88}K6Lc|z64x^F4cEehy);ovyjp?|LMC7bL zM;VY>$RKPkg(nb!PBfT9=mr+)o%gBCXHE|f_w~`}GGcf0gz1sc45t;%uN^C^r5(2@ z*FFIp=R@QQ|4CLS;$Z)}<4puQaswKvVSv)iI$o)RETu$yITB1rQNOaRSEUyjw_QFq zW!7GGNujU4jp~?!a_qacI`m)!RQZRLrkDin=WpVqoEvv|8X2o$_gLwekXz(b!LdU@ z88vePD4H*#K0d*|E@QlYV3jrO9`2O9MegXhFxOGpTOu{aWE4#5b%HJRhO}>&RI69Ommpw25+-831y9G% z>l0@j(S&7Ude(`G$yIXi;B}4DbpUIJ;4k3o+a7}B`y6&JBVkG4^f1BkbJ(Mdg5>Os z4PG-p1lC?d_+>GSmP8QSjA_z?f&s$zSsEkrGyDaqNQ#q--JAwIWB2-VIx`u}>T|p9 z>R?8WdzK@ilwz)y)D;<9Q!9*yRGdK~U6g0d!&AoC^}r5zBa0Yb7{sC0LLpTJ@prDDL&Kp`Bhe$+{TO-QW(;cZzUu?oJMR5ho>3cjl zj)hXL0M33O?jNnrpa_NXX*@hU##4flb;idrqlBa5!a!O}_G3W1h;U&*VqA8i(iRZ4h{nCc}+18chtNiQm3)^hlW&f2zdj1;^=W!Ef z-xqqfG%a1-q~Nq0*O-%EuMt7IFfc!s*_gQUl^NfvQIqeIBf<7ew~Xv8FJ9kLdVsmi$yPa6-pPOnm6Hy z#x{7eQ@f|EgJEqZRo@aeI*n%YEKRC|Qsu6#B}2A3%U<9j=KgFoM;A%p6vSbF*EzX2 z+{fezC8HVi@zv-nB)`%Q?^P%FE5hzI@2gy>Y<*CcD9(G_+__u9OUk`x8u~Q5DzLkR zKH*WyRYc_^&B5H0U-LDD3xaJ99Op$Kje zhWAwY)9HauIz@xe-bp>+qu8(3-)na~_LsGb zIE`#RO36x}^^3y6r?Af2TvLHdIT5w7X05VV&GjvnIrgX%{}q{^YPE`##`Djp`3B{z z#|6#v1!HwCTwQKX+$vs{7}HnFDtA8RpX%BEZd7Gyd$>nXyVo73l(e4tgJ$b7nJNk| z)WXswr*u$NfRz0fCm;1KuG#Xk4(8bd8GR zSXf{a=T+tX3$cl*thLX07xc8AcEh1!Rm+IP-#{JhA|-6_55apB4xBmV1uB+$bH;SS z>QJUfd6El+me>tQKsllDU{iUfx|xdwk1kE;A<`^1CEM&T3L{)|rS>Kef=FHx`S}G1 zwCWKRT)W6UB+fZTg!>weMm?pDgQVBXJgi@x7b&O>Sz8E$9@d<#BI<9ylARQ*;3h3m zWw2YNx0L4aWt2EQ+`l)r7#P$8rqFFHGHN3mBd-cszb$)wEJy&et%kXH4OG#r{J8<}^#>`G?B|Y*U6z`| zDmn?-$3F!u6DjCzt0}G7bQ`iAipWu)0WitlDN!QQ{tO5fQiu9bo{QA?6`E~!D9U>qU}M?dIc>t2urwa7)bOgsqw#=Ss5YfI z0gS&~xMMg@oT*-@t+}gltp+gy2s?QE5Fia(+k6!XD;o-^t}ui)f$LHkIOvWPAU|ve zCJeUZp~&xN^(9MrwS)jVmp(i8^XtAz(ci?BP+fb;0uQg;_BFY^XUCb|UBu|DjtwZt zLAscM%D^?Ck)|vY#rTC@du718b5cz?^vCFEKjF(y2rJ7nS$2aW5edSdCibz7ake}y zakgTj>^nSO&d0|AJJB%at-Bd9$~`X%tw;weZUO6;v!oZN#?DF<6KOd=Ed0b9|mN=75_$aeV$r z)dwq_oH?>j-PV$_o;$ip+x{kHJ#!S6wv8;MTR5xA0!m2k)F`U53_M}zP%rw}fL%0v z7R~5v!AxcJ43pVhfNe5-mdWUB!#wY~_2hc{$;=ac6y*3EW9))D8+CFUH-3p)m^FRm z%?7eh_7W)4H498)d<&K7T7a!Ge3s7eYQubwIC6G;elvdjGK+t7>z%rdBIR8;tIGmP z$`j+hbbPq53b?ok&`rZ^`+5?@yq?N_h;H=oZS))_;}rSO>cMZr$s1sd;G^J9aB7O+ zdvvc?+!)j?a4*L(hX-MPx_wFRuBm1n<#Tg(wngPmvi2*=*Zp+*vY8h`r*^QH`<~-* z4G)2TrC_YF$%OY5cZtAVjBQ{eM#@MNf3ncw1tqx-YyWTE@^a%4D{^5t=2>;_vTBb%Uir<^ zs+uYU{7C~6S9k~B$MK}zMDyyB9)$NF1F3L58*J?HEu958LfoZ0!;h;IL&GXDUX{l9 zfxl^R_asXL8`z9zul=$tz`W|?j4f-C&^dq8eP69dLS_D{Xd+& z1yEc;^Djzp3m)8pyE_CDT!RI7cX!>O!u#QdS=f#)6?x;^S)E(@28z7b#%kkdXmp)rHGl?*yVc32=2cRSN&Y!M1VO1UYkhO0qSftR_LRa`fEFT-n<~ zztgu3u#vvHutkUVtwE}y?(wM$C-syMK)tIi>>o zHhm|bOx>!Nz6quRQiSevx7WV+X%dndY@w`8?$PQ{G zu>m47Sw;%5Kr5Oj%y?h!V<2JZeq$P~^bO@w94rtX`$b5`A4kT&p$}xZV?Z;qSZjiG z#-F(@hP-PX z_EI(;oJ6&GR@0U7^hx^W)afis(LWZ6g?7Y&YQ(`=Q-4H(c7((oM+5pC|Kk4u^#zoOq%RpSA{{TXR|80WN}>W% zo+$^s@MHg?7$Kt^A@f*Dpn=3B5E;m#88+bQp^e*{{JA$Nz%=f=>(7>p@9Nd39tPV5uu_c}P>vXQEM?Guu;O2sA9%iiejpVg`~=gCY&tFZ z&}5N*?wk}R9~NQn;f>oPi{B&TKNFz=;l{sUKhS>x6(V(}P=TYUz-vZcPY5zM)k}-O zy`@vats$8kaGk@=Fnf#pQZo%mEB*yx=825tAt4;_qaR#GD}m^rWdT0L$wG<9)Mq4%lFlaMtZtOAv?# zgoh>abB}EAst3L^EaAz>mv5r0GW=3{r4JVV?p-p(%N6R+e8TnBP;>EKB zrP26HVRf;N7;HPbRFzt4U>OV?&b-{pzffU`WbYYlT?NzlbA%g=r%b&(r#%r+fuJA} z9zw}XcNnE#RP^O;Svjxgsr>mzx_Y-66<#Q?0Cd&)z=_ff3g@3=r!pY;P%`tKl=vr9 zhdiK0hNttdF?3qsqQDCxwt>`6?7`5~%K@>hGG(|(@*X(9Z=$q5kDCev>rXM^@W=lH ziNcN|4N%ePsgwq!iPe>r{pB_zfj|O4b8P{M7{UKyiw$517m0N!0D_Hocz-^jNP|#F zI!F4m#dcV?Q)XTcDnzH@s6fb&&=H{qW;?7j*NZo&mY}ZmCq|i*?pJ1*XVIip-+8WT?7_* zpT6#pQ3J_bo_1+KR#;#hK>7h-us>nf1Ed%a<_{Hd*a1uI80@glzLH#n1WZtFBOEDGL0u8*@50>BQ z+A)}Y0drre{Cskd0bLS;@@O!F5y z56bJne#3M?SomgWKRP8a^j}pRED@EcJfIY$|6Z5|<6m}(jRs@uBKj}M-3x#o9M_RD zFDz8xsu;FiDKDt-O|dhXTScyGBrK8ez0K7(vI$h3y7IZe;`AqPERoE;?Ct-6)iU@l zdppT~E%npWx$Q^l>09a0&nGzJj}s0T4sm<>NVTbZ20Q<)3?qA+kpWNDswc`s4YVPF zV2CFcIThr$0u_YQ4t4D)#drOA<2G_#-N}(~p!f!tk%J15Kso-T9KUPeS4}+u_)k^K zcrgBdRMYi$MJ650hYdgv7x}R#GW|vX5)Y_2Ox4QY1t!QhvA>!YIO!NfATmlT^P;t5 zn+_(%1`|WfZg2DG4H;|P6UqQhI+y}m@ed$UP8uZl57{s9f(Fsd%bU%Ebadrz3=aQ^ z@zUJs@$;aoryn4*<3Is)aDOB0ApKIg!;`+LOOzrK|0E~_YI{@gjRqDVyCwSo(A_;G z@bf8D8Wj3Qxt0P8oa*`O0MOg-L3^zj_oDdLM0mf)#n>(b3ZTIo<-w!t zN1GkDbnyGP(oG8B=6_3lcKjgxc%tKOH+LxG!6p!8m_$J^FP2Zg7^FUhQ-K)c!8ZR& zNxJ~FAgNn`!;VG#6PXMs`wd*}GLF81pX7~>`3pYfVb}euCD#VWHN^fl)g`y^1l6Um z0c_#4i)58wW6Y{V29x8S>~R}GkR+xr_<}+G38%5@tV0}&WG3`j2FA*#vBM4!lBoY0 zeEHV^jrO{a$@&!&IPt{Z6!X?#LHb{VHx{}Qw;9(aXQo(+RU+Dge95gKe9EEAzh!jk zn-EP{BzQW%POtRUj^7V0Nn(kN zgjVHu%KyvQ9s3_5xPOR-Ga3Juef-D4;~yb`sW%Sz{D7*<*W5Rp59t2@F%pmI0;1w> z5C5)^{HwkP!i&@eG!Xu;a#G@d<<;?Tc(hM75B{2*DPRE_Bq~KHx*)x_L3zFRH~(Jh zpTK00z>xn1BpCx{hBOfv_z!2$;$qX(n@TB%z_<_zGWXv|MG=Ef<+Ln8(eV0ly8u5o zlxSX$I!0%3WanD&V8(SZ#Sr-KUpzuUY4{~%o<#36Fxo+ge=6_2GJh!x!S*!LD|gXa z1Qvg;?1I+Jxb9(+hJHX@*kl6>Bm$&b$z(|?NyAkxErn6{qv;I3cwvw3Dxb`cPb%@` zw__Iu-ry#BW8X+7Hs`ey7RCrnih2o-J}YhfaORZl?;fGMFWcj!yOazkUid^uCh5g0 z8@0sL-%XP!;H?|0;&87Qaq}gSQAs$+nOnBw_Y=)1Ag3L5pOQ{QwAACU^ZN~Z;$_~P za!yTFO%`POA$-WZ=ZdMsrkjSZMcc2Zdz1nyCT`~VqT!2RQA;}bQpnB?pi2TNM)~Os zM3)iv$LJKrfUJr6%EnsPtIC}bbtt2YO8P-q`E1unqr6I>04%!$t3-#~HKhGjy5=uH z2VY_6eL=c0rMz=vn9)b22l4P}oG!wBgr`SAI+6aa&ClV&w|GkaQC-7s4_!2jFZf}(# zsYjg?@z<|D(sfCti34FqFO@-IH}Hufxw=6&7UN*VQG=^XRwYmbz`=aeZHoOXDs_|H zHL`5X4QV1YL~Qo&m}sMDVS)(MO-9PmSoz4x5h`T6MG#@>&ki&RGYvW&8CMdy<* zgl0x&2>!Pz^)q5D!aXe%)R*r6DV7oW|H-w`)yvV$#mmLj%#IZX>TQ!Nq#_jb+YjWU zBnJbF1BHl)2<7fl{T5F6e|8NF!_4>+J zBKb_Z^oJvDBsb8fpPne7 zHdrDfU2b)t5)!C$8@dYY+s^E3YYu)SSrNSH&P8~LK0`i~Y(g{q6r0rfsqNunlb2(~ z-EnjHg4x-%C*%R6-71sXYT9l7_K=dSiU&1Zf~Hnuyi0#T;Q#r@-VbL+e+P;Eze=_f5{l;W^@FTDMg5 zE@W_?)~X=m`ZIo0UU8)-Of@CA3p(L>R73t-qnz~}&Ds0re8!COGAfNbb2{RKo4mwS z9rRGA78R)xp4!yoj}YHy&U^Y=&FX~>mT*;5If}@?E5J^8GP|(!MDEnYN;Mghfwv$; ztM@TzGHa?$;R7*u!GgKy>+`ExAG(*69S35%)Bk+cU7d9rB1z5eNJy-bqOYyDwkW3R zH$KcL+Kb5Kjo_g3DGWH^IW91;PPCgn8ds@ZY8-Y!ArI)tzjD84(sgF8^Lck?yd8PP z$z%yb(~rv{O2%1MPHon0tKWjbt^OrFpH(+3H2RosnT7}B<|pYa9m=t)F^tt?o@z4igjHd z@1*H?Wg$v4c>lBg-HC5wU5V_dzus5m#92t^y=-3Wk0~2Hj;Ez2MNo^XeHT&fGPn3a z{Xm5ABh0iT+Z1yAb>R!y-L_2_?2EsQ%&)l?Cn<5UF|_*rW5R9A_xIU6%o&LymB`g< zRvY%oshW+*>b;08YwOMI-vPQ<*p3*CubKpQXj?;U?9(CoBj*x~;Wh%ir0iw+W}#X; zAyQ8@vcUHpb4yf|+(7Vg!HcQPe=6Ew<d?eC^9G?9Q;NkA~>7uQ~$plmtk_@3O_ilR=p#&Un zwOsI`Vb%*^%=c>3a<1Ea@3hprmsB;JBcodkFKzM>HG?RlrcX<`CcaM=nYFfr8^1qUj=7i7dRq1*{!OSkn;w-mm1=_I z_oDz+ngay28-(=XMQhj2btX4XL@Q|%aPr`Cz0;;bG|??Hp|*Q!p*=9zq zfP@)Roj>-fS#8wCyHx8hI|*QfU*;FBqSoH7zx|rWg5vX_LR>aCJ-ABhX^1qvIirwP zhz&6?zNPDoP0rxl5BjDC9;LcZBtyFvBH65l5v}@-XLz%rnM*yD#hqE+)eu@k{Ir_A zOsZMCUZJ~Ldx%-!%?dm_c!bG0R(<^0E&5M$hMDsf7LH-q$g9Waib6Qv1MMG)J0 z_-4vo5$NNz&DbGn)3!I76~JCmF*MqrSy|aW6{0@`857Hwrw}y<#X#(D`S4S(#<$Vz zMY)MOz@pKoij;n@n?wm={z#(74$jC2g>(wQ(4N;9s%aP^!$7JFR>5)S zPaTTAlK6wYQdb{4O@S^SxEEnEYU(gqo$48JdXx2TBlQd6r)BL^-i&DNXicTfIsZ-1 zCPk^$ER?Y}6b@5IzHM3;T2J))+oZ&n!T7@b3=oqr!)|i*xRsJA|IWPLICtG?&Fxsf zHg8y}*ING8yel~zm@1n!C!V!n`D5MIQHE$uOd}74E>P}uEw%do)<1N4%UUe;VT`)y zH4s6xhJa_+3jyL~SIps=6Ge0zXb<8#VIv~8!4O{f{A!Yv%t$X{hbUqX(X#DTFh3h= zU(02hr0?iAc!Q}Hc7WurVkTOBPYO)$B(M~0Hd`kH%rNV%Zh4!2vI*i01y>PtE}h*BF#1< zn^>K=dFI}RkM?bUbXt1nQ!@n(7$h3aF1G~kKH-@noEbWE&Glpx+~Qr}=0^=vsGDGUXq~}^QMP9(S zM&zZs;$#n;D?qO0mN}e5&0G~Uh!uy2u9_M9)<9*%g*z^L>Iphj%ZM)s90N=`f|lJD z7U4Z8ewlONWhA~wp7n3-A9&qmu0e6%_Bu?z25QqswY9Q~93D)rqSg1RzT3uwnFD`& zGup`{6a$uGh$R~3VY~O)uRX3>gA(Md#rK9JqE0OFQYmNgH#-N6@= z_mBaPoIQ^S&JX!3!pWQ=M0QgqF@%!@nKnWQRiN^(LJGpFhx=(QSCk?n?x$A`GDrSE z6Crz*=HQ5!>kBOg;nNz1`N)vNPXWAwfYU;QUXwb)WwK-qv}#n%SEgTiN@icyJNRKMrYxSu2 z7$m5^gc7=l_Us~1_$uYUCN991MBUoFwcR^g%{YF~;nGhJ=M_u?oEzS-W<)cIgYR3c z$%BvRyA-eOSslfba2frEB+t~h8^q0*!;L@h9PmD;!Ru~XZF*BrIm6ee)3L&&BR}tZqommB(z- zpuaPx5)=)VZF2TYRv&`VQYnYK124BhiDu`QFm7qzfkD%?_&doLraWU}{(CAZpO09; zufA6Z5?4a&Ccdb~LQ@}5OErTmo-d}q;YOg!e+$n3LNfnt-GHcV;fLNuCSL3ZkJ*JbUvsb(IsyT7I{JY@P+URbj4(RVY9<2141`v%j{-9WWM%FpI9Wf5Gk7Tr;{L+mbZ(BiraHnEJJ` zL7nhNtf)Y}Y&E)O%?)#;G9+)yO$``->w@UpYgwtCl+=mq9HVETxSwHhRYgHw&sMM& z?-EZF)3Kgm@CvKTKHM&Cfj5t{b>KToq2_!N?2vgsrd4Xc5M9p2(K`Z3|hb|Q!bp8^OF+#H%B0DN%PcDe)252${Y-#zW9UQ zTB)G}twM}in_IBYgMHc>X-fe;r*opY{G<%vYh1zqWH^cR%+iejXL)dfTl`%g>TF@r9Y+b-t#tbR(Dnw>v-V=2%-=9>mQFUci z$vY}~f7C&de<$pn>v_{DHitDyi658J3O~d;eA`LmJ=&~kOn12D{5Fe+g5Ji>JxL57 zvB25*Zc6)sd{FOdtj94GjL!896kp2fC*5;WoU$-L6Ds@nVvL_*j@bqM=p!(VDN_mjc&xOl8%O9-y ziGC-W2B%@XkbKo&b)|Wy6OvQDM8euyV$gMvaQ#$WX(u7UcJC1(#D@QSAQRU8>Kohu zh6@gsE~S9t7O34%haac8!Kcm*rm=EE4C6EAk+)If#-T{g57N2#mcau407WJ4v}E%` z1)9|kFu1``q_D`;N8F|mbN~#in;UHFU+ve4& z?B`Ziqmb$nQ7(O%izQinvNITi(NH!8nwcUpM7%tzupCAU=r2QsXt9y!&B)F=9*Hf- z@Rxx}XUE3se4dl*^Drx2%v^aIEuz`YLkWa%%^`XlEIAU@LWtNuc8}mXlI=r5wugiV zWE=Y33x#M&Dw(BcdtR9wOPrZ;nz+QSA$52LM{K0cd-!_0h|fzk$$1ykYN_!LIGEP< zr}(FUdS88|(^3Y2DbM;Eqm)Em&4qadxO^w_otjI7@a8((ITv64o);*8b|~<9pK`45 z-ETx~ASC|@Ig;DW(!xO~`k?)+Iw|9kGt5iV)3QC&J<0;h>G5dum9pebYt)#gM$5;P z+(pd+lpB|RcH)H#M3L5TiJu{1_27n3b=OILRgAM1p)BQtf?MkBwY+uA2S_LNi%I^(9B|+;9{7IZv}@E~auXg5 zVVc+`j-fc#2|m`(|Js>m0cZXFo=QO?nZneyB9lnl0JZ63n^{ateXH>NLm+oA{&*{! zO_@hKzr?S)Nd;KAKUMNqu32(|u(2#3Ke0+@h|)&%HRLIy1o91<>9b|`9Au^biZ7G6 zx`h=2hcRvIdUNdx9XwIU+#8>VV_Hqcbxg#)T6XPEh}yQYoQF)dU?i4UqvjT z7eYg+^Fu-Hg0-93!0rxsWU1NB^^r?rcw`n1yov_AsR+G!?|JeDqqJj2*;q#AJ`Z&w zP%JHH7L6VIMwZym;n{@sE2k{kRbfb&s~_0znoF11d};KJ=jP_#62O47DVobVL8ETD zeQ*ohp3aZ|p5D`AcecFdK0F;JzH&M&tB8GlRj6(99^})F9tRa=sZju*6f%d<86$?l z#*UbtRLTX^cTMh(PFE}7JyA{_wWGvAMq20`v+a2eryQ2=2|?5n20Z-H=4(g&eC42d z@0E9`$;HO7Z_@Sh%G@AC_LPui!5M4QS$FhJWwKAI@dp0q?7((J2+tMqm`E&2?Jt^O z@{OIpkA&q;#fO9Gc%{jBx)$NcKjl|vSaRcJBasC{KC&De=-n%{GXil8#-O?)CIj3D|;TX5T9A6I^qj6HYKwgAdokO+3 z{?d|SsSPJho7a3|@6)cw5b}~(`}w+UCU^9dS>pHa1JP&qzG9ui--^cm3`9FxS%{H3 zhV99)#{EbcyxJM}=%$xW`GNOkX>K1`|DHMDiVxVmI0%>d2`y#r#cW_8U)a)dMA{3d zi-Ny%d@kpZk(Y(ntt{bee{dN^V zmzNRc^BTW|`RN-VUieXlCpPIEzoR0I!m@}vI`w;@g8aJm7E$by9FF+7;8jK1(B>cQ z=R4yx=shQ&vx3hO^rgiP*J1lz+_PGe0*hcrb-2kG}z1a!h4IER?7a19XZyE z^SExtIJ#zjr0OYo=36+grw;F_=}Afb`EZ}0ng?C7fG_jYPisP8Q6U=?8YMgQ~= z!ok_Wlhm4UA;GIRx!VDrSh&5$?1*$6kiDoZ+mTGbG&-)2`!{)&Uw^uTgYVId8LF@xhA65N}vspLdR^WWH zB*cbWr=4^Zx(AE-%eAP=ytTt`%{lVA-*aTv8?9Ebr`eYwH!&-6X*1<^M`J+>JZjtK zPE4~Lu;EQ3W{e%+McU2C~I&(2hBnJw!e)W8RU2uAk)Fyb()ks3| zFcQcv;em2^Xs~9?CU{4`lGgfz5$?cx@m%rKqk3*+no>2n(ntL>nwm3Q)iGw;fHKl6 z+YFwBy?^8RC}Kp{9#%+-jL)??G9*QXu%|cS37rdsq--BD z;Y^3skNF+ZA<0>v`}$%#BwC%YpmM(7prcb2jDH7H?p#KFMtN#}UGD%1-Z+e=f-&dC z@4<($fX%DNE)dZD-MPpzSBP%jQ@!GY57$dp`4PAR1oQTI&3NKXbcY5B+w(sLc!2y% z{J*Z6{68(4{3pVL7LqT{{s*u~-SUV%4^p_KZrm6rUd1o#ykrclcM0ERKBIA?WqgFB zVjEo7l2#JB?!2bh@cgKcXx$?IC9=`7ys}B{bXt9NMXX%Cya~CJS5VGf%smJs8I$P% zzKsDtc0O+K-k$%_%gBafi$VT?N*-kw32exz0#d951fLks<9!pW6z(V&i*%Q8t6X2q zVNMGX;Opt%CwqY7E~0QK5VX zv=2b*V8)=1s(uwIQu#7$6$8miR!h=R0uYO9X{!D@I}aNevGN+#JEwmLKQ)Y3ndhm_ zbK~?q09y1~SnzS{GY(dwx&mH#(6q$B^H;rZ47&KR)d7J>l#g=Lfnsc$>b8IPtOFcG zI)1am_TivXqwX&~Y4>d}?Dv-JGA z0Z-y`LujKqlI_PWzHK3;`{zcqj+tr~{qSFNUs@49NUAJqET}Q^#SM6?<|xO)idIrQ zV58Fz8Y{S%*DO)>{%lA~X8W`pXg%#TQDSSjt1$l_`72G7O!?CAp8)MVOPYGr>fmwF z3Wa;abj`6cTRtyyJvYCE0PWswt7tV3cku?x#72JAmE8epy7gF=A!_`jD@^ONQfQu~ z3ZhSPRy+|I&ny$vrsc|d)|?xYMN3Iix@Z%bKj5@g$m`M{=c4lYaSj?F4ky3JP@nOr z-lRojy#!yn?)vKsI@~iHgcbalc$A>Z!CpaUk;on(Ac*W`oXc?`b>*W^bp;)SHU_+ z$KAnvwF&c<`2JH9z|m$k6298`WLBKckMq|n<&*}-=`6B}ka}J7!p{b)<=14-pOIf} zVmb(UoONaCWKNx&pBkDzE1kZNQTn7&!a~{4RB};hNx6HABvs(XL}Y9CJyPyH@*+y` zsYFl>+#=NnA}y9??Pp2mw7o*n8;;Y)%lVqP-48)|4W!Rn!1AD@`JfWGX)>Gj0dV7v zh+@yZ$X(Q0GhWyYvN9TDOSn>UXa9jqsK%>zbkRv|n0g_6^oQRPt`7SQjb(p2)a-Q2 z>@NUTdWtIf??fJ-R~%a?-Da9mt_2b0n8O~c?I<7HDrRis&u&W#E-`1yD`qQV)1z%K zcT+O%?EAKJibCQe9^ZX@CjV$G!6PvyS%rQrXsunX_5xMhSP=4HWb_<%ZQL>G&2!^d zG1+EVwrR*W8cfNxh&(}y7+GOCIACYmyuqMY-utoYGSvWG3QKRB-U!&>mi3@qA9oI4 z9^JNSUL*5l-?Y&J7#F@m?b<7L6LR~)uxt^0<`RU4Qa2*NbF=nmRn9xRJ&QpEPw}$v z5pMfgb=S(P%hhi0HE%vp*^dcd-dcwhX+2v<1fRNeY52yhR~eUOKZrg2kTvL#70E*9 zMqZ^Z?$}0sz46Pgo^WD1Oc!olwT{PPCj|Iww3_K|F^x>zYvxbCS%ErwSso6*Rff7~ zIq2VA%-nUCh|3<8l&cz(lAV`2pZvJpgJ1089HsvdsAz$eHNhi)kIMmeM6CeJ#&Yi3 zQ|i(JFhv2_x}*I5O~TE;!~=!Dqg~ZX+XuOSU|bgJm9~RFwu5Cf%?AWC-w|0{g{$G= zRu&MxeB%R{uLmc5vo!@elsD)2qX`C|r}RFEEI535Em;}0G_wEYh+DQqQ|KduWj$(QmZ>aLiLuEv!z2(6KDzsN*%ddtyw2qC&#ITWplTbvAzORzia(px;%KU;cOZMDB&dCyjltN@+gonLW z9LN#S#!ejh)R_ML<-x;Ir0X~u%K^VP>+jjntV4=Q%iq9dn(5%J{wL-`-+xW4P9|sNT z25&@T#MlRKH<9RuYWa|cadv8RHt*<+{8<%7r)rXm=EfcCKSnh}IdLnAHF zsx{E6PDDl9Uw;K4C`C3_yyBeHeweL=;k?57I$&ejy=vM2YNrc1)&Eky2l?yxu=M?3F|vE>9jP<4)S)9~iRe+9oa6{K~km za}qFF9w$e!U_01Z?uy`CmZBLlL>MZLJFnbov$)m^HgOdB)>-aIW#8x9ccTuvD?qYP8w$U%-<0kyNajV-P@B2p z@IEX_&dU>CQyNorTQyp*Hhf#o%-lAO!f{z>)nYRVV>ShIZbbizpRt=td)#qDbxr$>2Xlz%n1%Ffs2dJi*A^O& z(=i+>C8K*ERhRyAC(<6LV>HxaTDKeO8hLj#jUy!tFG|e}tU8Bd29!s7cP8o@b9V=g zBP+}!O3ezaI%kdKcPWJ}Wq49N!%UThmEGzmXTWtt2Z|f6=JzHX26mNTe7d#657BtUAh(3*9k-K}%rqD~dMgR#x2gK*zakB2! zP7kFmfjgD%^G4p0iP)ysjw-ey@IF$p%^9nSs~VvB{UO7Ox@l_NGlaBPT|3a?7)eMf zqb8ciM9^;NwgH=UYHaC?!;Zw?#J0S-vnx-#^Wz1BoR~HOf_%>j*qH%YW;2iIBye6BH;YqyI5Q9r^$1fx_L$*2>h#)yl#C|C3wS|8f2Af1~$bw=VVn zuyFXl`E*6Edq6TqcOqPU;!K;MS+=dya#uzCiGlP378)@~`dL9#<_8yfE>*#2MCLoF zTuJ4cAMb1N#IMV~hrtcREY%ng;og-kx(`(8?rU#2{CV-u7_aDm+#tKmn)C&9x%@dZ z^$1b8aN#3P$FOT;7R^3W8k}oFRS2jKHaS{LJ{t^XB&<*2{*z|VRVVCY^qN<6mUNGD zI8kN5?r@!V7BR>#agTfw66u%=3=p(u%9_b)nY5An>?d?c6xSqfi>Ot*s8j_zBf ziI5T;D`GCm=G&TKLY4Wjc3pD6puH-6->tcZ^LIH)k+R`1wc6y;(%MZJ`uo>(Glr7g zKU|BKL!DG-$A&EYI-_lvg_@LqCGAma(2#iH*y5fK#$qk)QF1Vi&wgIjsUiwYU0pay z&eW-^p*r)G7gq?42;y_vsfZin(Os8_qr1=Qy(pZw+o7?H<)Q(<6Focqx zGe8`h+}GMSuI$0DO<)(pz~XKDJD$@%N0-2?3np2eFM z{^!*LZGjl^o^taP)^V2V-z!piTYVdKV;I- zM~PA8PMX;DLx?!NCNj%)7V*Tdd*grHl@x=e%ube$Ko9dKj5TpIdr@}<3 z+%PDJzo|30;N^4IZ9*cIcSMm*%sl_RHCd_c8aGD#d#{I)Vn58kq*6@TRij6TUnyqx zjPUmBWxZoctYu#aTxj0Wh$;VC_OG}f`MX-qcg6xSb9sus2g9Lnf=JL#OouvuJ7d=T ziDJeFavFytu;9lLv>ecHVd2G_9AjncQY1r-3NSYj5{9SQ)?_CAkdzVWz|Rgb$${W0 z@=%#KliVr&XObD5rdICh6}Ar}Cd)qYeF91(@_)40NR1RWv|-J91Azp6M#P}C`zeDlLVVjyg%Fw8MX2+Gt5#AZv*Ta{nZ2tKQw{sG~@4k*PtXiHaIw?oWFx-R&xg*}Enu))XYwi3gEo(ky-O))<|;oj{zMG&(_?K@R4Ep6q(^Lj<0bF6A6 z>c@)%+YFeyTY}{z;>%30Ds(|eeEal# zLY^g*s1joIxU$pVQls+{&jVqUU?rY^eBVde?&#stg=R zMR1p$DiTRtv|_=-_Zh$HKvGqkrd425)1g`w_Zc&O{i?hCzbLPR*EdumB;c`HIj0>Krw$?1Y(Ml@W!u%1$1?I!yH9t&;lxM)tu487r2~x^if#S-c`yg-@ibdBWm|$AMVPE`}H9(?r z%7hQggoepPSs9)e+f?*jM0wu$TQ|uj4Z^4`_XyyAn9a8u{h0pCNq{T`QVScRfNygx z6+?&4ua5QpEQ{#8v8-WdeCiCikV0OUj*G`$ij(0u~kjor1b2uQ)BBqU0l4D~4M}4)%M3FN2yOu9v4MM^KO}m=%Wmjph5hMqmXcHP|KY*UK zr3nWu__`c5!wM$93D3!CGDQwdQemU%EDk$_p(99E3T(JiQ4>}rZo zy>?y`zS7W&PhUIa?Ok)xMg!bNArpxF1#fpncFtYW{p+mPFY6eqPuMuE!Vnk>UT2TP zyT6+ua#qch7&y3exNNJG1j(Y_1v2N8qsx6&)Z{@;9(mStyU~qSkvDec)V1WabFNPq zktyBpD_tzvrt)~Es~@!3kPi(@eVI%9)>z4Cws9((HXD(Om1%&cYJ@u@_E+tvh3|o@ z`4Y(K)wo@X(KSdRJjBg%b}H+H(P0%8x}X%kP*$b5;2E{YToE|#(}sbm>a4Yq_q<5o zs$U*PFK28>DDMI*$as!5{wtp#pdOGLXZzUentFlAqKt&ezMs{uV+7Ad?w7wf+(Dm7 z&;-_E?Q5%tUc35qMX$}hQq88iQA^N-Z5Pr&KQl*9CQcA^?jIdbQREwb85&O$vTf0! z1#x1yz+Wo$S9Ok!D;Bhs8G^MdeuIip|KipZI1mb{H+<>ry$WjHO}=GtlzZ;HOt zJ-HWUk;$|+m*q;LX^1RIkJd>rqsG)~2v|;I5@ygj%&(h`DEUnlN5voaR~O3=N$G$m zSO8r`I;;2b$y*>__3A8o;CFEzYH#Jdgbbz{>+Zhg40Jp3dzA9O!;^c(b0eMH{XarSD)3~3^^ z`=KPu`8$J`e0FBWNO*jRc1U;xKuJM&(!e#5jycPrQjzy{OuETpu;k&7JLW7yXs@Wt zyw+SXM<8|dfCb{kgT-$r6ijxztj$Cfy!Cd4jKlhf)DZN|A}Vnu^T1UGjlt&qr-AaX3?z{qEbPg5o&YCv9zn4m!}g}B6@r74=M9IGKLiKCAp}Qr*&7Z{QhfOG3AM*!Ve~t*$6)O_ohQ3z)XuQH#8R^&a zyaaTLmB%dpT%b^!f{_giJJ~ahFEfodT9-~9l2b01YSmhU$eH(>F2d9VM`mJ=&ezrx z=QuCiWiKM}52^u3j&|Ym2V18gwM7exO0ks!tsKBiM5d> z8@VDdr`xs#Lw5w0o|k{|aMe3t9OxGMymfoyKnF0g_ko{e^yQNB)X8oL0^G=EOcWrk zQ}U(tBlDv4#P5gxN-sg#E&ZkP4MpeSta-HX6l{CPlatx&;kkP)RS9axQ$>$w{apvE z+55idqPTY=vQ>&*69$OIWj=iq7CRW2+~6}&XSxs$a8!Ln z39y~aP57jEJllWtmwNyBU9Ka~uV^*!F(VnreA;pP$C#Y3v@{rLf0-hA^E$Qu@oV9W z-Q4jf#|vzG;m(k-RIMEvU=}BJoH{0FN-_W;V+%9)n=7k7T(;%)CrfiVkpczjPn`Rl zRRS(%i67At>26DT#rwx2U#a>a-W-vst*l^xBa5vB!^kuAdoo;5Z$sMi74S@#4=;ty zi(D9YvVZB+;wM*ujIu@NF)!?C@)JE|Xx^67VfjvSak^tRicWsNHAHFZgxct(9rF&= zF8@Nb;$?|PG@1VNQo10Zni?x>Fty)go8wTte_W}MEeQk7jpVx?GWlRzt`@A zvJNCn1lFsMxLwB>L!SG`Ns#$>bAzM8@eKX{i?O#1s;ddQg@e1h+rix(g1fs1hv4pz z;O_2DaCi6M!QI{6?H-=@t?$oQb?a79hfUS6_jFJ9>eYSr^o&+4N($@>07q-|hyh>I zC(G)Qkl1xmPM6PcHh$ba60w{|>aQ`_f0~HVqq1i#lAX4*+p8~{lQ37{KOff~sHFXr1eOwp) z@;KSyvDHF3caMzv38I0y5b}V%wQK;KM^iaJTZW$Ky7tC!Ye!6D$BEOI0$eg$rUpA= zrm`IeYFEF^gYF zBT@fCIXJVZgG}^UWcVV+kk1eqz98eJNKX>hh^n4#k|zJdJBnxOpCm&7MZT7zaQ!*{ zP~yZ)j)^Pe2m{jn##Y|)8R-eqm4Ml;0OD1d`K`d$pVtDIHv))*T4HnEs8V%m1>>|p zZ+&s|c%V(Nd~oYbY@Lz8c^hXpbwj_ejj(_YDc>?`!9M=BA%;_3Fq5_&h}6r{;dsb3 z7i=G8B%9xhkg_amWzU)4zR?t!&ftSsSy?izxvX@B$bvF42jxU$lzOX9 zfQ{|w+z{}w`YSO!cK0d=pn|6Iv_=mBFOExyyfxO<8xv2IuDa7?HAptRE51wN3y}{; z$i>$2!z@}e|LMS;9s7&0z5gT~*=9)eVBerIdVq=I=`N3ZgQpD@7~*B;)+vD8T^47K z0z3mk0Bgn^)s9}{$HJm)knUtT|HN^@I?fa<$Vf4G5XT@<@cPdG7Z%Hkys&Gwj zbk$L!&=SU%%V**(9)Pi;(1V(l)!)P({LB7y!J7M$?8#@SysnkH9_!7 zi+BNcg2fs%=ZdV=+R+yPb;Qk;yK{}GqycnhN}p96R2#`B-$ntVqPrPkfJNuL@r-NW zqn_RjT{jLnS)Hyd`^SMHBQsAil4x1OaCxj?pA+vSGw;8c!QF32H~lz*j+e>uiGQwqmIr!)!J>-llhKLwiY4HuuJNB z70?YXyNcoLd=HENQs8ZD3V6=Pc%Qj z9Kg;hv31ZCW4eL!d;RWkCHJd7qv_S|!Z=@XocFNL8EJZSFNQt8Zj3YP!s!1%=H@lj z{8PA$4NoyJX0Q$t^lhnd~Bt{Y91S@s)G*v$!x zj-MZrP)Fy=3O1_^tf9RBxkY~wu)8q%&wej3JHk3pY=`PFxgcl_*{hC7mwvmFY120R ztsa|e#d5=;4!e~=1#us z4oL(3$@h6v3}!~UFf+dZvmC60qH#R^(I+xVfheX|;HtY(Y~XKzbCUQ(a7GTD{&6ksfX55==!x zdZ33dqKqt+7Ew?MyxxrAQMge#5cp3Q8;37kOEAsG%Z?pm7D0{CH6A%J-&evK%J8Ji zMY0%;5PI9xYQNy%wo^Zzeme2`3l50z;hKBsqkote>G`KgyCb^x+7{AYL-uIK0a2c% znh3(`M-&;nCESdSWQ=o4;dnPafnB=oV4p<7r?{x%+;j661NSorGVo_NidELB|FWW6 z1?Q0UgM75osW43uCMO>{wPmsK&k2z_N`IDaAm7FmeUZGlG&8d#p69WnykiH zwLi)?AT9!ZBtdo$2A?p`7-jWpFutA3=Z#BFvUS7h*H8ul3PR9bdIhRUG&$$KoCrce zG|uFo+b9VsW(Sf&zg`WJ4%Qf>)irzv5*G2fSo-?<8={k8xAPL1S4|c3vz;ionBI~? zz1cvY5Vg7z7NT^MxwNX6d3$IO?auYK0s~LC z>r=$j3?hOLa-!sF_fx+Gs}y&W;*3(Kh*x^=W z$ybOw5WL3O{HcALBTrG1rd_zNT< zC*wzVIKbP9+%gP0LP9m2xx)5jUO@e(x53Lp#fW~I9pZ|SJ%i>*$%O|>r=Mf}H6Am? z6-Q+c-Af#{)=xOkJ3b@Dlqht*D# zEDk<)lY(cCJmy8y`+!rMgfzKhG=Azv?Ssf3TVJGXMo_pN{Zv>^=LX}=|Di$AOnrAZ z?0Q}idxfQe%mN9JzKKaskO`~MtD@<_^zoku@n`})XlAWST`A>YXqDBptg~KkU; z3aXyVPno!KCMq>r$Evce<-U+NhZy>aha#kuvaM1|vw(WR}{ni8Pyf zIo6h8yqBZL0SQK!<~aWV<`oXX-}&ENyzpBKcLHM6Im?44`dwXPE|surzyB zk|qnT1@YLKdL)^53j`f_&VSXSm^r1c&Q`_fK4Cw8rEIfXzjHPGwQK1Ar=HtMlh{@j zc96108(iE+dlfEHDii(R#5CaND{yL!+%?Mo&;}2$vSR!cuKXP!2EGzO%6#N8j_s z2GEYLZ!%P-<6~u6*onn#jxP+aQ#Y%CNyCU^+_*zrBsMSdM&MK&=Am6eJ+OM49f0wC z2xKV%WEBv(u;+3OYGiR$Jz_^>S}ao1yPEl0y1_pl)&9#~lFKCHqi{{jfGm|BL9g^S zxoWPpS0;^Kf0XV}Ktn>As68~f{(bJS347FfhyC(F5xAf0)mFb=PjpOd%_Ap)1*^4! zRNHk&Z(ipLbLPDU_FP)l#i%7P#4ztITFqv;6iA60&W3a}$}Q>JzbMi9@7lRDsW*k< z_bnEc`|Ue5`_Rzj&wI|X6Jszlvm(atU$_QiJhP4M9c&7An;k$KMQgf`{YJ$PIs7j; zGS(ofjCMHs$FU3xbu@YUpeZy5(GE+uA_7XSqc~th^5wyOA3jBGV3b>G&chnjC409B zUVu6yO$`N*gz{Ch+i&$fnMD>!o9H;uB0T9xGtU{c0(wMi)MCf4u2KEg2~&((M^1f^ z%N}0Iv8%F{nWwTQ)_(GeA(PxW)h2y3`ELL;tgLEg_kT{8G=F`A2D04Gw z2?TMUbz;|zvT9NJ0$mr*il(%t6I;rJ1m(v=51dq?_WnD_b}G!?~_ z8>e4M(gv_fJ*R+>*Y$1Er`$hy!5UwL?@Q0QI_XU~l*?W!+O6}+at&orBdStcFI-xKsrTD^c2K<_7ht` zoQEi9KQf`%87PGflf=i&uNBYlUx^-nC|1mT!$N>O1!WN-fm~-(48`-hSQ@A9fgK<) zRCD)CL2Vf5A99c1zOq|6t9jR_n2m|N@dathUU_#Mm2-}c2D~-@;>uRVfa zyr^m{c>52mQ35Rh!m;ukyW6X#_ZLmJLacA7!LJ?-MDwh>_KGI2&c%s183<(Y(ivg3 zrxlp8w2JOWL^xI&V7qljbuw&mMK3D=&DJ$UJ0wYUsvk$sp=`iS&Um@86oRq^afU>vAn@Hx%^+1 zg+(i}B9KHj`~0E|mhhb@RytEp2JDq2hD>^F?0Zm}T=Vq(ALv({mL51-2sBnI%7s=V zn(%B;GSM2SEt(Cx$!p@ys8l6Y78!!Hn|jfCu_&+uWuDav=1kMo2381Kb(7`N2-4_| z=>*DnP6`%WQLHW{iMc1!ctL@)&AE&9#u7@STnAon7EDH=tO1eXJf>z+*Qnsyz?rmL z*x;45A>MSW$!*NZEq+SMc<2Xf6N5kSBFU_H0fMbO)J4y!l`extj}=%&a96{*oA(P1 zb$LI|WJ5fZ{RGCyHV0>UTp3a-)=3+T+A4j3D4gR?uT@FXflt*}`3(u}oUSXo^*|hq<|0ft%Vo>WEdW;>p)(6pZUn&={?Q z!B$=g1nuEG;dBLDGCLy+NUR39WML-@ATah3*i&9y;2<3HO7MocF#hnXPn6Sn^iMFB zf7U@WTDPj1A+~-1ZAfkMb)@jNyUS6DW$=p<(i2=Z4+R@E|1c5>4ZW9x0kCq-q63-T zX0l8cR*CXq6FMfAn%;SS84#WQoJdE?L{FSpry6O#F^A}WPHP6FFLeBQPJ zc-9{rgD-a1A!sm*56R-Cn?M~Skfw~)O^idvjl@sx6qK#{n4Kb{;I#o_@poiXfI1GQ zLmH7mNgM%c#~OP$OYp0ti}%z0Qx5jRk1-p~RD`}OEDbZ*&M3GP?<6fDt7K6|?C%>>_GkHDgLTwGWT3{yk3Bwwo+yWH9JeSJmCKPag?@+L`*dlMtE- zg6lqC_*_suRX!=CzuHryAwi7w+T)H~0-JP$zrLmBE6tf&vc$jk}rk zH~nuXr0tSF%hirdQ`e-vk?F0sYz#gU^{C0dv13WgnJ>f%)cleHG!=Iae!Pa&mma3K z{-u{->ZmpzD1`Ygcf5>}wzP(2cpD?>T!z%cBUhcP*IEB^t_TCA2!EAJA<~n zNkPby+_8(@tf{!zHK@g~9`BD3iv~wcsKsS{VTAKsYDHQwDlV|}_o00avN8S5otw-L zbRV0q+p$V3I7auhS48gL2-#fQWDAJ#nskfWZT^t(ERS!3_N{rggyD9Z{~?H4mVu$dO=q3aRc%5ALLK4`)0I>!nLQ znDR_8yOzdCci%}V3&X%o$q~QMr}A+AAeUW_wQ4fJ&KNznlQeX6*nVfIuR-h6kD)*% z2RK$sfXRZ$cUCFBe!$LF59XX2dV*?yxO4IaUxMK7U?VW2I&^#>?4XHv8{Ec_i4$WU z8OXqk1ahLVXBK@UIwnl0mWQGXEaE_iT#!uMr$z2((gGJdmkLXz!87+(h6hy8t4Elid&3K7C`f(4YRLwID#N9TI5(_^Yr34ftfmwvFO( za&QHlywyC#gv{xLQEXrd1h$JW+J@$xdyQ_h4Z!~C7U1(|nSxN48!jkATC*YE_lS!!a# zUS1E)5~$jt#9W6Hj+7*(Mk0s!mC*`umcf{A3rM;$0FkbI*-`TiQU&wxtPpczeAxFjJ zstWbkkjoZHpwT-!(D08+r;bjmX`gy_n0pE9i$ECX(S<&rb4A6c7kuG7)k{^T7+1ojBqD5=Bl>=SK&B(B(2U|!b|b^MD| zTJIjV*gx6yZv)+~q+aOVH-NGdBIw^LARR1~_gZ~WMzs?xRs|dJmgZdAxQhlV@!5hq zDv8(g$Q!KSR%dr1w^Lib43Q`WaxNoqUXeVy(U8?`Cj22ZwZtl=SOgujzFCer;%)9^2(CEjIv?>_ex3|-m zqW51svm;0CO#j=tv4dlPV1E(_3}`B$;b6Oj3;dpZE2YdTTcO_2^zx&A7}F6?5*thd z<~0Tm8k!MD%*dn2F_O->!3l5MiGc(vd4mmuL!U@kqeT=oej|xD z)b`txZ38q1+y`U^UpqU5c@4XpxBPz`J2UveC8Nm)Uq=o<0WyjByj=TyDg7CD_O>FP z%&)|(cd;D&b?W0SGPd@y99X(T(K_Bp<>lc}r?}HnP=uFG;eAmup2RZkgMpYm3LJs~ z9OAgH-luB#>&R0e4h{AT4P4ev?Q1l$fEL8VYZpyOW^k~0C+>OviEA+GbW-a{ck!O8 z52i3i)C!YRTw65SjV=5l%MNW7Q+hxIBp#Em2{A{kL?vf{6$81^qPJBg>9d1_tu^P08wjl*JzGRifC*Tcz2=jNK<mIb~_EWfVhBaLvH9?O21sFOcThozr*S*!d0Rh2h=W>{(B`#=E)9_8qBm@IYg;g zG60cUa7~ui6EodXCX^RCCxAN=%wnO4+8b8{`ZX%pDWFKD#o75P-H))^LpV!e=F)pZ z82VKXM*nsSX>Vx_h!^!k>)LEUL2bM#GO!d(pT|m{vjlMfxX=#=v0MXvX$FJG^4C_XfLj{RTh%i{As$s)b7_aN z4ftGo0iZJTb$@=!(lmEdebLVL|Dm03KsU|&+j#-|MLP?H&p#`fe9F6v-KN1Tx{uU` zatv{c1p8D%^^pAnZc$=zpU^fYSdt;8EwSZ+H8xaNz96^ynPh5rPMKB}7;BhB+K7H4 z$YndNneUd;I$DfxhD=VoY&7(Eg+L#53U)NbEOBH>o$=o*=mQWv0!a(a4cdLgzG@uM z{>$!>qawFdD}i>d4f)&0)K3ARP8*yY#rfS?M6u6@D{I~#Eocd_`6%{xWh5t=xOQqCAG zv2U=vBX2NA^*5N_AmGvZi{@o!df_E2_m3IE7hz%`AHW-gwNh)aMe&-s!&7h}HJz>MpR8K>;u-zo(x9l?s~q5+Zy)Oe2b+H`HD7 z_%Fn`g2E4~1D0qTrtGNbnA%ess{hBPYTa|`&80|Oczq~?bV^~9THqN|0hKLoU3Wn-}yIH-rG4i47>;eT=hqT1!IlzxWBm^Y$f zE;v^EYs$~R08KO*{HGv&wB>7yG{2l6oQ;D%UI)l$U%AaBypypR_3!?S6(11J~Snd#_k-*gmkLsY-vs&@C=704IV|W6R<&I-GM>a zSq&vm#?BP77S%6yV=}yicjwFxbspcLA4>G&g7IJ2AHm=yq{EhlClwX0;EbHJU(}(U zD0XKwpWo(d;0v7tcF0R@68Ie;4ZHDn#|2do$aQ6;xu$)iRH)OFnAkUp9v8fL{m+vS z=dx)u;QPezRZ~y$@8S9TQFO~trBi>-OC0&!(KU!%{aP!Y;oiYl=p(q|=&-TwQi~BE z7xl(sND3WEF^t*JxU_oP=eBxOUTjN!fLJ;i3b3!ZG z0;?Hs-221k0B!h_DUw-6C)j*ixfp)Z&g<6l}*38l4qhNNoz-_D<3J|eCjR1VQoV`b>*1Mlb~wngICX*A$lD}YVKnv5ceQ^!EWL86wHByHdp_nmF~d{ zw@L*67hD(kP@10zo~Z0bmb`izll0U=ecXkVG44{r(FXcY4Q@$x==Sw;AY;m}MBNFs zuTBIK$Eu)$m+!3`4@GJhK>?6P_HIoLHBF-;ak6o`uTc6Vs(1=TYRCHFdOQ3CVNGQ; zoJ#hmB!Q(tF99#aKF|+-PzU|(R}8jYKS{EigkFBYf54NYCK1D$nl?K(4NDxGpO};0 zOB(YmBv7#jt#%gR?tNG0Hl@@ZIdl+RcF3$tu*gUc;nWw|^IT2gaDnZxCWdS`k%6vQ4H zrv7ZhFdvxGV-*YRL^K1&NGP;4RPOt-l%v$eH<@L{zPXWFtNS=lh!sYU#Xd@V(9MdH z_o}=o(N{Td;ZHnsqy>w5UZ>yTp%=q8IWz~gCMae@`GkN3B zwNvwA79?JyQ%)Vu6L-*OKrN&<4HI33 zjkpw-4p)l21DaY}>x_JApBrO>e~DlqQzQPz-0fX$OSIp&o{}r-Y=i+?N@$FF5Vn$MY|)V$jjpVz3J`}>JmqB{5A{@vF)+Vq;L9zJqH z8!J2{qc5oIVNRk?COuJ`&b-?)G@uomu|l|^3#V!)ajFuPC=9517p3%>UlAEkswoC= z5nivlH%t{Gh~t{aDxfy4P7e}WKekgyiOp05vg#g^ye#wwx%SOD$@_E&Y)ses#IAUC zmSF=D=M7~jRfw}JW5!&8J_`_dQDqvkk=3P|p9lVI-hhP~B4H>Gt8=joTF?8H<4`uG%@ zj&2z;VAnyW`~|{~Pr$|z9 z?NjBzvUPT%;T@7rr9oI6i&AJ=h}-^3GHKpLjdMd6wU3RQ9IT5o{=8>~q(2FMH57`H zrqmSU{r0UV^Z(Ybm*@Xs|L^~QzwZCntk=ufoKaxJ8oyMLZ8$Y6)3N7W}lRO}; zARr?sAj7KsTO!Yfdj?w;EZ0MF=Et_ScY@}hHFcBhbtXz9ojGD7wGJkHc8Z^#fAk%P zh&D4eQa&lDark>8`|A`oGfrDuJ>~v&Drnf+Sjj+1XwV{k&dg&7|0IR~Y4YKn+`-DJ z;1#s|SOUka$Nv)5AvR6rRJv?WY}QAzJzIuF)n6V4n;0QwrkoQnX?D85I@pan3#qL2 zPgJ9JL7=QlzhhW=XspLdOij>X6ic*mb#052T7+LL?7dt(cK4phOr$fJ&}~?lB&x`z zK}-cNcy1rT+{n4bp-ZPwQFZ;KZaY0s>J%~BF{nHw?S~?HTy9nbCEb$uzwVs3W_%U7 zos4BY=v5YY%UmJD$7NW3=5G?odckYx0FjokIRP<8-tg~`J=%BIN|N{sCuM%W>6-9E zaiW~lQ6V||{4PDp1TFWgD z`F+1XPve$R!t0{%Jxo3^jFKDmh(C{s{TJ@~*YB!jF3=r!24&`^98!;RNBuHVHL0v$ zQJpztxOeRixy0^WzxGiPuy3fd~p`|qr;I(Q2pCA zT(3j50&>qwpAB97^^jzhxtjz8nUegf5*Y?FUu0~h;P*0&0W`W9_7S_L#hFPNQ~=Mq z3EOQjPM2}R=}3>QCS{>k8>jaEXK5D=w4O^oDul~_?4t(deD7%w7jvG%xP1C#h zSjJLzls5Bk!GZV~F}x=H!`c-wdx+uuOYrz_a_dePQ5AzL?U>YaEJ1U{_vlEM;`ZI~ z`9z$4y|Jd)=_u7>5*U&cnfYQ)%VH$+F7+8&RC5fAKcz6V*U0e^wQJg4qMgQ9{=r0Y z{G>WTru=~fJxC!}v`7j+Uj4xuSu2?O&W^ZyG-!P=m@v5y(mJe30_oiP^T!)oH1fo% zv7+u-FWlxyO5H#SbWuuVpTjectmqlTod|K5^mk`cqIO+}&0WT<&o&O$BDB#R1tAGrN`M2#1b%u|8}YVY5xRTZ`Zc@JPhp_O~pV8!DvNyN-fTC^>cgM zxQbrG6Z|OA>z~++y*hYTER|jimwd6(ciM`v5A*RX>PcKUz<3?= z)SqHp?@X6%w$XCZh7SSX=9VtWn=NAUu66cAQ)l3*+^i6#m4zB|7lDmA^M5b5toJ6| zXvB^!9yu*JE0kF)g(!|7a%Yl3*?FkU8$y7*z3A;QjTCIRQPP_%DW6c-0u*vVD#0n- zcA7@FebTy;mmzBhdR2nai&{(?om&lgANQEcpwUVU%O}j=bM5xmUPl9~i`R6LSqjb+ z-Mq^ZuP*e%(sVX_wG+d<+CoRx+N`Te7tj71e!`vDx|;*rK}rG63Iy2GOFjECOJ2t{ zAu=mEA@LzYaO(Islj-oCDm1++7yRqL?{faxX0kY+1u$(3KWd4i`(-9_A&wFt={RJE zco(gi3Qhi?y^h1N2_c1ouLJin@MYt~M$T}g)i3v`hi}aw=25LKEUv8p+c-}fwr*q0 zL&0H}B0|h<+lHWhhr3xAl79Ck{6mSTbKLKXyujDa$hVFq%QW=uW$T|3;<#UWlLnQ- zoKbWW$BLnRT<;pI25b1=4AG$T#PTcXGeVxkAzk-0(w4>M&mN53%@A}BO)6Symr!}X z$i7!pXW5ffRWeSE5T)@p@OngZ$WLr($l3syW||}7bfFKpYo+E@!;rYMf1t_c18YyU z+_|GAQ%Kl~4L?NS2YY)e&@3Evib>%oMEfFxS$sxA?_+5gT+;=)rU= zfLi!3*5Li7xynZzz{3%NZEZJ4C(0YhQ4uC2L9<1AAPsp?)-OE#+eb+MEQTW(Ow&Hd zrl3QOOdrHw`l0_F50{bDZBk0ZWFc@AFNVinqB@yzyq-i(v{3=razEHvVxwCmMG!6P zPcXrs1HM-ToR-9=CiGDqmSQjK!tZkreRt@x z+bB0rOv~nC>SRF?*IJ}d8zE^yB2|mjS0X@d*iS6QIsXWW- zbv0p1J&~IJr$ToA{?g#@vfpI>>8IC={8lPB8wIU zekSe)-WIijufi}nUaZ5D+TjK~q;Uebrt!A6U3g?SPq$A4+@Mg@Ly9~-_)x=P$JV)+ zZUU#Hi}}!fZbwH---VY^tky0qN#dm|j~7jj0Kz(uRWHWrC8!d$r*YN7Z~caQ^Y>rJ zsS0F}%73KSak7Y=EE5K~33jDucria;eaD97{6nNAlBc<19w!cDp(ja#UEDIZ=eN`? z946Fw_D-zbmfDHtvSTVEx-+D@MR1{|&xkrc#Ov=q=;*hH=`1)VyiB`=eKT`5`FmeO zE_7f*#U?JZG6Umi1cyJ9FhSb1LR%kLsJ4q9aC7{m{;V^tKfevYyaoq7ATa=sbt^YJ zXaI0i1-Hm%a+*(JlNsoDC5Tg=+UMFXedpS7*Q+y=blXYU7*mE}oF@jcPn?`(rM_a(_U@HgJqPx|q=Ilwk6s9M$4Z6j^5q_HJ@c ziZy$W#tjE%Onc1SEANuoYBWtK5GYamf8Of+jnYetUH4EQf>}lm)?hxeGi9+mHhc~< zyo6yn>j%Vyp}q}lh{^7C)j`-dFV!^__iy{RP;-7+OD~}j+I#BWPq7s zpw#KL2K0VV+fEH|T)iq|@3OHi(nsm(`ZkMWR&5TnG$o5BHMFSeh9wq)QlrT;XwvY| z3($X8!3YSst-51|cY_EjIfl<9o{yp?Q$sdT^zEgnBI1`xEA?>0M^gM2#I1VBqTPw& ze`fqS*tmnA(Z5W)M)MW%q=QwNS-rUdsYtW<4qh z5qN>2^r4~EjFWbt4znmXpLDD3l zfN-$oVeqR74Z_i)n?^BNfU+S!wB{uFz1QJ~MKay$psW zpPOo1#@&co2=hD`o$|jSl~PF$Eq|GQySOVar9h!%UYjIziDwASP!Ec~nu`>q0(Yb@ z0w!AG8!PZc@#dmnFVQmk=kJv57E)N;!|w{@1o#_EJB`2wXBy#-b9Iss%)mC#f-1__ z%|F3nt!^pDNg1eR1F1{cOi9Un{WY;evP8a#)D|KHz8qEX64VX<6Xw0XaXpqTFV4;U z^FuC;2tdqrvfLtbUi|GRzpe%ODVub@LkPPSo3*2&LzA*BI|meYhz7*HMmNE5=d25# z3VAlyJ9YfOTv0Ew*wFHpmpw7-Qimmu-fb+2sY39CTm+Pwkx#fnlDiWH)t0->f}vB! zbUyE%G7!E}uGXzICND+F5b#8d2YQ&hlDhrx;BcwLzLbm>Pz*i|kMf-5eJhx-#hK{G z%-Eeco9L%G@fEy%+e=vIGYS{n)!;N(B`WrOjtyZ{7vEHMhu;{30=_$J+-pIR$J_o+ zI+!Q|fhsR?2`Qdlt{AIdg681$wJhJ08f#?F8qG|m3*k;+Af$`!c&K1VuuW#|hK3pv z=hTP?zD?o5P=N|H#LuabUWi;9IeBZ0_4Z+uUj^|S^1Mn6f}s)+^1{KX0nuM2l%^Zv z3FqrmzFDuZsFy{2QDq`i4|}7lYZBx+qiav(!j0Rw9f5DlZe(=M)1v3WQ4+c@=1pUi zJ=vni9Va5z^@49Jd(Df|vWx?7j+~?$`9_`!yYq;DZ7j-?G(vxm))~ic|T=-MraJ7*LtfcOIeZnCY_CBrm6uE z215So)Y;$puCJmVJ9wry)4WsX`<#7cP=2j^q`YFsQ=*9>gtWyt2S9M6~iB`1F zRiJgk6x$5UIrUI*{rgFEx`zaVk%#c289A6NL`{hr(P=%tFd5z4)Kl3znxP+@4G$?v zEW$yQ^$E8~Lw@ag)=gR=8^BE&V3OorXBLySXI+FYss{crZAcE1xDWJ!e2z8e+<9^DqQQ+h|d^OIlP_cL7>@}8qd)A z6kur*R`}JVBG;1w9t|*XV zdOk*P^J6|{qk6Ys0ia?KEiw$?qYvM8Cir>GUH%);zSJ=8Vj zz&=37Ud-@2BY90Q$UrUmX$A$TPGEn4=m^H?2Esd`ehvWw>1%(OdWAg+h7aH2OQ#&s zX+=~$rDj*kK)a10!!=@EQ1|;`ChP+0H-gqHq>_H9U-!HZ(j|-)y|7$#D4jd1Hhu7|05DG^+1Lb!?ZDq7*}; z2~Gf~Pvm8-A&HiFFuD=BoN`W-Z*2mkyy(IlgumBa{(y#aiWW?!_Ev{T1;Ow(xl+RY zO~&2pZN;JP91pZok#@u9Kk!(afW`9K48kWecmz@V>uz?S!|JD8YdTEa`44-$3hHU3 zwS?@ib$J)k$Wez3JS{VvQZ(!y84P zKcLVP*9@Ydt1eq_uqVHTR%eu8`}pLd@1d;DS9?h>w}n>H*n&$wr z%l(jGqoDElh3y`5^W&)+$RrMWT|vL9O5brzjnTBG$b8|DM^N?4;g(^f&78g*Dq97z zTDLee5dlf+%AbIvet*>|JyjFSfxDOv1Z6b`nKA0YR!IEUQtCg<15s3%t+5L8#A?Ea z9U@Cb!WbjXI55Y;=;NyWtXO;YKb~voYSLOY;3irxx&3i+QV$4K{nUR9xmjl^+Qd!7 zduSG(fGeMpGvE=2ZjCGNhU5-6H%TctV3A3H_vd&DwaG2Q_A@nYmxv?0P2U}Smdh2I z$mFiBF)^A@Z%%e4qKE6t#PxHYt*I27bvITBOXU|r&khE>p0Z*S2{Q)(;)|os>dLVr^c|PGQhK~2z!vNf|5UTZ$>=Ie5fcgWlV-$#8 z<}TAnPLzX&>XnLDm`IFi2joTvtMjojJsYGdn^fzIdhmxvF3V+DnkwZm`gN0lgvuH8 z@sAn8)e_YZ8V?17oJzX9>B+`pcE%zV;yLYRxB5CdLncP*n6{NqLr-pf2b}eVU`oo( zbr#Ub@5o_4i{tNiYsODc%Zs!r%p_-j!L&)s++dS_&f!0^iZe2?kx`qu1!b!9V^WMd zM7R=kr+a{@tKFfZdyamO?5#DS_5DALyKlfN; z8oLfHl)JyY$Xw_1$;l$(aUh!PT+IX1GlP{S`a%RG>dn{^!T#7a1gPiu3OMOW<`QI% z3`48LC*fGH6TBOhSq^C#CQ2FRh8Bxf{q6=ar3rmiB;N84`EmFNCD2jXqF936YDE{s zqa9ZNcMdt07YYzx`Q=YKyMo0Z%fEq0NHYCB%GmT3{%t|hk{a+fBgo4J6WkXx)x*Y= z4OB_?G3-*xk?U#ZKPO{}C10Q=$#lCFXWO~7PZtSx$PjFXwyKt$9sX_;{JR>ynQ9OC z3&vQaRTx;(VoVB!FYF}zF)HAl-A`Of#mc88g1b@Nk|a`kV#Zc4JTv2B$VLGEVRF5dv}dJ%D?_J3js1@yw?+t9I;fxy#{l}F-Q zls3N(qQltXG-M!CCz^5Py;t1E%6Jj2R*{(E5`M{NwNrN0Gy1BXJ!HM3zt7bZlej*v zq&tV-rhN>z9aZECJu#U1;ToV(q9bBXc+cW{*-AhG9GRXS$B8hx00nFE<5fY9epVmLC6kRcbiCAXWg}V6h#Ssfw@Wv@+@V z!piz>e+#nN>_eEzC>`YZcGJE?D12eo*JNp>eXb_f;7s3Uv|=p9O|$iPF;#ltNK$q- z1$;51KX1o9_b_M1mS$a)N8Vr~61@J3{0n>KBO3-vZbQ;%F8uV*(@P~4uO$Y)Kr`r? z7d_}H)?~d*RsS8o`*0lYoHIXsm7>sxHPnBz2J$DS^aXsyMNtg2Q&%}j`jHdk$JOdC z*Lt4xm2?IX_mUNlVNdKMcl-+8`l>I;<^6QwQKg7e^ln^E+*&XTHuI zfN+&noc^U)7QR;8O`P+n11nIq@0)T5x`0Vckt254;+f={Sw#JeJ@$b)2-Zc8R9PSI zV`$XJ@GeZL4RiQel)KGL6yE6Mt3IfCNb}{Ms|_WxXGhuOaX5AqdImv^xra|R6* z_!cv*C$eWJhAn!vTr}1WS+bn#LTgo5pje;P^vapixAKy&yIW=*k1bNN^RG;`Rg~jI z1I*N$S}pBL4h>NKtH)i3V)%_s^RGIVf;x!X+<%@*9Y1DJ;RW44W(t4!(wJK9R3$C3&sbu=B;%90~9JwQBaZIlU#ZZvjN5cu=Uey&#~Y0az2l^i_&_*&w@^WR zqN$J&9NU}@?7qL>m6Y3u8vMv>%dDUK@6+?yUTBiFCXNLWcA4TY=Jn3k$>7MBM0wgx z#Srv?R`bDjv!FBLQ2S^;iRVyzkOgOGcP|_|V=Ao}8A3R>!ZpC-_WjG=j;63_XaJ?pB8aks=XMz6WQqk#i8GKK?Lq~iLD`)_r$S7Lq9d+eo_94>vwZb-uuN<+KsWj8k=JOP^)5i5j%JIjt z;5{iX4#=erD4&yTZN1I919|Ks-bG*y3>!yaN-7i0Z!eYTA4N4+vs>YEjiKUb##T>Z zG{(UL#}?VFx63+n`KJ_yz;lnB8hnA7X2lJo=%B4Bs4DTPHQ`MEtI~Q-44?Pjz(O@> z9a{2wiu5J)&p{`_xj)kk{J@{y&Dr=3)kDGCGBU68>6M5uC_dPrlK=%j(6C9)9#mB2 zOFQ|4_lY{OwbmDjF{iwCbvntbH-RFd_KT6>o?R19MaRV>ZU^sAvU-saKqu>3H7SV5 zD@6Fgd*yCDHvKBJN;yeep!T3WvePC;zvmT;+6kqg@+-7ms^Ag4qKj?!PgExwEttOp z?y}bxs7?o@s+r_>O=G`n9~T>6?b=s^`w?xGiqiwogl?Rc18qU)ARi%rQE*?WTBcW*qht-sIg)Miv@R^ zH*1;@_m*7=4hhY6WktxZDz)nz$TkMu=6{tDE-~^NvB3v?&Ei0x_0lUpQv#jCUi=(l z{7s-fn2Y=y8r6t(p1E$h!A4>OSdDZ zbB(KWor|aCVvgrv%4nceM)w z-N}i$ch~&e@R&H7>cS=As~+6xYZtt^>z38H#0N|@80PlIjds1t(Z-kd?5T4(JI{FK z21Mnb*h#>vB3?W`$Ixj3)(*z!3?+Wxkp%K_=5#)+;dIVTHl#1HY3OZxVm3zjJrJ!z z$m#Q@lVnD|FK@lXu6z z0t4D2^K^eT1tIyCu)g@cg}FZ_=w90eI~}8QRp$|C&Pu$BN-8Kl9>iuS)Mj+LHJL@C zlHE=XgG~H#GT~Q zCE<(94|0~0s7W`6h4yD^KCmxcvobL_d4PI^B)RJ)%E%KFxq`g)ubg9>Gph@_ADaoW zgM9HUF5CsYP)fjbSjjo_pliH+UBLk}9-1nKH*5Ddcq~3#{v5pi(@v>xc^Ulm#1SJR66F2S z4!UzJkH7*;Ky%r+O(VEznz6`1DYeFZ6xxpK@uiR;6rbP$&sGG zJ4D4Q1jR3{f6;DeXV)j!K!IX;{`VA+3hbO!=lgWC`=t#nZT|a0=&|NE;SkSMu{b=` zdRidksztM96%5^yVEYBalw6H6`&3|V^n}(CB0~bIyp9^;BMn}=#Q`78Khv4aECCo4 zOB)V7A#5D=NgpA?YMNFooy3&K547{->rW@}ee3<;Uq>oxMko5u*Ej@ugdd9eDq`_SzKh&qCltyG@h3<+OdXEBb-_O%6%vX@;S? z;z}>~n9jT4nQ;?#5Vve8TX%$Q_Ln8bz)F2QPkTh=Xt3$V)Q-;>j!R&dGQD=u!CWoC6q<8sB!j3l89pN*&(Wjh=apWTR-N*w1p+{(y91{@@YEPN||LsoQ7vH~?bm>eJ0vhcC@Ue^i6 zS+(yMQ=nU1xn!4-nN?Yi+6Uhbuj^AmlU;#W!VBD0f9Pa8fZ?oGwT^|Yz-&gwa!4i# zd-;duyUkK4N409D(4CRt2z5oO2$yz{V4I&>J|0<@GY;h51{wX@L7G0YR1S;1HMl}% zBu#BoU#dH3PNh5Y`?m|YF(D%ExT#%VD#XNMsX!5cdaS;%H*@d68q zM3q0LpIyiBCiCa3OyR~F{AuYwVXm0$;vr~z_-Z>B3SgM|nT>G6R!pM{eVC8^KlYGU z7BW%qRKY!R7H+q{y=&+)B4<=XsTDg;KwFYVOPG`GGDz{G^p-j*SyTD2>#843T_ZV; z7>L8xP^{Ro{|W2PhAo?t!B}huHv#>C^AlWEC(+~Wm>b@((0XHWf05lg10 z-k^9p=}p-(phzX%@%gQ=!IJ?pMix{t(=1gxR0KfzrUB!nMjEvczls`sl=LDRR=^#K zI0Gi<6&sptsU6g6uO}8ngIdU4VE9v9i5xH@`s3YXeb4>|-Uw9Qle1s;zd&?OyfZHm$o3$4>8WUc9qv$Ft~iMYMxSb-u4 zds{$DT1JX3Xo@u1!Ly~PSl@!fjw|PGqkkJefU$6`D)wZ+78NX0pO*_2juMp2$GLaw zP-s=RH8FjUuokCF5x_8G%41f8^J_j?I^^@w|5~HMZtu6Uk`ImCltVowTra=t1Ynf3 zNk#J=xE#_rvIb8vWTvtymuppX_2`s?e>9$42kNasf#Nh*#*BxLBAH7W38Gf->av|G z_boqaifBUVd#oYWWIcP6X3QG#sq%HU$`TEna;jB~JbAk-cWLTS7xNM>@Jyq z_MG=V9S_3Vdos5V&i|;RQrP!KRq@HonrR~AQoys5w@YX*Qztk!xSELFC?jX%j@9&X zxlc`TYvL*0;A?nV^;dc8*c0R{_#TU~(y+0*qm`$wt#bG#17&X_n#ktjC;wCU>~i7tEUg|Kc@j-=&- z3s{3su;c>M?pz6#UA?c9{zw%z*fGXZs1A%f?qu;K96+8ymq1xsEfA!>zey+!FgDaT z98E`qHx>;N_#PjBIJ&npmdjP?B>H5L_mH=U{j z=DhLe%$LivEHq65k-l7(;REIrlZ0bm1I`zK_jW!ufo6q$7AO`(n?+4;9ZzPD<~0$Pi5sk zO(PIq2Bh-7V=1Ye^~c0IgKfj&9FI5&G;}iMiS>_mq(6JlnO+w?y^LAL4&k*GaKFuH ztCAId8f!?}wUb`*-;}X4$>ZmAt-QA)-owMQlnTC^hFf|M=xU-gdKKmD{RCVs3?{R; zBc4VwxKa-&mUtFXwOuCHFA3{3-lqvuiHu2g92&|8R@L8;%~kX}AWm^Cg=Czn%*b6m z&Ndvqxzmr{$!x3`lkNyhj+b1l079GRhw@R}YQdXlw`wkbwju5H^PJ*P6Ln=UC>w-v z%=wQOSzi6O>avY;GP`d`WG1FN3o2$iG|b!WCE zEsjfn+e^z*CLL>4a8<;88x5EZbTx&qzOg!UZ-Omz*I?DHc_97W%p_ z0&&(^wjnKHYJUM=cA{L~)DD~wf>*S7OnO5_Q%K)AAs7Oj;~vNmXl1}Wih{Y=1<#g7vyj6LZR?ws zM^hx0G!W?z^huPW@3WX+9;DP0qviS^Y8-uy(S}1O(}F1I(kA$V;Fj}T1J~J&pxRxq z{z9+onT;#CD0&){+^)R)s>6U!`n%R$kK{R4#&@S6d*Xq7G%u2TW1DQdfR4fJc8@x&rP1%ZyVLf~fDeda7g9^&V!{p`c z`57o{}wsjiKa=L4=y0n$q6zXA%_BB-R`~DYx0<*tXY*w@zNQ0$DYL;cun$Z!fE;D*9jJkFId;RDlKEe-WNsc z(Sq+V$@`U*qihPUm33!G*(=j3zmf)Aty^dl#xQ>esXxUc!)iqKxS%_oG-#niTd5Oo ze33`b2{0837e0X##$o2BZ$bNo1a()Jffp{GH;x-l`fRGJY}HXR6drx96gKPA zLc}3%W0}7SMk(uw^{1YJg7FaiYT~)`IBGJIW@;awX?F|14QuQIeF0>nZb6f=^^gKJ zaFY9R=Q**xro9~uv;kElzft5C}hjxcK3tWvMEAFNXEv{}blj2~JKs?n%hq^D5J za=0^FwTr3_J5@Zq9i6O5bg+NpKTVvS#<5A}w_ba$-)%XJ0($Xqx>|A-owhIl@$8g@c(=(qi}Wql zB6W^@)&Uqi`tDj#*SqsEfA#Cc*N>@@3QLrXby(3OQOBVd3AyGew`Nu|e&+LcD2jm3J6q*w=(RRW^N(cevAAxmN*6q%x~ zD3K#Ak$9)bScWRkLL3l5l@ODaC-9B5PzS7i2AYpTOwCC!l@y_gQBjel#S#Fh_$c8Y zk-5kl*DeNA1e(kqV6b?6&i4FOZTMYJLL3i981?J?-RrOGFi7D9P8ZE5@yahhn@Bb& zE{_N>HegHRem3@H^?*-9?6Yt+!SCcYFtr}yWuq__>p)yh%Lty&c6=c-HFrp?Eik79 zg1dj@45w@WNsJ+ghkvs#F7)v>5B|#+J0VoO764_)0rp<~)kmF8MFu(Rq~}(>&a$u0 zp0M|J@mmp0uPqS}OwsWB-dU6a{>9*K$S4>()-vx-OevspNG&L2P&X&o*iPh*pwgH& z35C?nMJW0ZV|d^^9pXqM33|AWv&Wt&^_=#s9*=_<>iev2WB{0h7%OnzK%NLamM|Fg zvr*?)NfqV|y_CFrg|E~kwe;HKgtLdr&l#sp^sO1@z8}-o8(8R5TeZZ8HiQoW( z*e%7P**@O9_K4(J6ml+;$B=LJeN1O@f&+xd9nzp^!b+RjR~BLt>ZKI+trh5@JiUz7IL4 zevn3+$)Q&pD$4^@;GMwK;U_)2FXC%Hh^m?H%+HU^yW_Q;b(zd1KF8iHIAh~WmpU&q z{@{ojmXnL`{HD{spJHk%1ABKC9deJjXSMan1%GIqPYO-|hEu_I@hqs#)$>Qp^ zv>d~w-uhz?FAA5bxKe+J5OIzp-a0vtx`>cukj@$1n(SXV0L6kMfh{q23%IMUMK0~G zAdO{?cxB$a0;d;%VL#{?OIla5vCVkQ&(GJxN_zy>sbIyLKy#it-|Lu5vcU%X$;s zq7cZ(=4tewis`lKM^qp}Lh4f-_$b;JaPPU$1Ik2Yzs%7x_NxK3kN}EX*io#bR6psj z8~+QyE9Mjao&}hrRCg|c;D8tyeZ<5rJfaSKAyhs6uSG>OA?p7?z|fM`@s{)9=5CNr zKDkw*K0FwANQqGohe(P0tS#MLj7{v!rCnX!%|#u}%w3gS96hYf%v~7%t5WLJ^c7Ks(f9!v zIx@i2O5)1E;<5`jv5rV7Jsox6zQ%vP}h>foU37&Hl3Lk_>X5}f$gFJVvRVp*^ATDf`~8u4+B_%Mh3 zIt>CfZ7>jDWM*vYS_}m&q%^-Pt8K}@Za9YEn4j2Ro{?Wfk_XU+7NxT|-H#&OkL1M) z?s`#_(P85k4IYD{XlHDSR-}kVlJIdCG5E>#>cu~T)V$T}*@li1p2~L2qbxWRu}mbK zP?V=Dm_oH9I%A$ja_{_QDYcX*n0&Y{VAFQ_xb1(E`s9^kaL-p~L6XTcKZ{K9l50_i%tIIMBV~7BiqZ(} z9CcIb+>v#v`!<`+V1y7%wT8Rq5!1W>&h@_xg4;QF95+IIkZ3foWK)S=6uVP7)lK3l zP|6C0!DzDv$h4hp$s6O2(0y|REI9IKxkd20u(we=VYlAR^cUR}beO`yeRUw|OrmeH zv>_h4O#L(IrDNxzwqrZ%V7Im>%PIi0h4*`~E2K<$%2V97;0#*j;0G*Q*@n)d4v&*2 zsSn2tk2q#iF@6@T0zc6I$!5}c2QT%1+58vmf6Hc$|NCtI|9s+?^`QOKmOFp?Qq3$_ zI)$q3{+jFbyxG!DnW(&d@tq^w;eO0_?Ys87>;#?b z@&9Bd(V;1DN-@$|5>%^$H1%;8yX~IupEAUMiu6#seSie*{njGFtKKPou?On`1ci|* zOj`1gZZa5pvSHl646Asua%(_{1h3JQ_cT2ylz&DzHQbc*(JWO4;mM)qfD-q*Tm8~a zbbIX%pJ-a16|cqavZ+Xg!sdk0l6&pFY1Yp~4O0W`c^*)5oUb1l{t4Ty{SNF{QIdsAhyX(SA7G_!Nd0aXe)gKVVw9is(KV!Jr7V76>I(iP0|AdY=Tjl_5{ z=S5m>u7+bf!g&WdO=L4?p#E5-Xb0tdhSliqRM}aSq@w=jZqO7weT3hm}1_ZgVwx(J>{C_98 zP3;1%$GEW0>K$Uke4loTq6qR$;cboULo}pZ>r6LP{xTq$u}-1rR4qW7@nyjkZWbd# zeDO1-DNVb%A(~vnblSB_2&K?{Ei-*ld!o>e5rl4-B6DeeosC*&YV*Y559T;= zRep#*lO{in2o?EKl_wg9vwg(h4n{BfS*c7DCXX6n#Z)<1)6nCzE?R)GPvZo4v*_wD z|4BvZPns?EptKJ*j(3igz;8kC+vw>WT!ll$Wu@lKm*32DLjX({+zCA=IC)7bHH84{O+yC2 z-YETqmGyeX-`!l_PZbYr-tLz9ei?|a?-Uqu!O-eyNo_A(mJ*;5mB`pilyL;kDf}S# zE4TucehEXBsuBXIuifqz`b=x>NJ>1>xY;DbQ^0&*kpwho^z|Tag z@}$Hx>`pVy?}F$USpTqjAU+RA4BYW-Cn{?5a6>~jIz2f#o^d1l@TDmdV~Y>TS@ynqJ0DLKNA;gs1EgFbqgy)p#)JReHy(+;iY;62(@+oVxC z1~7KAla4xHGi&L^1}c>WQu;%wUu&s>)Zj`*N5bzzEy~MjY+A(K|9V11UohwrE0H}X zjXHE}S*H(F4TRMT25FruVnpw1qXy?TPL9&=%Ob6v|^Sl?N?0vofe*&n3Dhq=%At zE8=nd3mhbjH%~SXY^|@X#OkYNlUrgPjCB?k8hlM(FW_IiO|fJ*pKn-Jy-U9Ki;NoD zbzf!)<7ln=+6_5}UhHxFl_B<}?e_*(m(MpBk91KH`&FjeZQUTZp#|boY8V?K!>u*0 zN7q~Mvts~|?C)sTo{QV_ZnIc1XGq&63%w8XvD2cC;bIS9ebo#8D*119O69QxLNYkb z1|kE-)nX}LN+k{J(o*WOD3WYGTFFV(|C*fiq{hWLP!g@4D!1L#K?$HBOnk|U#@OB? z$c}F8Y#em}OIu67XT%d(m*cay7+?#fm!x;`LQ^MT;aDfwiT+|PNc*UiRFG91$}7xR zb3fC^_t96BS5kLsIy{Jbz)dXj(~!R-EuJwzsjhd32m{FX5VI3^|fCt9hpM zH7q=)*hr(OlYaA_L$3EU%1iL2FAO1zj$)n>yuBt%2xfS(uRo8OC!sQ0KdHWBvmr&j zi|i})_^M|LZ}O{AiQdCL$;Jnu&w<1XFZYP$KV8;d)e0ZC0u0DH$on$S+i|`W4sZ+8 zR)QX0);BWSN>Tm73(^t=t)3*Qx7B_%&*+ByS#yhpQ5{(erA##y5()_Rp%2jN5YNx3GmWl~@#i!PyE7K7$Ulx9MPtU`@yp`Lo1O#H4RU_GT_`WyH~jc9J`U3^bxb0jUnyL*2U)A zW_@F8;pl)wn))anGR0GRV&pK(#@`^DT0+R!F-_&Kf|9TKz?A>3Sb4gDBT2z&46qKT zt@fHYgXEYRj}=xZ`Ep+y+o`BU-?8^1IR@LuVANcW`QrN`0g1s&!9NP5foc6NHAw znf&?nMATP(?7|`ZR4IOcHGV2XT+80I{O~22zE+#9uF^3)7P>G+FJ$prUj1J9B2K1N zkD5+N$@*%OMcv#)D^vOJ6DH2WL3ag%;66t8*gz&F`^7|!sZ7v$JN^bS5_mCn+np=I zvzuqm4Hrv=?Kuz329vJAQ+OIaZkHmEBBqGzRm9X+AZJT zo=%mx`-9!Iaq<@q+QOP1k-jhW4>ylDx>g|kY{8ngYEuHGr^*akWws5hx|3&luU5{z zaWL>W4aX9Baea{TbTIMo*#3N$TPp6C*&gv$8Q63z^1|v7;-l>&?_bQ0j#`NkCu2QS zP$u6(QaJiuCj4sC@+z#j**?1?Q|);p?#`^Lk!ULfqDG`FN`%Uu;Sh zHna`=d&GAVWI>z0O4a<&W7sI_lv$}Q@L zdF*d(Q8V)^68Ec7Z*XNhOXFo$IWCwSL?CJMe=o#!Of~wsdL+2^py=lZ2jeNDwLyA>O~cd?r+&Ns(cC#NnpkX-akC)7s39H^_xz=WN2J+1y9_E#{aTd<8YLfRj=7X)TkT9tq0UK{gw70ri z&M*gp1-mknieTy0Rs}_q&Q5MJ;4o?w(X!_zeYO0~UJWKRD$&PLw#S<842GKBYw>() zVsH-$f$t%Ja=tWmI!gpqLu2Skt}FfP$4`&}{u@nz82;P2d^9fd+oAf-(dH9OFd7Mf z3H4kLD^^_T)7JaLJ+tIMygjaH`$_MvyVK}xUlLm=+|h{1V1Ow&rH0bqah5@E$cDF7 z_R{sn{oR+^9~qWhZW>>hi7BnqevckLmvnPLII!9C^TOsEG+VSWBd8Y6z0N7do%;LpnBU%pk& zqvL#rZ^v?-XO_`d{m4513R5KqlA1Sk5@R>ORCSy}P=H@7S+dYa}7m1;${RGFE%BEMgy`C*Dqo(=P z8ly8y1Sl-77}oSx#9nVQW3lKWlVZ$$P8Lxtkmo^fVmy1Uj4ei|7&IUwVcXc7k|hW! zJK$nx8`%4!T<5#8$5ZO^<1mvF)GEJ6xrO>&1Q&i&d3i0N+9KNCj`vrNIfF9{pzw;1 zd|4$Wztrirl@;?E8u22V3+L1UXMaP4A{lPQfLxPy8hJb8w+VFLXlFCiO5KaGcKRye z#q;}zkQ{T;jV8yrEovL$2>g-S=ZOZDWz#N~b)LL$IiYH=CCJU+JEc-d!;1IIi7G)) z9jf+UL?iE6pW5HQ?jM*gFkFZEDzah?ID^@cHqdvfG;uwDr?fancWI(Nies}p3V{qi z)#~H8Rs{QjB2Y%T&Ep~5;^9oIktQ@Ux02v}lnT2%^&X!$KS0#-2l+UMh~^b6N@`*M z)>0cs>JU2AeO-Z8P*$JTn{JTOiXSyR9RmtA#-H1Nx%wHiIX3ydg!TXzA2{0|#E~IO z48I1+7LaZTYDW(EL${NfvKBj%O_2f-|1UQC89GXTnv*%6A|`}6)%GBRzr1A23sSCUXx^3t~Jt>$_l=vk(X2R zc?(;L{e2TeK|$^Jf$H0^JZuL3VF%(-LQzh&1`oZ4$;PZc=%6tFnnF=djqk@?6dIb7 zRd3`eo%Q?0KzAvs8aHWrBwWOOO_jf>qU@g6BUYylo3MZg0HdMvj}wouVA)D2-ISetj><3f!w2loQvAhFutVX0Iyz zq6&VlIV}$tj)9I_m!5l7%VkA4Lt-yqX3830;%%TMX+`ue$Q})Fg3UNZYol8JERHO! zi)CtS^TdX>>Gf7+OA~cTf`)PL5d(~HZZ?AIrt$?|xr!fu;yE=<{hgaS0mTpUhI7&e zoR#dd>d~~|KR>-11^jX!(6e=Dbm{!jQyW+cOgKOl`k3{Anwej^eDa%2GCNX~6|H=U z0@br!j_j#WkG-1gCh<-u(g~kU1tN%#fWA;bOp=4D-I9vklA0Yl8nYCp@Rp8F^s;iL zCBKD-XDdW?wlWJ zc~<>ASEE|dZ$#8qEDEo?);`t^i#s%-!m_?yRs57Kbgd+f zzWFSJd{>6Q}vZrbOKvjzin*4mbK;{D9a_tCRdqMgI-zH-nj6w z%3ISZ&xByn9<8lik4N{w@E-oq~Dwf4$=H5yxieFsqdG5gyr5~qMidYha<%5_$aY0ii%W_l1L;{V-ln( zGNXAK$9;?a)U!;%yd%D|>NSBfykNd7#(j%?J!!tX8D79rG12czdbSf;A>3_S=UE~=GK$~ri41fM*F3o6?pD=tQ}SIQxWL> z@-b=_Cc>T9V6kQj$|4$i5ZL4#&ESh2b%fQ9&uP*{fC8sriedVQ5CVCT#o~tx2n)R_ zk;Sg51=*ttz+e?gq6ESl|Jsj#!G&yiB8wG@O8F89KZXB<6X}@NHT+&#)w(p7u+#`l z^T{xVz=z@2v5rk0a+5h`mPmC$m9M4R51AagQk(b~mC02tt##3@AxY;@Y}SCUQO{|u z?p(wmQPqfV|A*eUh>sfQ;25$K)WpoFL)SHgKqK`+#s5SpR1hAb1%Rx{R$2wb_-%jmYP2dKhzsu3Q|m>7mO4%^uL(<=C9Sshaj$Og@xnuZd7XHx$l47GzS&wQ` z00al85*{9s&0mEeusa4v$DG3ih;&%xVi!AAsaDKIgsttCxMlFi(`nL|xoHz0A-rm9 zmZHTh%+N6_moO9<@F*+^WM)2fUd&z^iyNsy!Mn({gPny}%Yx)%oN0b-79Vv^{K>1< zUZTflW*jF9q;_g4Ka@HuW-Q_*8Fr*3c?A=@MH#-GiQ2f1+Sz_xLhk)Q?oTA~5R5td z!uJ!1AX;eyBw875&V<(pkC z?Ga>Amn)M?4OVpDl3pvke&*9DJ=-^Zw)N~miuE%&V27j-PtiAYrAM@8;+hQYoE)X} z`_%km&cm&}=1ral-r6=-FSAgK@G=3CvwdfM!e6ef=@_<*jhX=gs zgU*($(*>9U#mkO3jzO;tW4_Y|k&Ba&C*%4e+9Vr?Lmf1lsdEE?(3?Z_C-!>HlRIT| z2t;k-7vh@E-dx5ZV_2{!#yfN=b8oB6`oqMBu>pB>{SiV<{xz7Ghx8!sq`&X4s6pJu z4-%WVA^VP{&x=e-rSu`t{wP&%Ff=~OGs0o%`VDpnJ8ZT(WPL2V3Fi9fJ3R$6mZUb9gCpShu) zRBcVyq?J@?$>U8St)p68hQybqGil;&D2 zzPFjI0Yk7Kx+(K|6ZuxK7()8FOzPJ$tE_w>v=~T5O@}*T#C@l};HBjZU0R61T|<0| zq9fP(su!$Wj8)srrWd)VQ_N6glg9BFRHPElN&PG*Fgix;&ffWk9EW!=WLY1$L|63~ zr76_Y@MvnW-TueSemCUs6W*HapAbZz*ruu`mFlNz^%e~yy z=vuW(1`r_Z}F+v?FaWTYjVqd>Z(G6;A&Z%aOHX&^$X>1 zaynr43+8W5O7a_-ZJQ|xsNM+=Lm!?WgOzNdADaFQPs&+o|S08%&7RUakIPt2I}K#FuU4?BG+Q_QtV(?oX=f<1rHeSg*fR#03F zoAi?62dM4zm`f3*ZR?@qMknsqm!@a1`u5Q%S}?tRx{e(J(t0Q-@#Z}r%eW2?;MIQ| zhlv*v(?9NzPTSewn2E@%y#vqbbRA+n+;V@&A5@(EQ9BB-pfg#_iFXa-p;rL|&vkSi zc&5Y8_2i45G@f|cue}?#PD@s>MUsLZSGZ#6H`*qQ> zKW>@5qp>-2c#q@Dy9)UtVsdCweDPXvOza9;hM68v179xl$N8a-PO#j26^$$#JdjVl0y5~^dK(a@<)@(q`!3g zh}rKsax#?k?zyhx+Ox2;>e`rf?X<#7F!a!=@fByWk5lZZDzvEPSd?dhCas%-)NnLj zXi2MIW;oh7O-xAUv(c_Yg$-FgRWs*l)|(@D!@9>&F7 z{|%50H`qfSfWnyOxU8AGr`X#yyuW#be=xOs#1;iplw!L1iPKT7mW40Z3i@1`XFux0>vNj2@TRj$9*f zfI|Lv^h)%%7DnO#Nsmin7P$rOPd39Oa19!)cqR<%TX^yUb@javm5*^NdCV{Ajz$I@BA{jb*?uPC$N9L4Q}D6R`Cw6S5* zgG;r^%@Nasu#%)eQUc6fH?(iW|3Kh;&A$f=34nkm)&4gK9OM50fxDTzy16of{ueFe z-)o?MIQoBGO0u9}Xh2X@V}P-6OjJjyD%sjySbUWILI5jnOd2O5*gUZl!2_)n{-t(&rt`B!z`#f#qsoYBSH z;y+Pf{O>6JpMvyX1f6(Q-Tx4DzRS}X7}RBu!G!52%fQWh_F6~7kmT5Ck(i%HGOe*U zh`XC}x3yIRGZZxl-XcxOb{S>VDmWoRE`j4O3)nT|Mz{Lf9G zGGnkLf{mwDbsQ>$Q=P;BnQ-QecF_IACg#t5%#J)X##+w|dP>_6$pcJ}0?QKMO+_f; zMz}hW5?JUqAavfwTPKm!%j5Q1{$S=2#%1#29UU>$kg0IA70oeH_h(e6KS$jp3TAr4 z>~g3gX6zA|>bG7Lz7!f=`VINkB);Uwb?Wa<&&qoL)D^TN!ed`Cok2OVB{mnI=$Cf> zpVqDeEQ+g(j)}$sw%AM5C|CnZ6%!jMCFzYLpyc(4pAW(5qi!(|UOw-a|H)@_3tj~!B(E9N(sTOsw&9KQ>n}XNwQsMD*Ziwq zY#u&x(b1`~H%?r!@AJz}U;7R5<>T#Z{km%7n7Qj#Pdv3~LcZVQ1AAvruGZwjp~fpt z`}sUvH*EH{zAe0JI&?tLe_!IRqy66?QO+T}n`yCvJFT$~YIExUcKn7uw(oo2i^6p-z7q18NN z_PyLYT>?`!-*P#2;n>!QL4T`Wsb3AR{%`#wGdf>%@oBB9a%ZvQ^s^qx=@-w3HGAu_ zJj$`_*~k@dE3kh1q59#(p$IRj#m98YeNdYzi7zRLFRuT&=Y-<#oIYakr~E6(cYwE( ze_y}$LEe4+{d_|QI0yNK^dS-0dn~c5G6ApvfBX)Cf7`Z3nNRZZ&%-d8st~uG!)-~r z{vpF8;PjiWz0^H5ICn5i4Va|lo*0c@V^EniQG&Zu zt6mAZiGNqVHN$*D+#MovxA|P2vqqh0&~OE*2jO*l^V&M#=wH3I4AYE&N`>k8f>@v+ zTJc|T(JZ;aVhZTaxgJ(4jzLm4RO0+|hG|m0G-yfPMOrVMbC)I5N!?94*g}!JRY_XH z{;Zm}?Us*KHDs8)ZVZES#hmLp1;N=zm#B`1`EYnR(V*4GaC0GFK)<2+*M4cqFmbII z#+d`oFiSB?{7B9UD1^7X;+~JaWlz}2pe%sqlw&}_xlZ?^VE2gCsN<#N?b>k7@}jR9 zX7xCRX~98c7+tw?;_{YY(uCZwf5O{+u&sI{-@XUO(ExQSqfw!KUx#%Wu>fB!(5^Gz zzWGO#!qY_m^V+(o%b1o=V;Kg=%{kZcHx%qZRYGKxN}=ox*N3|$z~>6^Y0p7tm^Tg| zh}&9-PZPd!+=ByI@Zj1Ge7heHr-3J`RXT;T&(qsw{)Koo8r3Q3*Ll%O;c23~j9IqY z10lx^5%@F0F7+}f*b1f2OR2Ni6H(@8eA*Dm>!v6`rU~qO9q$XN!!UQ<83wbObGa=M zhZTg7;!2G_!M}+gv2-wE@LXhqPdTUzGbd9Vw|Fi(xRjjC=EEgzzcS)78`5Fd<^-G< zPK}GjA~ReEalBfFH{Zkp?+1uS;tk&=iARyImT`j5S>RO>$X9odB%Z6dd_Uyo?@_^z zUJ3Br_DkZqiQ^62T)!v+1w~WHNDlMeLy~wA5ygg#py++_mV;+JaNU60ju@Bkjwr*W z0N?kTSS}90?gHS5qso9OmQC((vz-ROAp+p$$CLq6OdL7X*eDRdf8#@%`1fo@z!ZVo zE_7)S49tfD-1HNQa4GVxd-Z7BKwwrExJ0{Cig4YFiaOT)fz}*nQxt^DTqbU3Hn-RYb0i0R@=YB~F&O_XG2m3T# zQUJK&nD(C%)9JT-DL7AYxU)(3$DY6tS3)Eq;aXgkg6k*_x1d7}`J0xUBLBTH6jTStlGat6{N)TA;c8^tAFyCX?82gr@#&yF06Gt8A#S!8iY z76pjK7rDaTKSmrfsifa&6f72_!>^~$4n&Xc6k@3vvgAj_uVtW|y+a51Bx`l-b90>D zDZfT*xi$UKUOc|)*_~gu7v_|KfmW%mOzPoTV1#);FUNQh3RJILUUW*nvjwjUETzP_ z6SE(*4?v8=qlO*?i|*?(vd|PcTd3>E=8JjgG;|~={yV9VB1B~{N)N_=wNr-$V5x8c zA9A=)oGBX#O$~>f#D6qcIV=$@0S&*&F@%}4I-(EH_obwQX>neS8RjfL=~v5A^GJPW$l64xXS^rt1cGV0p z>uY@6N(u1WsPSdupm|+<_JxBN0p|=w$l&EaQ-%O3M<1oqCF(Vy8dGwTlp3||Z!9_u z4;fgIAH2rTDkF=SBFX4EHk*E7xvw4aeM^4u%3MI9;JvMY928NnIXLU#zm1_o_j>%* z`Jh!45+vyWc3Tf}rMfIUYX!~S+)km z0~RZ{W%8rf#<|K}rSPZ|6Oyz#jX@9vo-b+tUs4r@8Gs#QQs!V;EK4}(VFs6)LjIk7 zQhFn2-ol4W&aLjq$t>Uzn?!8mzTeAZVSWfT8CXS;;U@o?9EsV{-{~S4Vg3dPY5A|v zLF2c}ioD7}`-3!^5S}ID9=Jo1&OFO{>?+H9GE5ceTO8@3+^i|U* z&}tK6Kk0#?YHO(|y`7)NS6*HRTEz;q`c-2s6{YWUsLOWOlUN*2?9Xp?4AojmB}`{* z+GN86tXF(tS;D!dPo@wh6|d8XWX4Bo&cQ*aKn6*rH|faa$l?WW`1kf1)C<#KabE(j z%@k?LO7P5)%$o%tkQlGg`ymIDugc+O1(tIC+~hk&u*N71Fu6{SomK`)sTB#Uh{fJy zYbkf85(=%JJ^7^~Pd%{N(fzBLlM4DW%s%YYVegf5InF8*u)mqXQhdg6t;90*dHUt- zLJZ0cSjn5igNEO4@5N+dN6E;gV+Un>YU(TA^p$pWcXbcWL{k&a8 zc57JTA6~U9+Sij|9<1U!p!&gk6ANb}Yuc;nT|IYWty2pO3^TiZMe!2HJR3`V z{+)O52C>8=S!G>ZC=sXKlkD45kr_V5I*6n`;%OslSIWL+qe~&xT7&u?N_Ud_SZ7;N zi;OXA@Xe=>kLU^Np{T-1>S!NZQB%@!j`N(NeHiO!sF_J>$KJN0rsT|kl}}c&WBpQ~ z_26JzQB!hgdbY8i6R2+r#`?=JTTxRye0~#$qo!&MGt7~1@Crk1MD0eYUB9!R{0Hl1 z5dwoh*V>5Monr9Qne#SJ0Cj)Cyxy5;BWe%Iymkr9WZaP`+~MVPTKm{^$~GfW_nKK>eK z8){kzkBW_*b_vd16`c%{dH+-!F;k{iy(|AktcwX4!_>ol>2+9&Na&5}3CMJZ$QZHe#j}CrKM7 z-kgo1dn$@<(!=Zy*@&59?M1m6p1Yv)eZe@_K5iRk4@#zV9GP(K6qxM<%s%L(iS`%E zSbTd?;&!|K<+?3G{Hi7x=kz=qF;nKV%Bw+8TQL8DtU-?Rf@?Nnrg+$A4u|ecg|#0F zW>u$Kwqfo>nN`jS`y!*j>>*(8{HKkWDKV_(lS4x08bt)da+1GQg+KC(Wo_P&@Qn&f6$-Z zm=)c^@OpT%!3z+55298agJ4r&i3}0jy%Gn_Q15faEaXvqiPq}1 zCT*fV5GRe;pW-B;nzw5iNPP?+a%=GI3K^0hjY$=*GHBVCR*Qo#xK*X;GnnHnz&jCU z8M3Mj;H5(?PSa*n-aT(j{2&B)a))Zy>N3#K557fYr`|gU`D365Nf5qKh9IQ)1iEiZ zl0gH9rH#VP&O55I$8on|UXcVDo8$=a?r^+dKbd_-riV(W6F1SgymjlZK!dR$aVAE> zb&DK4h!D`%<8}UGRH<>l|1YDg-#$y47dOfd^?4A~gnC ziZgpU^?wSATu_ilRkE|>DdgtBl=5@d2LSmbhL%*I_I3s6v58SVHHbNQsEz79^Zs|K z#~3K^Gd?86(H(LWeG^Twc(h7xj00Z$xqdC+*|Xi`39Xeo!AeVN2$9y%zEZVueM<(@DGK7%Xv4b}Saht=Pn#o#_Rlw)k0k z_1hyyQgRwnd;*Wm8s2R$TqpYP3S#v=bZfz?9a;8Cr19PH@a>am@uJB35fcFdF|vLEvc6NP z_u#ipzbK-hr?K1>3u?^)&^~;~EVJxa8E9oQtozi4Q8=T-REH;#vd_99LlCYtY9qBe zt%>5GtR*n0#aDCl&ypW=vBnWy#94|?Z9?=bhC;OH4kPc9sZ6YywaM4EkFH1 zA?}eovwAue!CNMQrzatI|G$*TO{+ucj75EB4?^>qnT10^WI8+cNC_ibkkZj_-dVf5 zE6@j{73o9hGwp>EbZ*gDYC}4o;pCq)PlK;3v?0$Tdc7?xADw0A?u0@2FiImaO5`T1 zwn7yp-o>l(=uCgEEttLoEL-sy0?D+$iXtXnxkqP;o;Ts2LR7^~Yx2|G<+_TPO7kh5 zs6mpf8gmju~9rDM{K_ZN3z*lLwhf*4{Hl%ZKq>(y8`4IJce-wLXAaB-Qv{im3QWjZXE!$pxv2>k$7A`iu0QG{o9FYhQ-64nytbqnpJ>figLGsa-D92W$f z)9aN8FG?m}%gtMQ^olFyVLZ2Z=lZnjP|e6>4Y~ma@nEn$v-L`Qgtg8n0?5%n{%v( zDiOr{1=2#C+q$pzcMxI|ga{&ph_CzJLP%3j-!<-t4w>OXb%yCjP)}&|-qdVoPnv#e z^sH)lK8LAXo1c1hpISv9oD^)rt4O6;yJakSZGzHnSTd7JyS288mA`2wO&@X~**6~( zzI}Z@eM@KS=y^RBY5M8MKMI)-n|FcDNpDN_w2q#$$skSr+-axw0fP23&<7IUHo1#+ z)TKQiX=eL?rag5CH5X9h4I`Kzc7I>yU;|dmif!=v>Y`OD=R2RYxx6<5q zbrT0nf(M*{2k?|1XdSnp%Oowpt`@agghP2RC{GG-bf|R#gc!6aIq=Qbmd$!;0qp+W z8`lB?JVLtd&#^tjEFNK<0Q}yUH2zSBQAA1>F}k?;3DX;!fdn^MvO6tx|DWj>7l7bYIrSXh+t9sx?yMm0B^{W%GCaoZJ@&p?7^a8>#n_Sys`P?s-ZZytniEQ(vOK`V2)S zSz(-;Zx!(%b`@pbsF$Yh@%gNIc1Uq)f)uxIiFMRv46@7t=jFqodvoYcmN>2}trGw* zCQ+n%_e!%XzG#I==rsB zaeAgjBYZxJq3-XH*k5)kK(ln;*qO*KdXv$8m3sX|y9a5Fo})jJhOr?xV5VJ_mtB;N z)(HD{-JZ=4u##3G=#jf}_wUJ5nV0p1UZTAN)>7i5@%eKK%_uaAqKXe^2}WaPK&wH% z=nww%y}&*S&@A=|FCj>j916QN2QS`n!TCO%dLegoKJQ>J9vV4<3#n-1ur&3HHF$?D zlZh!wc3Cqb<#~8L$x_Wk2cyMIeM%U(ULxj_@piRFp36MuSjt6fW0DQ*Ayt2)F&T~> zr7_YU7iUi;bH5FQe2G(1tYTsr<+z@PT`SIIoGj!pfAa+Ao&Btw+;6fV<=jWb;JsZ= y@Es%Er?goP?zaxK=SYd2>#0;ZONuDsYfQ`|TmiWRFM7m(dq&^|`ZG{MF#iX#+F_vp literal 0 HcmV?d00001 diff --git a/hu.elte.refjava.update/site.xml b/hu.elte.refjava.update/site.xml new file mode 100644 index 0000000..dc6e238 --- /dev/null +++ b/hu.elte.refjava.update/site.xml @@ -0,0 +1,7 @@ + + + + + + + From 4180ec7910019cf88a622472bcc1dd09e8c75514 Mon Sep 17 00:00:00 2001 From: dtamaas <52272434+dtamaas@users.noreply.github.com> Date: Fri, 9 Oct 2020 12:46:39 +0200 Subject: [PATCH 10/14] Create .gitignore Add .gitignore --- hu.elte.refjava.lang.tests/.gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 hu.elte.refjava.lang.tests/.gitignore diff --git a/hu.elte.refjava.lang.tests/.gitignore b/hu.elte.refjava.lang.tests/.gitignore new file mode 100644 index 0000000..8cfb6ad --- /dev/null +++ b/hu.elte.refjava.lang.tests/.gitignore @@ -0,0 +1,3 @@ +bin/ +src-gen/ +xtend-gen/ From e2ab5166def9048d109a09bc47a91e62bd200d35 Mon Sep 17 00:00:00 2001 From: dtamaas <52272434+dtamaas@users.noreply.github.com> Date: Fri, 9 Oct 2020 12:48:09 +0200 Subject: [PATCH 11/14] Update .gitignore --- hu.elte.refjava.lang.tests/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/hu.elte.refjava.lang.tests/.gitignore b/hu.elte.refjava.lang.tests/.gitignore index 8cfb6ad..b778aa2 100644 --- a/hu.elte.refjava.lang.tests/.gitignore +++ b/hu.elte.refjava.lang.tests/.gitignore @@ -1,3 +1,4 @@ bin/ +bin-test/ src-gen/ xtend-gen/ From a0cf89c117d437f71bd78a35a472316f896e3f00 Mon Sep 17 00:00:00 2001 From: dtamaas Date: Fri, 9 Oct 2020 12:52:46 +0200 Subject: [PATCH 12/14] Deleting binaries and generated files --- .../tests/.RefJavaParsingTest.java._trace | Bin 143 -> 0 bytes .../lang/tests/.RefJavaParsingTest.xtendbin | Bin 2085 -> 0 bytes .../tests/RefJavaInjectorProvider$1.class | Bin 1002 -> 0 bytes .../tests/RefJavaInjectorProvider$2.class | Bin 886 -> 0 bytes .../lang/tests/RefJavaInjectorProvider.class | Bin 1965 -> 0 bytes .../lang/tests/RefJavaParsingTest.class | Bin 776 -> 0 bytes .../tests/api/.ASTBuilderTest.java._trace | Bin 12636 -> 0 bytes .../tests/api/.ASTBuilderTests.java._trace | Bin 32418 -> 0 bytes .../lang/tests/api/.ASTBuilderTests.xtendbin | Bin 10085 -> 0 bytes .../tests/api/.PatternMatcherTest.java._trace | Bin 3162 -> 0 bytes .../api/.PatternMatcherTests.java._trace | Bin 20443 -> 0 bytes .../tests/api/.PatternMatcherTests.xtendbin | Bin 7626 -> 0 bytes .../tests/api/.PatternParserTest.java._trace | Bin 99 -> 0 bytes .../lang/tests/api/.TestUtils.java._trace | Bin 5367 -> 0 bytes .../lang/tests/api/.TestUtils.xtendbin | Bin 5741 -> 0 bytes .../lang/tests/api/ASTBuilderTests.class | Bin 16137 -> 0 bytes .../lang/tests/api/PatternMatcherTests.class | Bin 11233 -> 0 bytes .../refjava/lang/tests/api/TestUtils.class | Bin 6404 -> 0 bytes .../compiler/.RefJavaCompilerTest.java._trace | Bin 2010 -> 0 bytes .../.RefJavaCompilerTests.java._trace | Bin 2011 -> 0 bytes .../compiler/.RefJavaCompilerTests.xtendbin | Bin 4323 -> 0 bytes .../tests/compiler/RefJavaCompilerTests.class | Bin 11771 -> 0 bytes .../parser/.RefJavaParsingTest.java._trace | Bin 15750 -> 0 bytes .../parser/.RefJavaParsingTests.java._trace | Bin 15751 -> 0 bytes .../parser/.RefJavaParsingTests.xtendbin | Bin 6203 -> 0 bytes .../tests/parser/RefJavaParsingTests.class | Bin 11461 -> 0 bytes .../lang/tests/RefJavaInjectorProvider.java | 69 -- .../lang/tests/.ASTBuilderTests.java._trace | Bin 1754 -> 0 bytes .../lang/tests/.ASTBuilderTests.xtendbin | Bin 4869 -> 0 bytes .../tests/.PatternMatcherTests.java._trace | Bin 1170 -> 0 bytes .../lang/tests/.PatternMatcherTests.xtendbin | Bin 3820 -> 0 bytes .../refjava/lang/tests/ASTBuilderTests.class | Bin 3906 -> 0 bytes .../lang/tests/PatternMatcherTests.class | Bin 2941 -> 0 bytes .../tests/RefJavaInjectorProvider$1.class | Bin 1021 -> 0 bytes .../tests/RefJavaInjectorProvider$2.class | Bin 905 -> 0 bytes .../lang/tests/RefJavaInjectorProvider.class | Bin 1991 -> 0 bytes .../tests/.RefJavaParsingTest.java._trace | Bin 143 -> 0 bytes .../lang/tests/.RefJavaParsingTest.xtendbin | Bin 2085 -> 0 bytes .../lang/tests/RefJavaParsingTest.java | 15 - .../tests/api/.ASTBuilderTest.java._trace | Bin 12636 -> 0 bytes .../tests/api/.ASTBuilderTests.java._trace | Bin 32418 -> 0 bytes .../lang/tests/api/.ASTBuilderTests.xtendbin | Bin 10085 -> 0 bytes .../tests/api/.PatternMatcherTest.java._trace | Bin 3162 -> 0 bytes .../api/.PatternMatcherTests.java._trace | Bin 20443 -> 0 bytes .../tests/api/.PatternMatcherTests.xtendbin | Bin 7626 -> 0 bytes .../tests/api/.PatternParserTest.java._trace | Bin 99 -> 0 bytes .../lang/tests/api/.TestUtils.java._trace | Bin 5367 -> 0 bytes .../lang/tests/api/.TestUtils.xtendbin | Bin 5741 -> 0 bytes .../lang/tests/api/ASTBuilderTests.java | 269 -------- .../lang/tests/api/PatternMatcherTests.java | 370 ---------- .../refjava/lang/tests/api/TestUtils.java | 73 -- .../compiler/.RefJavaCompilerTest.java._trace | Bin 2010 -> 0 bytes .../.RefJavaCompilerTests.java._trace | Bin 2011 -> 0 bytes .../compiler/.RefJavaCompilerTests.xtendbin | Bin 4323 -> 0 bytes .../tests/compiler/RefJavaCompilerTests.java | 635 ------------------ .../parser/.RefJavaParsingTest.java._trace | Bin 15750 -> 0 bytes .../parser/.RefJavaParsingTests.java._trace | Bin 15751 -> 0 bytes .../parser/.RefJavaParsingTests.xtendbin | Bin 6203 -> 0 bytes .../tests/parser/RefJavaParsingTests.java | 307 --------- 59 files changed, 1738 deletions(-) delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaParsingTest.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternParserTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/ASTBuilderTests.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/PatternMatcherTests.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/TestUtils.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.class delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.class delete mode 100644 hu.elte.refjava.lang.tests/src-gen/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.java delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/ASTBuilderTests.class delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/PatternMatcherTests.class delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class delete mode 100644 hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/.RefJavaParsingTest.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternParserTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/ASTBuilderTests.java delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/PatternMatcherTests.java delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/TestUtils.java delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.java delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTests.java._trace delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTests.xtendbin delete mode 100644 hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.java diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/.RefJavaParsingTest.java._trace deleted file mode 100644 index ec3ab882b148c3eebc1bf87f85043bec1a9e4dd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmZQzU|?lrbll4*z`*42&>@A3kCDMRqf|dNrzBOsC^aoBu`E$PCowNwza+J|q*y;F zHO&hs6p&a{oSBy%0u^6mZZgm93vkHb5CUdqX-)%(xvar509QB^lEBay)scHuK&At51} z{PNaH^d$O6r0_JS>nT&OqHPb(m8S}(vdv4uAc(bxnOIiK{Y=9J-6MZgtz32Fo6ou2 zUP~>p$48|`TWR~GA5$vQrwqPc4(CbWC{b!YEDF^Mq997NkZ#J-LTxbhCPMB_Wi2*P zq9>{E1hE1uD|R$sCTdx1O_<#U8X<;39b)Z_+x!tUp#w=ZX{JnQ}v}rHCTDL!PIniWa>Xpga8zfL!*Z)Frg>U!Un%tY4 zwF&=rx9ZxR*%KcNu8>qu)?g*h9QQ`xZP~Egh7!rGjB-@t?vc(}4KIu^@=^-5o>rQDBpxQ6uj+zE6 zr?O}mWAwpF64d3@#HHb2n7!^?em?tCH82W$>yjy<4pT~1(R|*`Y)zRx16Lo7XR(K} z-SA$jrhPYI9<9&cx`)pXR7-{$yj zXhhw!Em!H567v$J8k3Ny_eh^-kd!bBjqF`R3|a_8ORs-Y!wUdrLI8mIpR7anSq~tP zeS-pU1Pwfaj0^Dc3-t0Oy|8PyhFpN0S|J(9Lt<>eIBe;pk?Bz)(;Sm%9?!ItoC}`f z4AB~Ehgu28g(Y#m9ykvy?y`@sy0>@r#;rB+YPMlS4^Q~*{xmwv^YiZStJ|E2mhTxx z$XfeiY0c0yD-pVp+5P8&g|^GFxiJQ8Ic8wAi1S^Gm85X~+`O0;cVi97Ox5Vm+gH~% z-Yiz&lDVjcLAfM;LCeOhFIb~fC7R|SyYs}mvVS2JNOX{(sNsa7VIzs-PhOn$*@E#e z;=`dJ>$l?yxd|t?lWFqP)w;l)2X{7Mp`pp0v4xx$VcUzi+)fklcW{D=$zaw+CO&Ch zy}$XFL-tI9Hujk$M&AhR5iAkvrj=!`xzC+m{S7a+$D|`xh?cbu8 zcO5*t-9$EF7pCL*;BTi`DFzh(EXEA*SZpB0GcRZq3-C^4g3Ga4fmZfKvN zLi$=hauwQkLUyWEXXRJhSMY_CK)y4qu39lLb8?h!l>*ht^-@=PI$*)i;-6#Qk1^bAP3jROD58@n4Ci~*Num@z5UDmT=>*{ zyNKNQ^c>y0A4?X9NH``3#p&UjzN0R#g*Ipi-Q*G zWZzuQj{PLSHI_p^zNY&?TYFwQOM7iWdI2$0G7Bp{##33YjMcu__}i4cj+RzClm^v1 zKdh&vaXLplOA|eya#>*ejucC{TSAaPohSBPRTB=-&Co-4GA0S!TtO?>WY&H zN>Nx3^(03J%0^J6;2EOQa06NnpM*ylkY-FTYGSZ==tW^2Y%_Y10E7L6UX;+menii^ z)^YIjLZEReGY1S00HpIB?0I-0z~8O)a1b4M@uLnm+JBxr?C(KP{jH^a*Z(cH{&~aU ecl}sCjRPW!P50RIKQ7ndyn diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$1.class deleted file mode 100644 index 90fc003a175e5bc77903667c250174a6fe4ab8d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1002 zcmbVL>rN9v6#k}NyRxoO3j!)4O2wr_R}9gZ68|)6FvS>ZNQ}RR?V%mAoiV$!JeMZk zVxkY=LmAI*OT17?WRsmabLKnWxz6_=U%mm@K;WVzu+h&#iY3KHTqvWOBi%Fo? zHj#{XWuo%)Na^IM2;4tK9QAchWim=gS~@DLz+$l4j?5tJ8Pkg?R7JhRqx+_dS%LZE zfNj&wV)8JL%PuYn-24B+`nZAxf$3pHJDIj>Kto=E+Z@(d%2AL1fHyrXV#&odfw|+M zKFw4_KBjS9;9>B3OtwR(%@YeD;B`!vMD#@E%~|-zeBR0Dn7jE{N3ltj?roFpo34)) z%m~aXZ7I<*ZvE8-e@kmhTCq%1O0mRqQs#Fes?~g0SSs=F;wKC$y3#jplOO2Tk!zP^KuI7Bj#aHFVdw3r)*ZGXAZy8y_FQ%2> cm}(=YGHw*8Wz>0hcnEId7E2y;=HB`H39j`HEdT%j diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class deleted file mode 100644 index f7f56f05e9b8bc22ddc22201b89117c3c25590ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmbVK!EVz)5Ph2jn;Mgbv;_hMTF4=3MNOj$kczleAO*Pym8$oRJx#W9cct~Z-vtLi z;=l*+QHZf+iKq%l^su`#qc`u(%+AkW-+utu!xJA3fxTG~QRXPJbb2N)WRyugjU44J zkB;c{9f!vHj1p(;2Wu`=O13}p(GnOg%&c>c3hmT69h$VrNWgP5mG_^qT)Z&rpL+Y8 z|4M1)UJJY!T!mnGBG5W8DJ?Aeg1x~o{__cQpnV^=1xEir zy8w4_&qt5jyF?t~K2`MX9*o5AyasumrS%ICBj5*)vBs00v(?fDIlZM#9 zroc*KNjkc;15dfRg$*oP86H$P)|zZp8|6&Q|HOMMI-TB!)jl_>NU*j2 z1;N%ggr6(SGT$C!fE{%B4l6srEp*xATCrL)yyUmUdEK?Ixbumv2FmPqrMt`Ch?RHe aSiG90iS-Ko01x?XVGWP)n602@Wb-!>gXZ-B diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class deleted file mode 100644 index 2b9b955f23edf1cd96ca024809a4dfb847a7c2cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1965 zcmbuA?Nbw16vm%RBAYB5(NJj%D8A4(gvwTwS_Huu#K8&LK?kS((3vIN#H*WKX7|R? z{#ETvp-!FY*Ut2h>h!t0n-J^Es0{;WbN1ZdIp?|OUjF{)k3Rui!EFme0t=72uJpBZ zBiVZFJ@s7Q3)-%hv5wts*}6m5X7E@xbr^jgg-_LJI$Rc*NcgpumeK3@g37cIm})e`j@u5ywlCe( z?e-QBQ&^!2fzqo2xytO0K)xRCNgHK+Vqr|6`u=q~IE7JxvcW0OS3k>j+48!+js->= zDv)=(on09{@OFL4utwPQ{2eb+=6mKGUP)@Pk;8<8&kQcFA1MN^G(LO)*xpE6>Rz`3 zXDYMrQlkigvkn}TY(AZLZ~ zfg1C@zkYApXH(LwgAv#QB~C!|$(FaDh-Kkxs`BBY%v`cDhk2u}D{!^)F}lv~7{(Zq$?;%4jn6mg{WZ+++gIW)R4z?t5`8c`nKWDYDA}=ZMZ>2*+U2=1qURN%Llk z63YRnwNSuuj578Fzg75aKKU0o`77-Z#`)K#1)p;Glt0D`#`9cet6W+^-?8fN`21+u zaN-QJkCqZ{lG#m9^xAVPFpV!!F{`iiY(O_$i-(jk_s;s8rW%B9sTvCV6& zVtD{o>cejIVL$a1Oe9-Mg)C6V+Cx59$T#Rz!Ew$5IGz@6aNlbfLmd-XA4u^Z6~{=g ZbIA~cZqZHcwMDPsf0e*u>_+gtzu diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaParsingTest.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/RefJavaParsingTest.class deleted file mode 100644 index 101ff10f3e5f6e6317b353b16314c13161ecc6be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 zcmb7C-A)rh6#j<(;fR8WHr|yRB2^jIa040>qL5%#X(%ZsUQM@$cA90jnVoHT4&THp z6EA!KAIf-U+sFlI;9_Ovs>p9iacWO4x&-)g8=0Hy6}1 zx#6z+)@ELNlUZ*1JkH!ujSGGU%Zc&il%5zxm!53SHR>Q(gEQkt+_5&*X~E5QOBf}o zndGFn;?kGf_}ahK&%Y1dfaW3R%|P_>K|)=jn^ zaDMeOM1qG{3wDA>c+AN!-4FX6`Io!MPhqdJ-EGZ{L;0+=-MXQ=Jb=8_=h&KI+Odqb P_o7Hf(O&dYwh!cQLtf#I diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace deleted file mode 100644 index bb971f03a2eb4eed67601a2bddc0f6ea72a45454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12636 zcmZ{peSDPFmB;5iH%~H|H#33AOA?ZRB!oZ`2nh%Y+yI#*lbK8=GbHmG zx7w7mF5RtuDk|-#wY1tQePP#i-E+@9Pv&`s zPvNic@BGfa=iGar$;^FRE|&=~aSzD-E@Ryjk-KKdJh(cxU)Q#E=iaStySH93x$zSl z+jef;wXJRM);)Xov~9fR%C_D_a_x0j?%c9kc^X7rEets2_2(?^9vH2Gv8KE|v*X$+dN|T(+Orn8V^XKCX-4!)8 zm^b3qVBA z5QI+pD0Y{RoTnpSSuCSC>Y=`m8K_;oHqxF&hIhlTe zZ?yG;F0yJGtkzZ{7;Iif&OecJu)BerOe5M!1cMVRl`{m|d2N$&T6BP%nqctYG;;a_ zYDEVR(u#(NVDNB&@`wxv!Qk=UvW`xiqE6m|A3**NRqRWey% z%vCiO8X2G3|` zk0KcSbs6Om84iNM_uLd)Uy4p+@V(LkLAYVnGS%o_nmycX76`(vixVMyIx<8AkKL`&@quA!4swF%SED(fm?d(*Wpch?)Z(YEs)*NvT zpeo>E^l zkwo}ivp^93AlTKVoIZ+upkqW3{)>;CM23T4$Rj_u{8CK(0~Ih7lc5zW5Z`Z6;|y&R zD^_5!?+Z1*gJ9^oT8e#KOEEja&{28y%9WVNt1xubtI>;I7N8TyYhP3liM487i|y=uM0(CZ5{scMnt5YcLhp`TY$-uEjpW;h6je($E3UPy~* zAz|pehhnd*Wi^J*YbOyz3_r!*RD~N6L$^T$kqVusSI$8YnY-4rY7H3u4f5>57FS7R zu1u|3g@4ssI~Oj*fh=rmEg-tvE+!mmC9gD*L?mSv2qO9FRjZUUNU^+MlUtK^wkd+h zCO72~84iNTWPoDJ%h72>CVd5h$R~U2yH{hWlk$t|yN!+SbMOv%cY(2_9dZ}4h$_HMXBTZv$Jb_EUkf3$bQvjYW!;U#NJrIhQz z7zoI-ix#^|hL^}OR3v^gtL|L1$Yt1snpV4jIW-rPkZR?O#U`>C-fG$zh9|2PD}RvU zlYWccnk|2gVi>;K&H2Pe5ySBH0ghi%j(%hKdY_$P_^#f1*(=v!3*+*Oix;EAuH09o zq~zUp1Zal#-TtyMkHi9!?5jQZFW@SFmGBSX?Az8tnp( zkqMIUbydF_;tCU441deCGYr2NRIL0yioa;ZiDCGAKK2tEMGV6q%5`!rHFhse5EG`I zA?EH>teR3ih?skU#i|A5In307h;`XeMdKRjcI3yUDv4?8`3)|V%IgZpf^&)uCL{cgS9k; zlOcA$o8z?4MuBMwA$Hiu@o#!4|FFl-5PM$klk4SrERmnI*zmJoZ#!|@^Ym>RKn+;)c8Ib2g+fPQR5 z?A+2RK|M7nEMP%DG$Qt=8Xn_^HPp3}VWiTULqAhSL7~WlNEgk$JmzJtn5ihUg{HrT5ZWJ-Z zYsxvU8!Rw22yy&0(e-?a?y2JVX<}oDQROogkNGXZ zkGl==+-k+xkv?J~p6i$r)CohOnFTsvB0f>8M;L6ZRp+IMA->{cw|O|e zp6>PHw^@E-h=0b*@xgK$|1;%whWHoOD8`EQaTM_{ESnP4X+&Wm3;HmM_#vz02Wx4W zoDA{jtSRWM8U?0f0Pz!6$-QyX7Z_ z#BQtPyUS_(-B!uOkT@{-xQxjic=jJ!f8#RQ=PF5j!IUF%1eK$vy3{ISNPMY=<4@OM z91cOy+lIQv6J*#ibN~C&>Bd@KVeLNtaB^Q8^06kXt5}FL#wBU8WN7 zwnqz)G|McZ3=NPB;3KJ1@Zm*8Bm*9H1U=-Ki9dJr82H1A95bg`!ZdQUEaD+r7ZFd) zl?j=^Dkf_1=By++VJgNVh#|Q-U~vHBklf>A|1KZ#ZN1OQq)g%fH_1CLy%a~d%~S%8 zpan?&z0VSSXn^Dcy^nIr0l5zqk$k{!32x2S5C;@P@{pTHAU28^l8^L0$cE3!-I(D` zK2mB4r8L6h)(i*r43Aqg5JU2qH3P9x#E^WpiYq+gr3#;=p0Mj9Wty$=h#~pyGM=B< zC}K#SDChWBOEBL^p0NDHkbD(?rs-vUQcY+i&$M!a<_*GYXV?&IXaBdzzu}Tvjx#T_ z{KT+fEsci_{HykFsAfO&X3I|u8?ME_e7c~2*9o_FaRT#ED}fj`JhzPfr?vl;2KFf0q1XqKW;?wU(b4##*Ma|IY!n17j`L4iLjwdw}zajUtAzKKXgML5_hD zannt&K&20r4R|wFzd~KG+JuJrb^&u5=vsGd+g#3QHPIl(t~TuqV|%A7R(^G5E5`Qv zELPXa$dJP?#FpcB=LCXI@(9SUSw)~YGml-VJvNd>{DNwi*g*47M z*`cmCEdd?-8C-H6k-}eEdIVxfl~pTN{vgH6{1&U*T#+iX{7)%{l+Vri#6}TAYI=a<-z-PJ zk(%zaGo+g3qcSJ+*urn*HgyT>P;y1eS-HWkV3}vTP!O0D!eMea%-JREu!P^vw+oo^ z+aL+U^_=k+b=@pdMrQY(RFrfr>R}ZOoTNGo3bh+8NScu2!u4L5hFbZ?U?! z7wIos{!NM@{g|8ciH#zL^sxZPC(F@qq>uUR4Cxd2lx~!pu!Vn=+wgM{FZUf^$ zE5?%PFpA8bbjgqjF|E%E!C{`fzx|=zp%1cfy}!V>^bjc&$|Jq0@;$@>2j;w2KXjT-j3hH*SbowCHUQNtK5n&jHa(b z3E#ljrKJ~0RV_{l2dkRF(t>&(s!6|`5!rUrsX(@~l9j4T&MHr0h_v+;t9?AMztMXxt1wXE=Ri|p|rkJCmk z!m$5h1+sYCsHdOWktv0D1hTJq*wf1|(6X;sS*$?zXI}P%%6X4|R_;_F`%9|}-Xf9x zrPall-XT=1E_j1P_E%OHJFNXFRv>%cs%L5srxe~p$br?xP5c%w2UZptye5zcZ zg`C&wf)&Ws;uEo5PU2?VgHOadx!zThtHmc`yWEbucxaV=pJkVpULYNAaY{JY;TbI9 zTUkBSG5vB*rlGf5G-`%R|;xd($vQCU9rJZO1Xf!r5;oW+W9fdaV~@QIj|cw=Q--xvIrOM^+ba>K#JG>Vh{&*YS2?7#4L@do^DUox@8lsCv5Q2K?bZy+vEV4|yrJ@3?z z2PU$MqS=l}o! diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace deleted file mode 100644 index e7eba6274acf28458602b3512a71a41ca3ff7a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32418 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 Syhd>M4L#brAHm&QME?)8%j#_a diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin deleted file mode 100644 index b6852cfdbf336631ad9375f1f275d05869f9792b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10085 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 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace deleted file mode 100644 index 62b83224dc10a8fe1e18440e2afc889973c15674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20443 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 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace deleted file mode 100644 index 77f0f81f7d1866febc4b66e3af6f8b18db30c5d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5367 zcmZ{mdvH|c8OHZLXK&d}Hpy<*+%KEBgd`+ODj=9-a+2M%XYWt}k*TfF5(P_xAYNfC z7i+O&QEBPL5u9<-(HWeM&M;KbVXD>Eg2Slos8Ff;N0Aw(UaGZXwf6mD@(?Y(gN&R@8~@PS7F|HDf%P{hCN^%JNNkz7?uNCutW9iOJ9&L# z>%>i4Z%VAaaYJGS|Fv@KhK)B3+_rUMa-EjEEC26$BRk!|$&)REhrvj(vu(ggnUezgDCl#8`?a#@}=Bk zA2!8FOAd~8aEQ+QYSX3c5%#Bsm$bC7yl9@9EVZ&7lx%0xQ!4{4EnJ#ZQ&Z~ND5w~P zcCBbd(Kaw~msN`N)CM;ySGnQ)ffw{GFO!zC6Q#DtT3gw-zJo{BQ`>#5t(>Favco`YDctB02KiH0X< z+KJ3u4YcMOROSLg0VXn6cw#Z`68C`aZtqliNYKqaHJzQDH=ul)gUI}K5E|08X=;|9 z&sBDHv2UzWJx9|{WWF1Y$9W6ozn;>rw14gh*It#}AM0~fr9+;%a~aq2R4&ayl#WzF zyRMQoO1C$IwnUlqblfL|U2qVk=Y^o%9)fSE3ACpUzA^Fb5ucqXovA|QeO2&X)ebt) z2;Vj0J0LzgQTlsfR8EEAyQLfSyBK`i>x5LgJH6d4G_QGv=gQGi1r83>_qAN zWzG{a=fOC7o@z(ll+1EU&Eif^N!}^RdrW$sk)C#<^b_(N{vpr7PLw_(dFLhX1;a$( zg;4|^?-x@4s_yi03A`YICnfMp3A7WXU++*p)6;=2uOr^{sCY{M4UfzWG%;xoqV#{T zKywZ@+X@V#%aT6T#j0r#YG86(HJHU*f?2FO%wmpU76*~l5`@nTsyqjgH8%q7n-SK? z8eRyRNFZ;#O{fidWq9}AMvHJ_)>naW-jXkHTN;;nacuw zytZ_6fQd3AF;F}PZ6qQTfwrs)w77~%%h-uB>&CyBH^dRyv5I&PcU?FB%DgL>R~r|Y zeVHGP^!GDf)5>?8p7~9+{SIWh<)_2~}AItN>k9UlN}|4!Q&vcJBUG z^y*TVou2!ZXND+upnB0FRjJ-HdhUP^+9kNq97MS(KeSdaBBs1EM7iUM%P+T0tB{*w zI6Zf~1%%o3+{-m6?W;i>J5lb8A6j|rGGT1WosB>n#yy-nTRTIPZ?0Xkgm+RNh~`Af zFRLCJVpT2<&54wsFb)n6^RO$8ed_kh-)QU`<}13)dj7_sV31YHZ!_*j^%~=DW<9^n z4|Rqeg}| z^270)`@i9;Dzth=M=v53I{gmps|5bHlJ9XUT;8lG&u$Ozy&7nXDj_?UTut$z*n-!h@n+Et;LE@JJPU zuBk%a6SDTncH|wAsVCLc?!pnto0Pnx(sPUSv=bGcm$l!a)~-2-3NK0C4#|7nFcH6Z z6oGH`3-u%LEeYH!f$vD*J_)oF70z|Q_h1LQoRjzmW$XXh1nuD_3}YuMR>%UMQ46GE z%OEOG_Ngw#PI;Us)#G#*J7t!Wn58&JW_b;>IEab^L3BACRCx}f;uR5SXCuffEd+g@ zK;DWrp*G~Lki5?&?`p~WpXAwzifd|>FYB#Emo->>){C_lCooGkD6`m!id)3jpnO!k z3r8p0i=$Kg3G%YNl4mC>K7gZ>9mLToK00>XFbs>dtT7hn1FQ2dhxnH?k0if%if0Cm zabuiI%r5m2Rs1Yk=H*dlz4%$RVm2(VhWC z_4QG@HCE=wW6XN#)_`ITd_2HRrJeO6L+{2Dw=~?ge4_;;}JwM&y@6y4^R60>pj(ksj zrRb#-zOw&4AG0=#sq|V!S%2RR{k7?OFqPh#)<3R*?qn*Rtt$J!#5d9`rqU;6Jr@++ z$+T1pi$B+h@3vV?OQVspJ};v3XE819sV(b9Ep#W-(xFgUzcK{f$+Yx4VZ$;kej@T; GP5%c+amcU$ diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin deleted file mode 100644 index 5d77d4ef82122673325304e14e978e12eeadb243..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5741 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 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/PatternMatcherTests.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/PatternMatcherTests.class deleted file mode 100644 index 791051e0ba898c3b6b3219775cf0caaff72825c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11233 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 BoNWLA diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/TestUtils.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/api/TestUtils.class deleted file mode 100644 index 71d41d35d0c5a4eb041629c39a9347da8cafc613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6404 zcmcIpX?GLX8GgnHMjnrCVFE#9GZ2U+3uGi&w#PtY8(A+jF3+8jrIBpOI;ZqttULGKcYoeR;}8G+ z{@(y3@V<;D30(_?sFAUasAXKas^8F~89h56wT--;kLpWibegLRwwcMx@JR@iubfL= zHRfyyJC2)K(>^I-TUTgCf^Q_3HWX|_vx@E5A)$TD%o-Dg#gt)9>#2+(p<^sJr)Oq# z%M{PWO`pAB<|Ty38r5fzjOGn{B)7PfF?HL_WiL<<2`9V8%1TbzmYJO&42|Wi`KU3M zF_-d2^lI9U&gCp4n$9go1-+Rm(GM!viCr=}Bpj$oGc+|lsatu&Qt=3OOK8p-FS{EO zp6NPMM_P$;(2qw+DExd>s4K(V=xjCJ4?!8FAviW^}6%L15=? zOQ3cGtR(E5T~1|kbJvXJC7}dCC?MP@YeIO(k^>|OPuHd@gGPcf>v7D1x-^ch3ud&d->6Gi7E>d!->>4J$obN(GOWUMGiUWDHB_uGUU;n@w}^GSij;$*o;-&$GM;BjHX>`iq@Tq{S&^K)l%Q<_zEEQdD3CC& zq7ChSoFhl4P$>8qrevI#@Z=o3&wMV&2(ue4F6Oe)l+Nzt_SL+KXY^O+>O@cXWk387eTxE_WF(%J_tYqh35O+s3jTU3T=y zn5pO)21E4dQ66MPb)#CJ#4M}%f}y8bM7>(AUuFp|SIVMdGW2>SSEP;y-U?pAoQkwC zB9O|ZS3GB&L#{BOUac$o`M6;(lgVmAuW4B|324kLz?l(>0$L(52UG6u7e}3a?Xks{!dmu^PhFQS&_iAIdJV z^DG448cyOZ3W%1N9KDo*3Q9<2zq&H7+D z$BTXYBwaJSHC@eI5=DS5LxQ1&oXs*mBT6Hmz<%h4XP;fyj+C7f_pgS$FC(oj8nf+ z@mu_kHJrl(FR?q;n;m$AlfymyLB+dxkL5ch@=3zq8ys6}hf{E_bo9f2tmkM}W`C;m z5HKxZ@ZkAG7=tfPfr=C z!hC56#(qxr+xQL*@NvbrT>LHbDaucR2HV5;;eU^dCISe~F|ZdcT&wN{ezx+dS$sPv z62C)6+qsvJ#scaZ0^^a6J*(IoktE5tipL}T)fow|;^|d{Bho64P8@lFnC1)m#=74n zohvKsNZiM#$Kl5lm%auvfNN1uc%ldl7N9Ud_x(MOH^2%{eZ zd+O)W@9@ILWh*I5f`+ROh+~p&xk$&nNTwTs1kXSMeI1C-y$emCsqd&XoxGZG4Wa9nR|WTnQxI#urHIr>0-V z7x5*!Hh|Z;{t9>YP}WzeO$&8j#@BF@VA_u*d>!8)sCxJg@tgP-1Al@~x43Gj9f!#A zCigB965r;%cG{!hJ3I~0n!Wh0bNW3>b^&o4ui{Qg<2Ongzgg1wZb{>}sPXqnNr?Q1 zZflcqX#M90GQ29hlHTc#l;XaM-)sJ$U*yC#asVA7ock=FhUtX%4Pnv=oCskOB5*=V(g~bQS#hp!GK8&!)}Qca zTDXfj=!S3~L+6H2xcqr1cBXq`pC3uGBZ3FbJu4oiGTgZ&9i%Yn8H^aG!UZ zu!g_Vf5EBop-H8(q$wBqO+KxJr#g#^(@J+|PiOg(_@R z5-}y7)Dqn3(-H}B(yt}@#Alz@+oQw>wBBQUO7v*G3DS$_q;n?jBw|{!M@jT*NpY4) fYRROM=+lyYN}^v&_A7}2Ejb|0`+9gD9##Ge)iX;< diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace deleted file mode 100644 index cb721e7c20f3237f6b9c2b24bd2f9c2a81662c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2010 zcmZ{lT})GF7{}lDT~A{zA2}_yz(yf6SeVYni-D3YdEWPwet0Mp{6JeVkW$zT>oHK6 zbGVd^T`gJs+OAAohzV|(EsG><3SMuC8gZ9qTe2@Rw+k;M)8NLQb9xHM=`Nq&`};rd zzwJ3GAw;4ycf>`-IAQ$s;e?YnQu5mCqk;5LHXRsF4;kAC^Wd;M;^hkCjkkZ~f z{>D&xIM9_I*o$Y1Iq%2QohP#COg|GZ(%(BZ1U@o__WIbq^QPX$h5v&S+~#oaySfv@qjKJ=9geZ;10 zmAqb@cS$Z6Vb4rdX>c27O>R7+O0avV66PoqYUo23W|`92Emy%TrZ*6D;-UB4&`az} zXXs27sOZG`5qF~=+6c~u;?fK0M{CT2WY2Bvpwk2BR0+AaV2~DUDeO~L6IN;2KLLHizkNgVP;0a-o zd!hwWFoA1sN^l*nBf2j^KlBr3AvCdAYdU|`8V*f7iA=#fJf^KX~+?K(k?zm?+$t{co$hl&lX`}u^(>09X)G$v}dZd7Z%|WWEQD$k zHKy}wjp0yj`ly|EiYm(5laVH5_VhdgKXfF1=Bs@mH zLKkFpUMp+%=UImq_Tg*2Ol-MWvs_@Z@up)m;?U9hdbwDaGtXA*q4!Pu0r7%3N!Y

>%OUY zcp2_w{{w%Hek5ANC|xsYF8P)u#*CVUM##p!R(8&xXWetk4ql44*mB8pa)HT+@b58~ SyyVc)GYykpIP+|^ApH*)$||A& diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace deleted file mode 100644 index 0f15ff193f03d5b5b3317614f6aaaca28c0c70ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2011 zcmZ{lUrbY19LLW&>8;lCCznD?olv$oN*A<=4~UvAzjH2>*0w;wfwn+wN?|kD5-3F7 zSgO;fC5vpBz4)-{mJx9=iy8?I-nYbmWN+Kz!;CQ_doa;O2OIm{+gm_x_xSsq&-Zt} zZSPG9Arht89vc-O62{LTiCMXal6T%4^CpKfN$*H<;8=V-?j4G!2ECc&XlB%#NFN`5 ze<(TP?MMzB#4|;o52>fSPh^s*ekR_^9(htCK3H2xwuuI3NeN~AqRnb0RPQ0nj?LtNJ4cl7nrqeFrsx4VPh^jW&}hh_&g*@mUDh1P*P+pQ|09@#mxTF$ z75gCpr*X|432wt}L{B8>hkn8gghm%#y7Q+?b7=H$|0VbVUQiY&5nGX+CM>qa-vaaS z96z>!p=aZ(kc2ET$F_(I=-o%p1|K0yso4U|FAl*1+*h-@M|&?fAB6|-46|4GAPnO^ zR**ezu7X8)hS|JF6Wb(suGPy|p@~w50oA&7bb(Jm8ZR&S+DK>EHq^^Dtq-*OVgo7^ZR8tOP5tg2*kwSvX6WfzZT!weHkcYYt633QoX3JVaSA zBz{3Qjk%}6H{f3$z*Po@UPLUyIrx^C6Hk=^^zdZ~M&KH<^J><}`u8Yr!YX&DS>2<9 zeJ#g$CHE5+ataH4hWl7S_En3UJGq~(do*=V;sLE*z6wqK>@c7ucMgS2!UdCffhn~l z=aGzLlF-zOMI{@XrOnnHS}R7=$NPM|O>8HuwcbAfSMXalr6(lb&f5_+N-zU6gc%4; zpQ+NFx2rUVrls9`@DcRl z_()uZIW=2={nfOOck&T6t9vxlaQGn~6%~ZFoom^O@7FS61=-2N7kNfh&~=Yy!#gBl z*ZSqVAbZ_mWR30|Ya4E<#@Bk8n6lwUInQM6O~+`!qN0uUvf)l^j;+;0Z?5%Su|u39 ztm})W2tH_a>b{>OQ6;L7U6x=KRtYmAjNYr!t?3%gLiD1wOjL`Lly&{sqaa?DFXx?qIbHd%kjHWV$W+R$+;W5G@EnW!vlul728r8UN(ro0*zyq;Qj1ks- zN3rt~+{yk2{vP;L>=$En-K5#r2}z7=HS>*-O*o8f%AI4~vr0WL##>C;*p!@SG9vtY U%*MX4sOXi3v1`^GTPsNa1FnTD-~a#s diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin deleted file mode 100644 index 57eb439a66364da7affca7d64939766a731a9577..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4323 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 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.class deleted file mode 100644 index 71de075ad4ab3449f93621393d882a3750c88cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11771 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 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace deleted file mode 100644 index f3451a85821176f406522fbab57b95de55ff155a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15750 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 diff --git a/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.class b/hu.elte.refjava.lang.tests/bin/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.class deleted file mode 100644 index 6b7a969b4cf6bf7778b2e01ba0954b05cf130dc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11461 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 aL>DXZm)Pt-;clAuL-mZ(FwGO6GW-W*@>Nv; diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.ASTBuilderTests.xtendbin deleted file mode 100644 index 51a1bea77a57c0ae6543ebea53ecc2d7959bbb15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4869 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 L{MjX_|9bxdNcj%M diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.java._trace deleted file mode 100644 index 916dc0e35d6ac2682a87a1e4df06f50842a3057c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1170 zcmZwFJ!lhQ7zgls?s7@WC25*m`jK3dToSBp^Hq_mlW%hOUOKec!9j;2L8C=VhBk_{ zi-R4C3U<-KL06%;i9?5q)VZh>L=Y@Up@O>(TAzE~Y7%k$-T(PY?j%W40cvMqLXs=H z)l@JC(#iQ7rN%<5QCe(Vy+*bK@x1%2c&pWD zUXiUcwyKx^Op$yRAJTP@D|^vkPy%Zq8H<5jl?Ov1)P_DVAj#D+y|)+jrZ6~!;$~l; zq*xy!L#}2bLII%w3al?G>7t5~y9Cx(A7z((RQaR2k~ofIn(UW8D5*C16N$eByGJ7~ zYq~ChttUvUF_dD*eL_Bz+$FHh5M}p5)OV_S+8DuK^_acIC9-W-J`Lw^i?GMG+0S7U z^QUYs7Q@Ll+a6A1{+yjdWBrjgS>-?W*sGJtB(`rJ!xZe-=~N2!IYhPZLa7vvB7uF7 zN~baV*6UXCoMF0a#Ttd@0)jpaQL1UWH@E^m>T65x67X`EvKMTM8p~cmFEvi~&`@zY z@G15zlLgt5Shc?&w@k6QOa|Xkq>PjWF^q%ki&OvO$S8QA#k)9Wf#J3=4jEjz*%9h#!A@OV#|q)5dGmuW>nEmlW0rgRHRr7j;JSeDXLVH4{UUZKYeKk`P Pa{Hi`_mgOf+$H!8tk}&b diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/.PatternMatcherTests.xtendbin deleted file mode 100644 index f6c555b5dbdfb873991ceb8841e488f07a8303a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3820 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 diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/ASTBuilderTests.class b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/ASTBuilderTests.class deleted file mode 100644 index b7da3d8840af87b19068d3ab9f1e6c8f90dccbb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3906 zcmb7HYj+dZ72Ve_iLoe&fD)$(ojky@EIhU>8!QnLV@xrTfgl5cv~|bQwKYbXQD#Q2 zN!z5ar0@6p`5W4`y1PCVwlBB+z>-CaP2Z{+*OcHTS!+nQAaI~$ZP=#Ybfv%> z|A*??VppFTz-1M{MXM$Y=V*WAdeio;y1Z$5)>=)@+qUDIzUA1Sz_Z1&Q#UpoXQL(! z%T|FHOTnTXGd(|Wl`*}%$Fa?dZ+RfLSalFWw^mldUt4jR? zU>Xt_#E^!QNX0O^-^(7AmcSU&0)s)73e0uxxllFTl6<=#r(J;+yJ>byt{iwhN>c+8I_|&(J!;xZbSE81e!} zPmNN!D(iB|_I#7@Dy3n};cNo0fQ^zQG|Q%6RvB&;Z;I&jw7FZV8eYTs80G~|_5x^e zyDS?)%O|ja3j)KQEzP_4R;sS^Wr68Ve1dlh%{>4`9MUqxD!3?cxQ$>-P2gZ7Y{IZr zRExL8qD~Zuudaoh+J!HB^cved7MT}#sW(Ug1G3^*!z!5QE&W7dxzTV(^9oG$R^Ojx zTIgFP!yWAizl9P%9xVA}i)FJBkzT*)Rbn7(9%{q2=(>&@$D0D?4cnETQ`?diosH74 zY617?4cB3=>Rw)3sY<;r{i;I&SCXAb%&D-j$8^inn|4L6lYT4uy5s6TrTu#iski7` z!wuX~JWXnfDUO|*$_hLeu)$`Nv~FxR8x~v5FdLSkMqwe2FA`tN_H|Rkm#`Lt*=3X} z@hE2=XJ0_j;lxm!bZi(Etj9p4Uj8ICpTLHql;Jknb0S-8^4`je+YREU$RUQi%w})t z-Fb9@Q`~d|q=&JIdIB~a!o$s12%c)4y*w6DQ^aHnU(dL_RadgCFX;vZtKn_XXHM18 zUQN4XH=6#{rq62vKANiXIY;~&r`yTSj*ZBx3!lZo?miggM=$7VUDG&4?j`VP9E;&A z^x#Px_9Ux)^3m`PzNU)fU4gMw?^cLXTo~gB`?`QIK%TiIBz>#)- zf|KclB92`?-5);Bq2YKmf;=OMn2e>@iP z8VjD{IKXv?U$x+Q7zy5Yz8m0s9!UB25bq4Gg6m-V0iOD6ppxWO832ysFt5r01#kpM zx%R34;Txs=Z$1riz4Qpr+ z6!Ms$w86|nJx{t)E|r0R0!F*YB9G_Zrlt#oqhKDMts!aKK5J-}D<1IhQ2 z-`K&oW(SWB?%;dv+`UM@fdZ|br5~?A$2pARRZQ`~l*c^p&IkUT3-^uu8{)U0;HQl2 zFmYYR&*x)-Qu}vrL6q@({6XE9 z@kjiLLjNi)&tKEJwXF6g8?&ONOL}y3Q5)AM)nxAc-8rG!x1v2s*dP5vHBv|ywW+y$ z_OzCr%xBMN+1dOwuc!0VbD0?}dnTXDWwKg!E}xrK-*Trj(^_siKQpK0a{1Xwe#_0~ UXL&uHpPklbrt-5&KE0^@55o*n=>Px# diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/PatternMatcherTests.class b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/PatternMatcherTests.class deleted file mode 100644 index 58c599720d652e0a09d76435d7c884faf934890c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2941 zcmb7GYf}?f7=BI!5|=18Ua?+Qtr%itA;AlYmm*@p21PVuY5mrj{*wNKe(Ur(nGVVP?4I*ppYy!$n?L{gHE@i7EHffmEN-2i=t29z>eU9(uOSi0t0o^Ye-KZU2wgM zAU={G$o@bG`AUN3Zwn@QYLN!+z; znZHT>FD=0)Eln)%W0Hn$-Nb@Ndi6-a$>Db9Mvu&t8OGBx8mWz(0u2Lhwv z2!>)fE^wx9mS30^sn_$mt#Z?8+bsL8aFP^JD}2%L?h9|Iab!$=h8cSqTSI&oY;QlLMeoxoJ5&zY*}73IsObjp$_b*3(B z&&f^Klg4a|xr8UhO#hQigBV3Rj!PKh)$?YSc97upo=@&}LvGbvr^Wf%g4OWz8pe@{ zVuD528B?o9HcKY!Mcv6fYfdp}mIqElQ8kV%Cdt97G>LDrGuLfl=D9n;7k#nRDW zNAU_w^j6<}%d`+#W0yPJk$xK`9_}mp>=p}VJ#2jas<)BqCxZIhXtJ3a8_l{!avNsd zGSoE5$M6+3EyveQJ+G^^q_HnNisKLt$M8fzm@z!%!u@Zs7R57xQypD9EV7_>TC8WW zd<&B}u>qL2z=cjWgoV+OLbx-!s-X<>pY^3H?(GhEy21GtvhF!5Y-VP#v+OkqOJ8zT zjftU}nw6d8AL$MBHuXt_wIE`46R}F;MYrjdrMh&1W1&>%ARbdJ+#a{PqvhCbH4h_b zBkPYWzsg(ce`VS#+^P4v;`>v&t=b5uAzM(p7tzK@58c-I44qAOPrWttNYH!Cprzn? zi=O++V*Swmp;qd5WT{zc`-M(k?BV|w(ohWzKBN4KAcnnM2e_|sRT3P}{MyGigR9`$ zpL&D+Kk+4k1AHoB;3z)fQ;AXl2^{1aQM}`hQvQoy16=2R#gQj(aBLx+7=DdU(-+kv zahlK6&p4BQjdSlXdjHZ}Tol-X@eY@BeZzh4a5dLI-2WC+0zWRKw{YY4z!UowW*DZ5 zBNc>vk|~_Rew=0mI)-ru=W&(|{~U50jJNqUgOMQCxgh1aFjhu}S=^=77$v{pSA?=B zF^_w+pT!WqL;-y~i(vuxnd1z953oqNhx8tU_#3yQ+!a_N4v{vHMV=}Io^ekBdMK4x zevOqv;&Ebi3t!(jv4zqOnhE*<(v0mAeU32;BZyXS>4wopX|W26zJ?gZ23`cVZE8kP z3p^j?o5OSWDMT4{yj1UHcxX`QkK)4gqV};e&>oZQ>sqR)hc9=vi~6|UO?#8H&yYuDjju8h#w0BrmsMcCT5E=;7j%s2L=>ogy@TWPx{Dcs z@=3s!X{Ql+DC3HY%L4cQzpy^8VoqRckkL-6t?JQ$SKv0MHIj1J<3Hea5A#@Xaa~~c zWU9|n6_SrB+z@zFeLdo~gP`?O3nAdOOd5yuRAtSX`^S9V$>x~5`9z12NtEtvk?oqc zk7Y~?%qVRs)-r1R)dhc3Yl<6@OcLVuj&1WBcy1Dl1s<6^KN(RhW^=<*j+cuuwvV&4 z&U$9?R#rdo_6h#GK4y~l0%L$B6nXdivWJT(vBp)$^pIf#PXDare8r_#`IYzZK4P}@ q8Q0!2GKXJG%fB&|hD;6?`=}*U`0wyM+{7)GJm$=zXJ3_94&|Q%CK0v( diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider$2.class deleted file mode 100644 index a868499c6c3738f1b11d00d735c4457b9702bec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmbVKO>fgc5Ph2(yEP^ap#cKrJBI{BO`{4b6>+IR1i4jJs@^yDG}+4CmF!J_7aRbI z13!Qtg_yN05mf<+9(HzSH1pnk{rvU)2Y_w#0yG4+rn8uGOL0Lbr}A9Jxzv-`QfbTh zkWN0ZYot#pwWc^I%(=>_=nVsS0)vH_b>QCm_|eRYl-?;ff%U(fz=i{3%(pttO{w%`kL=WB5gy`^ zz>TyZY3afZJm=;XHn8Yqcu>(uYbvVRhzGvB&o}wrl$JSoWqiV-)pDC;t-&wAGW%Cp z+hW^!!l%!^u=s}Pa}~47(&rdp11*+OrH8nVHd|aa)@p=p{#~5k?tI0qPpmcIvYQp} lCR;;h-kd}6YZMRbRrEdF=ifsI5Ac|^utsDRPxv*^`3;Qk>UIDC diff --git a/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class b/hu.elte.refjava.lang.tests/test-bin/hu/elte/refjava/lang/tests/RefJavaInjectorProvider.class deleted file mode 100644 index 454e68b303d5368e84ad6f7d1ebe6932599cf898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1991 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 ecl}sCjRPW!P50RIKQ7ndyn diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java deleted file mode 100644 index f67dfe5..0000000 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/RefJavaParsingTest.java +++ /dev/null @@ -1,15 +0,0 @@ -/** - * generated by Xtext - */ -package hu.elte.refjava.lang.tests; - -import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.extensions.InjectionExtension; -import org.junit.jupiter.api.extension.ExtendWith; - -@ExtendWith(InjectionExtension.class) -@InjectWith(RefJavaInjectorProvider.class) -@SuppressWarnings("all") -public class RefJavaParsingTest { -} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTest.java._trace deleted file mode 100644 index bb971f03a2eb4eed67601a2bddc0f6ea72a45454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12636 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 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.java._trace deleted file mode 100644 index e7eba6274acf28458602b3512a71a41ca3ff7a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32418 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 Syhd>M4L#brAHm&QME?)8%j#_a diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.ASTBuilderTests.xtendbin deleted file mode 100644 index b6852cfdbf336631ad9375f1f275d05869f9792b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10085 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 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.PatternMatcherTests.java._trace deleted file mode 100644 index 62b83224dc10a8fe1e18440e2afc889973c15674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20443 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 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.java._trace deleted file mode 100644 index 77f0f81f7d1866febc4b66e3af6f8b18db30c5d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5367 zcmZ{mdvH|c8OHZLXK&d}Hpy<*+%KEBgd`+ODj=9-a+2M%XYWt}k*TfF5(P_xAYNfC z7i+O&QEBPL5u9<-(HWeM&M;KbVXD>Eg2Slos8Ff;N0Aw(UaGZXwf6mD@(?Y(gN&R@8~@PS7F|HDf%P{hCN^%JNNkz7?uNCutW9iOJ9&L# z>%>i4Z%VAaaYJGS|Fv@KhK)B3+_rUMa-EjEEC26$BRk!|$&)REhrvj(vu(ggnUezgDCl#8`?a#@}=Bk zA2!8FOAd~8aEQ+QYSX3c5%#Bsm$bC7yl9@9EVZ&7lx%0xQ!4{4EnJ#ZQ&Z~ND5w~P zcCBbd(Kaw~msN`N)CM;ySGnQ)ffw{GFO!zC6Q#DtT3gw-zJo{BQ`>#5t(>Favco`YDctB02KiH0X< z+KJ3u4YcMOROSLg0VXn6cw#Z`68C`aZtqliNYKqaHJzQDH=ul)gUI}K5E|08X=;|9 z&sBDHv2UzWJx9|{WWF1Y$9W6ozn;>rw14gh*It#}AM0~fr9+;%a~aq2R4&ayl#WzF zyRMQoO1C$IwnUlqblfL|U2qVk=Y^o%9)fSE3ACpUzA^Fb5ucqXovA|QeO2&X)ebt) z2;Vj0J0LzgQTlsfR8EEAyQLfSyBK`i>x5LgJH6d4G_QGv=gQGi1r83>_qAN zWzG{a=fOC7o@z(ll+1EU&Eif^N!}^RdrW$sk)C#<^b_(N{vpr7PLw_(dFLhX1;a$( zg;4|^?-x@4s_yi03A`YICnfMp3A7WXU++*p)6;=2uOr^{sCY{M4UfzWG%;xoqV#{T zKywZ@+X@V#%aT6T#j0r#YG86(HJHU*f?2FO%wmpU76*~l5`@nTsyqjgH8%q7n-SK? z8eRyRNFZ;#O{fidWq9}AMvHJ_)>naW-jXkHTN;;nacuw zytZ_6fQd3AF;F}PZ6qQTfwrs)w77~%%h-uB>&CyBH^dRyv5I&PcU?FB%DgL>R~r|Y zeVHGP^!GDf)5>?8p7~9+{SIWh<)_2~}AItN>k9UlN}|4!Q&vcJBUG z^y*TVou2!ZXND+upnB0FRjJ-HdhUP^+9kNq97MS(KeSdaBBs1EM7iUM%P+T0tB{*w zI6Zf~1%%o3+{-m6?W;i>J5lb8A6j|rGGT1WosB>n#yy-nTRTIPZ?0Xkgm+RNh~`Af zFRLCJVpT2<&54wsFb)n6^RO$8ed_kh-)QU`<}13)dj7_sV31YHZ!_*j^%~=DW<9^n z4|Rqeg}| z^270)`@i9;Dzth=M=v53I{gmps|5bHlJ9XUT;8lG&u$Ozy&7nXDj_?UTut$z*n-!h@n+Et;LE@JJPU zuBk%a6SDTncH|wAsVCLc?!pnto0Pnx(sPUSv=bGcm$l!a)~-2-3NK0C4#|7nFcH6Z z6oGH`3-u%LEeYH!f$vD*J_)oF70z|Q_h1LQoRjzmW$XXh1nuD_3}YuMR>%UMQ46GE z%OEOG_Ngw#PI;Us)#G#*J7t!Wn58&JW_b;>IEab^L3BACRCx}f;uR5SXCuffEd+g@ zK;DWrp*G~Lki5?&?`p~WpXAwzifd|>FYB#Emo->>){C_lCooGkD6`m!id)3jpnO!k z3r8p0i=$Kg3G%YNl4mC>K7gZ>9mLToK00>XFbs>dtT7hn1FQ2dhxnH?k0if%if0Cm zabuiI%r5m2Rs1Yk=H*dlz4%$RVm2(VhWC z_4QG@HCE=wW6XN#)_`ITd_2HRrJeO6L+{2Dw=~?ge4_;;}JwM&y@6y4^R60>pj(ksj zrRb#-zOw&4AG0=#sq|V!S%2RR{k7?OFqPh#)<3R*?qn*Rtt$J!#5d9`rqU;6Jr@++ z$+T1pi$B+h@3vV?OQVspJ};v3XE819sV(b9Ep#W-(xFgUzcK{f$+Yx4VZ$;kej@T; GP5%c+amcU$ diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/.TestUtils.xtendbin deleted file mode 100644 index 5d77d4ef82122673325304e14e978e12eeadb243..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5741 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 bindings = CollectionLiterals.>newHashMap(); - - private Map nameBindings = CollectionLiterals.newHashMap(); - - private Map typeBindings = CollectionLiterals.newHashMap(); - - private Map> parameterBindings = CollectionLiterals.>newHashMap(); - - private Map visibilityBindings = CollectionLiterals.newHashMap(); - - private Map> argumentBindings = CollectionLiterals.>newHashMap(); - - private String typeRefString = null; - - private List replacement; - - private CompilationUnit source; - - @Test - public void variableDeclarationBuilderTest() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("class A { public void f() { int a; char b; String str; } }"); - this.source = TestUtils.getCompliationUnit(_builder.toString()); - Object _head = IterableExtensions.head(this.source.types()); - Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); - final Function1 _function = (Object it) -> { - return ((VariableDeclarationStatement) it); - }; - final List sourceVariableDeclarations = ListExtensions.map(((MethodDeclaration) _head_1).getBody().statements(), _function); - List replacementVariableDeclarations = null; - this.typeRefString = "void|int|char|java.lang.String|"; - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("public void f() { int a ; char b ; String str }"); - this.replacement = TestUtils.testBuilder(_builder_1.toString(), - this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - ASTNode _head_2 = IterableExtensions.head(this.replacement); - Assertions.assertTrue((_head_2 instanceof MethodDeclaration)); - ASTNode _head_3 = IterableExtensions.head(this.replacement); - replacementVariableDeclarations = ((MethodDeclaration) _head_3).getBody().statements(); - for (int i = 0; (i < replacementVariableDeclarations.size()); i++) { - { - VariableDeclarationStatement _get = replacementVariableDeclarations.get(i); - Assertions.assertTrue((_get instanceof VariableDeclarationStatement)); - Assertions.assertEquals(replacementVariableDeclarations.get(i).toString(), sourceVariableDeclarations.get(i).toString()); - } - } - this.typeRefString = "void|"; - this.nameBindings.put("N1", "a"); - this.nameBindings.put("N2", "b"); - this.nameBindings.put("N3", "str"); - this.typeBindings.put("T1", sourceVariableDeclarations.get(0).getType()); - this.typeBindings.put("T2", sourceVariableDeclarations.get(1).getType()); - this.typeBindings.put("T3", sourceVariableDeclarations.get(2).getType()); - StringConcatenation _builder_2 = new StringConcatenation(); - _builder_2.append("public void f() { type#T1 name#N1 ; type#T2 name#N2 ; type#T3 name#N3 }"); - this.replacement = TestUtils.testBuilder(_builder_2.toString(), - this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - ASTNode _head_4 = IterableExtensions.head(this.replacement); - Assertions.assertTrue((_head_4 instanceof MethodDeclaration)); - ASTNode _head_5 = IterableExtensions.head(this.replacement); - replacementVariableDeclarations = ((MethodDeclaration) _head_5).getBody().statements(); - for (int i = 0; (i < replacementVariableDeclarations.size()); i++) { - { - VariableDeclarationStatement _get = replacementVariableDeclarations.get(i); - Assertions.assertTrue((_get instanceof VariableDeclarationStatement)); - Assertions.assertEquals(sourceVariableDeclarations.get(i).toString(), replacementVariableDeclarations.get(i).toString()); - } - } - } - - @Test - public void fieldDeclarationBuilderTest() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("class A { public int a; private char b; String str }"); - this.source = TestUtils.getCompliationUnit(_builder.toString()); - Object _head = IterableExtensions.head(this.source.types()); - final Function1 _function = (Object it) -> { - return ((FieldDeclaration) it); - }; - final List sourceFieldDeclarations = ListExtensions.map(((TypeDeclaration) _head).bodyDeclarations(), _function); - List replacementFieldDeclarations = null; - this.typeRefString = "int|char|java.lang.String|"; - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("public int a ; private char b ; String str"); - this.replacement = TestUtils.testBuilder(_builder_1.toString(), - this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - final Function1 _function_1 = (ASTNode it) -> { - return Boolean.valueOf((it instanceof FieldDeclaration)); - }; - Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function_1)); - final Function1 _function_2 = (ASTNode it) -> { - return ((FieldDeclaration) it); - }; - replacementFieldDeclarations = ListExtensions.map(this.replacement, _function_2); - for (int i = 0; (i < replacementFieldDeclarations.size()); i++) { - Assertions.assertEquals(sourceFieldDeclarations.get(i).toString(), replacementFieldDeclarations.get(i).toString()); - } - this.typeRefString = null; - this.nameBindings.put("N1", "a"); - this.nameBindings.put("N2", "b"); - this.nameBindings.put("N3", "str"); - this.typeBindings.put("T1", sourceFieldDeclarations.get(0).getType()); - this.typeBindings.put("T2", sourceFieldDeclarations.get(1).getType()); - this.typeBindings.put("T3", sourceFieldDeclarations.get(2).getType()); - this.visibilityBindings.put("V1", Visibility.PUBLIC); - this.visibilityBindings.put("V2", Visibility.PRIVATE); - this.visibilityBindings.put("V3", Visibility.PACKAGE); - StringConcatenation _builder_2 = new StringConcatenation(); - _builder_2.append("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ; visibility#V3 type#T3 name#N3"); - this.replacement = TestUtils.testBuilder(_builder_2.toString(), - this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - final Function1 _function_3 = (ASTNode it) -> { - return Boolean.valueOf((it instanceof FieldDeclaration)); - }; - Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function_3)); - final Function1 _function_4 = (ASTNode it) -> { - return ((FieldDeclaration) it); - }; - replacementFieldDeclarations = ListExtensions.map(this.replacement, _function_4); - for (int i = 0; (i < replacementFieldDeclarations.size()); i++) { - Assertions.assertEquals(sourceFieldDeclarations.get(i).toString(), replacementFieldDeclarations.get(i).toString()); - } - } - - @Test - public void methodDeclarationBuilderTest() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("class A { public void f(int a){ } private short g(boolean l, char b){ } String h(){ } }"); - this.source = TestUtils.getCompliationUnit(_builder.toString()); - Object _head = IterableExtensions.head(this.source.types()); - final Function1 _function = (Object it) -> { - return ((MethodDeclaration) it); - }; - final List sourceMethodDeclarations = ListExtensions.map(((TypeDeclaration) _head).bodyDeclarations(), _function); - List replacementMethodDeclarations = null; - this.typeRefString = "void|int|short|boolean|char|java.lang.String|"; - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("public void f(int a){ } ; private short g(boolean l, char b){ } ; String h(){ }"); - this.replacement = TestUtils.testBuilder(_builder_1.toString(), - this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - final Function1 _function_1 = (ASTNode it) -> { - return Boolean.valueOf((it instanceof MethodDeclaration)); - }; - Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function_1)); - final Function1 _function_2 = (ASTNode it) -> { - return ((MethodDeclaration) it); - }; - replacementMethodDeclarations = ListExtensions.map(this.replacement, _function_2); - for (int i = 0; (i < replacementMethodDeclarations.size()); i++) { - Assertions.assertEquals(sourceMethodDeclarations.get(i).toString(), replacementMethodDeclarations.get(i).toString()); - } - this.typeRefString = null; - this.nameBindings.put("N1", "f"); - this.nameBindings.put("N2", "g"); - this.nameBindings.put("N3", "h"); - this.typeBindings.put("T1", sourceMethodDeclarations.get(0).getReturnType2()); - this.typeBindings.put("T2", sourceMethodDeclarations.get(1).getReturnType2()); - this.typeBindings.put("T3", sourceMethodDeclarations.get(2).getReturnType2()); - this.visibilityBindings.put("V1", Visibility.PUBLIC); - this.visibilityBindings.put("V2", Visibility.PRIVATE); - this.visibilityBindings.put("V3", Visibility.PACKAGE); - this.parameterBindings.put("P1", sourceMethodDeclarations.get(0).parameters()); - this.parameterBindings.put("P2", sourceMethodDeclarations.get(1).parameters()); - this.parameterBindings.put("P3", sourceMethodDeclarations.get(2).parameters()); - StringConcatenation _builder_2 = new StringConcatenation(); - _builder_2.append("visibility#V1 type#T1 name#N1(parameter#P1..){ } ; visibility#V2 type#T2 name#N2(parameter#P2..){ } ; visibility#V3 type#T3 name#N3(parameter#P3..){ }"); - this.replacement = TestUtils.testBuilder(_builder_2.toString(), - this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - final Function1 _function_3 = (ASTNode it) -> { - return Boolean.valueOf((it instanceof MethodDeclaration)); - }; - Assertions.assertTrue(IterableExtensions.forall(this.replacement, _function_3)); - final Function1 _function_4 = (ASTNode it) -> { - return ((MethodDeclaration) it); - }; - replacementMethodDeclarations = ListExtensions.map(this.replacement, _function_4); - for (int i = 0; (i < replacementMethodDeclarations.size()); i++) { - Assertions.assertEquals(sourceMethodDeclarations.get(i).toString(), replacementMethodDeclarations.get(i).toString()); - } - } - - @Test - public void methodInvocetionAndConstructorCallBuilderTest() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("class A { public void f() { new F() { public void apply(int a, char b) {} }.apply(a, b); new G() { public void apply() {} }.apply(); } int a = 1; char b = \'a\'; }"); - this.source = TestUtils.getCompliationUnit(_builder.toString()); - Object _head = IterableExtensions.head(this.source.types()); - Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); - final Function1 _function = (Object it) -> { - Expression _expression = ((ExpressionStatement) it).getExpression(); - return ((MethodInvocation) _expression); - }; - final List sourceMethodInvocations = ListExtensions.map(((MethodDeclaration) _head_1).getBody().statements(), _function); - List replacementMethodInvocations = null; - this.typeRefString = "void|int|char|void|"; - this.argumentBindings.put("A1", sourceMethodInvocations.get(0).arguments()); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("new F() { public void apply(int a, char b) {} }.apply(argument#A1..) ; new G() { public void apply() {} }.apply()"); - this.replacement = TestUtils.testBuilder(_builder_1.toString(), - this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - Assertions.assertTrue((IterableExtensions.forall(this.replacement, ((Function1) (ASTNode it) -> { - return Boolean.valueOf((it instanceof ExpressionStatement)); - })) && IterableExtensions.forall(this.replacement, ((Function1) (ASTNode it) -> { - Expression _expression = ((ExpressionStatement) it).getExpression(); - return Boolean.valueOf((_expression instanceof MethodInvocation)); - })))); - final Function1 _function_1 = (ASTNode it) -> { - Expression _expression = ((ExpressionStatement) it).getExpression(); - return ((MethodInvocation) _expression); - }; - replacementMethodInvocations = ListExtensions.map(this.replacement, _function_1); - for (int i = 0; (i < replacementMethodInvocations.size()); i++) { - Assertions.assertEquals(sourceMethodInvocations.get(i).toString(), replacementMethodInvocations.get(i).toString()); - } - this.nameBindings.put("N1", "F"); - this.nameBindings.put("N2", "G"); - StringConcatenation _builder_2 = new StringConcatenation(); - _builder_2.append("new name#N1() { public void apply(int a, char b) {} }.apply(argument#A1..) ; new name#N2() { public void apply() {} }.apply()"); - this.replacement = TestUtils.testBuilder(_builder_2.toString(), - this.bindings, this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - Assertions.assertTrue((IterableExtensions.forall(this.replacement, ((Function1) (ASTNode it) -> { - return Boolean.valueOf((it instanceof ExpressionStatement)); - })) && IterableExtensions.forall(this.replacement, ((Function1) (ASTNode it) -> { - Expression _expression = ((ExpressionStatement) it).getExpression(); - return Boolean.valueOf((_expression instanceof MethodInvocation)); - })))); - final Function1 _function_2 = (ASTNode it) -> { - Expression _expression = ((ExpressionStatement) it).getExpression(); - return ((MethodInvocation) _expression); - }; - replacementMethodInvocations = ListExtensions.map(this.replacement, _function_2); - for (int i = 0; (i < replacementMethodInvocations.size()); i++) { - Assertions.assertEquals(sourceMethodInvocations.get(i).toString(), replacementMethodInvocations.get(i).toString()); - } - } -} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/PatternMatcherTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/PatternMatcherTests.java deleted file mode 100644 index 954f044..0000000 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/PatternMatcherTests.java +++ /dev/null @@ -1,370 +0,0 @@ -package hu.elte.refjava.lang.tests.api; - -import hu.elte.refjava.lang.refJava.Visibility; -import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; -import hu.elte.refjava.lang.tests.api.TestUtils; -import java.util.List; -import java.util.Map; -import org.eclipse.jdt.core.dom.ClassInstanceCreation; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.ExpressionStatement; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.MethodInvocation; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.Type; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jdt.core.dom.VariableDeclarationStatement; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.extensions.InjectionExtension; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -@ExtendWith(InjectionExtension.class) -@InjectWith(RefJavaInjectorProvider.class) -@SuppressWarnings("all") -class PatternMatcherTests { - private Map nameBindings = CollectionLiterals.newHashMap(); - - private Map typeBindings = CollectionLiterals.newHashMap(); - - private Map> parameterBindings = CollectionLiterals.>newHashMap(); - - private Map visibilityBindings = CollectionLiterals.newHashMap(); - - private Map> argumentBindings = CollectionLiterals.>newHashMap(); - - private String typeRefString = null; - - @Test - public void variableDeclarationMatcherTest() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("type#T1 name#N1 ; type#T2 name#N2 ;"); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("class A {"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("void f(){"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("int a;"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("char b;"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - TestUtils.testMatcher(_builder.toString(), _builder_1.toString(), - "block", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - final CompilationUnit compUnit = TestUtils.getCompliationUnit("class A { void f(){ int a; char b; } }"); - Object _head = IterableExtensions.head(compUnit.types()); - Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); - final List methodBody = ((MethodDeclaration) _head_1).getBody().statements(); - this.nameBindings.put("N1", "a"); - this.nameBindings.put("N2", "b"); - Object _head_2 = IterableExtensions.head(methodBody); - this.typeBindings.put("T1", ((VariableDeclarationStatement) _head_2).getType()); - Object _last = IterableExtensions.last(methodBody); - this.typeBindings.put("T2", ((VariableDeclarationStatement) _last).getType()); - StringConcatenation _builder_2 = new StringConcatenation(); - _builder_2.append("type#T1 name#N1 ; type#T2 name#N2 ;"); - StringConcatenation _builder_3 = new StringConcatenation(); - _builder_3.append("class A {"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("void f(){"); - _builder_3.newLine(); - _builder_3.append("\t\t"); - _builder_3.append("int a;"); - _builder_3.newLine(); - _builder_3.append("\t\t"); - _builder_3.append("char b;"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("}"); - _builder_3.newLine(); - _builder_3.append("}"); - _builder_3.newLine(); - TestUtils.testMatcher(_builder_2.toString(), _builder_3.toString(), - "block", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - this.typeRefString = "int|char|java.lang.String|"; - StringConcatenation _builder_4 = new StringConcatenation(); - _builder_4.append("int a ; char b ; String c ;"); - StringConcatenation _builder_5 = new StringConcatenation(); - _builder_5.append("class A {"); - _builder_5.newLine(); - _builder_5.append("\t"); - _builder_5.append("void f(){"); - _builder_5.newLine(); - _builder_5.append("\t\t"); - _builder_5.append("int a;"); - _builder_5.newLine(); - _builder_5.append("\t\t"); - _builder_5.append("char b;"); - _builder_5.newLine(); - _builder_5.append("\t\t"); - _builder_5.append("String c;"); - _builder_5.newLine(); - _builder_5.append("\t"); - _builder_5.append("}"); - _builder_5.newLine(); - _builder_5.append("}"); - _builder_5.newLine(); - TestUtils.testMatcher(_builder_4.toString(), _builder_5.toString(), - "block", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - } - - @Test - public void fieldDeclarationMatcherTest() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;"); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("class A {"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("public int a;"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("private char b;"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - TestUtils.testMatcher(_builder.toString(), _builder_1.toString(), - "class", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - final CompilationUnit compUnit = TestUtils.getCompliationUnit("class A { public int a; private char b; }"); - Object _head = IterableExtensions.head(compUnit.types()); - final List fieldDeclarations = ((TypeDeclaration) _head).bodyDeclarations(); - this.nameBindings.put("N1", "a"); - this.nameBindings.put("N2", "b"); - Object _head_1 = IterableExtensions.head(fieldDeclarations); - this.typeBindings.put("T1", ((FieldDeclaration) _head_1).getType()); - Object _last = IterableExtensions.last(fieldDeclarations); - this.typeBindings.put("T2", ((FieldDeclaration) _last).getType()); - this.visibilityBindings.put("V1", Visibility.PUBLIC); - this.visibilityBindings.put("V2", Visibility.PRIVATE); - StringConcatenation _builder_2 = new StringConcatenation(); - _builder_2.append("visibility#V1 type#T1 name#N1 ; visibility#V2 type#T2 name#N2 ;"); - StringConcatenation _builder_3 = new StringConcatenation(); - _builder_3.append("class A {"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("public int a ;"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("private char b;"); - _builder_3.newLine(); - _builder_3.append("}"); - _builder_3.newLine(); - TestUtils.testMatcher(_builder_2.toString(), _builder_3.toString(), - "class", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - this.typeRefString = "int|char|"; - StringConcatenation _builder_4 = new StringConcatenation(); - _builder_4.append("public int a ; private char b ;"); - StringConcatenation _builder_5 = new StringConcatenation(); - _builder_5.append("class A {"); - _builder_5.newLine(); - _builder_5.append("\t"); - _builder_5.append("public int a ;"); - _builder_5.newLine(); - _builder_5.append("\t"); - _builder_5.append("private char b;"); - _builder_5.newLine(); - _builder_5.append("}"); - _builder_5.newLine(); - TestUtils.testMatcher(_builder_4.toString(), _builder_5.toString(), - "class", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - } - - @Test - public void methodDeclarationMatcherTest() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("visibility#V1 type#T1 name#N1(parameter#P1..) {} ; visibility#V2 type#T2 name#N2(parameter#P2..) {} ;"); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("class A { "); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("public void f(int a, String str) {} "); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("private int g() {}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - TestUtils.testMatcher(_builder.toString(), _builder_1.toString(), - "class", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - final CompilationUnit compUnit = TestUtils.getCompliationUnit("class A { public void f(int a, String str) {} private int g() {} }"); - Object _head = IterableExtensions.head(compUnit.types()); - final List methodDeclarations = ((TypeDeclaration) _head).bodyDeclarations(); - this.nameBindings.put("N1", "f"); - this.nameBindings.put("N2", "g"); - Object _head_1 = IterableExtensions.head(methodDeclarations); - this.typeBindings.put("T1", ((MethodDeclaration) _head_1).getReturnType2()); - Object _last = IterableExtensions.last(methodDeclarations); - this.typeBindings.put("T2", ((MethodDeclaration) _last).getReturnType2()); - this.visibilityBindings.put("V1", Visibility.PUBLIC); - this.visibilityBindings.put("V2", Visibility.PRIVATE); - Object _head_2 = IterableExtensions.head(methodDeclarations); - this.parameterBindings.put("P1", ((MethodDeclaration) _head_2).parameters()); - Object _last_1 = IterableExtensions.last(methodDeclarations); - this.parameterBindings.put("P2", ((MethodDeclaration) _last_1).parameters()); - StringConcatenation _builder_2 = new StringConcatenation(); - _builder_2.append("visibility#V1 type#T1 name#N1(parameter#P1..) {} ; visibility#V2 type#T2 name#N2(parameter#P2..) {} ;"); - StringConcatenation _builder_3 = new StringConcatenation(); - _builder_3.append("class A { "); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("public void f(int a, String str) {}"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("private int g() {}"); - _builder_3.newLine(); - _builder_3.append("}"); - _builder_3.newLine(); - TestUtils.testMatcher(_builder_2.toString(), _builder_3.toString(), - "class", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - this.typeRefString = "void|int|java.lang.String|int|"; - StringConcatenation _builder_4 = new StringConcatenation(); - _builder_4.append("public void f(int a, String str) {} ; private int g() {} ;"); - StringConcatenation _builder_5 = new StringConcatenation(); - _builder_5.append("class A { "); - _builder_5.newLine(); - _builder_5.append("\t"); - _builder_5.append("public void f(int a, String str) {}"); - _builder_5.newLine(); - _builder_5.append("\t"); - _builder_5.append("private int g() {}"); - _builder_5.newLine(); - _builder_5.append("}"); - _builder_5.newLine(); - TestUtils.testMatcher(_builder_4.toString(), _builder_5.toString(), - "class", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - } - - @Test - public void methodInvocationAndConstructorCallMatcherTest() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("new name#N1() { visibility#V1 type#T1 name#N2(parameter#P1..) {} }.name#N2(argument#A1..)"); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("class A {"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("void f() {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("new F() {"); - _builder_1.newLine(); - _builder_1.append("\t\t\t"); - _builder_1.append("public void apply(int a) {}"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("}.apply(a);"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("public int a = 1;"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - TestUtils.testMatcher(_builder.toString(), _builder_1.toString(), - "block", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - final CompilationUnit compUnit = TestUtils.getCompliationUnit("class A { public void f() { new F() { public void apply(int a, char b) {} }.apply(a, b); } int a = 1; char b = \'a\'; }"); - Object _head = IterableExtensions.head(compUnit.types()); - Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); - Object _head_2 = IterableExtensions.head(((MethodDeclaration) _head_1).getBody().statements()); - Expression _expression = ((ExpressionStatement) _head_2).getExpression(); - final MethodInvocation methodInvocation = ((MethodInvocation) _expression); - Object _head_3 = IterableExtensions.head(compUnit.types()); - Object _head_4 = IterableExtensions.head(((TypeDeclaration) _head_3).bodyDeclarations()); - Object _head_5 = IterableExtensions.head(((MethodDeclaration) _head_4).getBody().statements()); - Expression _expression_1 = ((ExpressionStatement) _head_5).getExpression(); - Expression _expression_2 = ((MethodInvocation) _expression_1).getExpression(); - Object _head_6 = IterableExtensions.head(((ClassInstanceCreation) _expression_2).getAnonymousClassDeclaration().bodyDeclarations()); - final MethodDeclaration method = ((MethodDeclaration) _head_6); - this.nameBindings.put("N1", "F"); - this.nameBindings.put("N2", "apply"); - this.typeBindings.put("T1", method.getReturnType2()); - this.visibilityBindings.put("V1", Visibility.PUBLIC); - this.parameterBindings.put("P1", method.parameters()); - this.argumentBindings.put("A1", methodInvocation.arguments()); - StringConcatenation _builder_2 = new StringConcatenation(); - _builder_2.append("new name#N1() { visibility#V1 type#T1 name#N2(parameter#P1..) {} }.name#N2(argument#A1..)"); - StringConcatenation _builder_3 = new StringConcatenation(); - _builder_3.append("class A {"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("void f() {"); - _builder_3.newLine(); - _builder_3.append("\t\t"); - _builder_3.append("new F() {"); - _builder_3.newLine(); - _builder_3.append("\t\t\t"); - _builder_3.append("public void apply(int a, char b) {}"); - _builder_3.newLine(); - _builder_3.append("\t\t"); - _builder_3.append("}.apply(a, b);"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("}"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("int a = 1;"); - _builder_3.newLine(); - _builder_3.append("\t"); - _builder_3.append("char b = \'a\';"); - _builder_3.newLine(); - _builder_3.append("}"); - _builder_3.newLine(); - TestUtils.testMatcher(_builder_2.toString(), _builder_3.toString(), - "block", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - this.typeRefString = "void|int|char|"; - StringConcatenation _builder_4 = new StringConcatenation(); - _builder_4.append("new F() { public void apply(int a, char b) {} }.apply(argument#A1..)"); - StringConcatenation _builder_5 = new StringConcatenation(); - _builder_5.append("class A {"); - _builder_5.newLine(); - _builder_5.append("\t"); - _builder_5.append("void f() {"); - _builder_5.newLine(); - _builder_5.append("\t\t"); - _builder_5.append("new F() {"); - _builder_5.newLine(); - _builder_5.append("\t\t\t"); - _builder_5.append("public void apply(int a, char b) {}"); - _builder_5.newLine(); - _builder_5.append("\t\t"); - _builder_5.append("}.apply(a, b);"); - _builder_5.newLine(); - _builder_5.append("\t"); - _builder_5.append("}"); - _builder_5.newLine(); - _builder_5.append("}"); - _builder_5.newLine(); - _builder_5.append("int a = 1;"); - _builder_5.newLine(); - _builder_5.append("char b = \'a\';"); - _builder_5.newLine(); - TestUtils.testMatcher(_builder_4.toString(), _builder_5.toString(), - "block", - this.nameBindings, this.typeBindings, this.parameterBindings, this.visibilityBindings, this.argumentBindings, this.typeRefString); - } -} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/TestUtils.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/TestUtils.java deleted file mode 100644 index 298f3f4..0000000 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/api/TestUtils.java +++ /dev/null @@ -1,73 +0,0 @@ -package hu.elte.refjava.lang.tests.api; - -import com.google.common.base.Objects; -import hu.elte.refjava.api.patterns.ASTBuilder; -import hu.elte.refjava.api.patterns.PatternMatcher; -import hu.elte.refjava.api.patterns.PatternParser; -import hu.elte.refjava.lang.refJava.Pattern; -import hu.elte.refjava.lang.refJava.Visibility; -import java.util.List; -import java.util.Map; -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ASTParser; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.Type; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.junit.jupiter.api.Assertions; - -@SuppressWarnings("all") -public class TestUtils { - public static CompilationUnit getCompliationUnit(final String str) { - CompilationUnit _xblockexpression = null; - { - final ASTParser parser = ASTParser.newParser(AST.JLS12); - parser.setUnitName("test.java"); - parser.setEnvironment(null, null, null, true); - parser.setResolveBindings(true); - parser.setSource(str.toCharArray()); - ASTNode _createAST = parser.createAST(null); - final CompilationUnit newCompUnit = ((CompilationUnit) _createAST); - _xblockexpression = newCompUnit; - } - return _xblockexpression; - } - - public static void testMatcher(final String patternString, final String sourceString, final String declarationSource, final Map nameBindings, final Map typeBindings, final Map> parameterBindings, final Map visibilityBindings, final Map> argumentBindings, final String typeRefString) { - final PatternMatcher matcher = new PatternMatcher(null); - final Pattern pattern = PatternParser.parse(patternString); - final CompilationUnit source = TestUtils.getCompliationUnit(sourceString); - List _xifexpression = null; - boolean _equals = Objects.equal(declarationSource, "block"); - if (_equals) { - Object _head = IterableExtensions.head(source.types()); - Object _head_1 = IterableExtensions.head(((TypeDeclaration) _head).bodyDeclarations()); - _xifexpression = ((MethodDeclaration) _head_1).getBody().statements(); - } else { - List _xifexpression_1 = null; - boolean _equals_1 = Objects.equal(declarationSource, "class"); - if (_equals_1) { - Object _head_2 = IterableExtensions.head(source.types()); - _xifexpression_1 = ((TypeDeclaration) _head_2).bodyDeclarations(); - } - _xifexpression = _xifexpression_1; - } - final List matchings = _xifexpression; - Assertions.assertTrue(matcher.match(pattern, matchings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString)); - } - - public static List testBuilder(final String patternString, final Map> bindings, final Map nameBindings, final Map typeBindings, final Map> parameterBindings, final Map visibilityBindings, final Map> argumentBindings, final String typeRefString) { - List _xblockexpression = null; - { - final ASTBuilder builder = new ASTBuilder(null); - final Pattern pattern = PatternParser.parse(patternString); - final CompilationUnit source = TestUtils.getCompliationUnit(""); - _xblockexpression = builder.build(pattern, source.getAST(), bindings, nameBindings, typeBindings, parameterBindings, visibilityBindings, argumentBindings, typeRefString); - } - return _xblockexpression; - } -} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTest.java._trace deleted file mode 100644 index cb721e7c20f3237f6b9c2b24bd2f9c2a81662c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2010 zcmZ{lT})GF7{}lDT~A{zA2}_yz(yf6SeVYni-D3YdEWPwet0Mp{6JeVkW$zT>oHK6 zbGVd^T`gJs+OAAohzV|(EsG><3SMuC8gZ9qTe2@Rw+k;M)8NLQb9xHM=`Nq&`};rd zzwJ3GAw;4ycf>`-IAQ$s;e?YnQu5mCqk;5LHXRsF4;kAC^Wd;M;^hkCjkkZ~f z{>D&xIM9_I*o$Y1Iq%2QohP#COg|GZ(%(BZ1U@o__WIbq^QPX$h5v&S+~#oaySfv@qjKJ=9geZ;10 zmAqb@cS$Z6Vb4rdX>c27O>R7+O0avV66PoqYUo23W|`92Emy%TrZ*6D;-UB4&`az} zXXs27sOZG`5qF~=+6c~u;?fK0M{CT2WY2Bvpwk2BR0+AaV2~DUDeO~L6IN;2KLLHizkNgVP;0a-o zd!hwWFoA1sN^l*nBf2j^KlBr3AvCdAYdU|`8V*f7iA=#fJf^KX~+?K(k?zm?+$t{co$hl&lX`}u^(>09X)G$v}dZd7Z%|WWEQD$k zHKy}wjp0yj`ly|EiYm(5laVH5_VhdgKXfF1=Bs@mH zLKkFpUMp+%=UImq_Tg*2Ol-MWvs_@Z@up)m;?U9hdbwDaGtXA*q4!Pu0r7%3N!Y

>%OUY zcp2_w{{w%Hek5ANC|xsYF8P)u#*CVUM##p!R(8&xXWetk4ql44*mB8pa)HT+@b58~ SyyVc)GYykpIP+|^ApH*)$||A& diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.java._trace deleted file mode 100644 index 0f15ff193f03d5b5b3317614f6aaaca28c0c70ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2011 zcmZ{lUrbY19LLW&>8;lCCznD?olv$oN*A<=4~UvAzjH2>*0w;wfwn+wN?|kD5-3F7 zSgO;fC5vpBz4)-{mJx9=iy8?I-nYbmWN+Kz!;CQ_doa;O2OIm{+gm_x_xSsq&-Zt} zZSPG9Arht89vc-O62{LTiCMXal6T%4^CpKfN$*H<;8=V-?j4G!2ECc&XlB%#NFN`5 ze<(TP?MMzB#4|;o52>fSPh^s*ekR_^9(htCK3H2xwuuI3NeN~AqRnb0RPQ0nj?LtNJ4cl7nrqeFrsx4VPh^jW&}hh_&g*@mUDh1P*P+pQ|09@#mxTF$ z75gCpr*X|432wt}L{B8>hkn8gghm%#y7Q+?b7=H$|0VbVUQiY&5nGX+CM>qa-vaaS z96z>!p=aZ(kc2ET$F_(I=-o%p1|K0yso4U|FAl*1+*h-@M|&?fAB6|-46|4GAPnO^ zR**ezu7X8)hS|JF6Wb(suGPy|p@~w50oA&7bb(Jm8ZR&S+DK>EHq^^Dtq-*OVgo7^ZR8tOP5tg2*kwSvX6WfzZT!weHkcYYt633QoX3JVaSA zBz{3Qjk%}6H{f3$z*Po@UPLUyIrx^C6Hk=^^zdZ~M&KH<^J><}`u8Yr!YX&DS>2<9 zeJ#g$CHE5+ataH4hWl7S_En3UJGq~(do*=V;sLE*z6wqK>@c7ucMgS2!UdCffhn~l z=aGzLlF-zOMI{@XrOnnHS}R7=$NPM|O>8HuwcbAfSMXalr6(lb&f5_+N-zU6gc%4; zpQ+NFx2rUVrls9`@DcRl z_()uZIW=2={nfOOck&T6t9vxlaQGn~6%~ZFoom^O@7FS61=-2N7kNfh&~=Yy!#gBl z*ZSqVAbZ_mWR30|Ya4E<#@Bk8n6lwUInQM6O~+`!qN0uUvf)l^j;+;0Z?5%Su|u39 ztm})W2tH_a>b{>OQ6;L7U6x=KRtYmAjNYr!t?3%gLiD1wOjL`Lly&{sqaa?DFXx?qIbHd%kjHWV$W+R$+;W5G@EnW!vlul728r8UN(ro0*zyq;Qj1ks- zN3rt~+{yk2{vP;L>=$En-K5#r2}z7=HS>*-O*o8f%AI4~vr0WL##>C;*p!@SG9vtY U%*MX4sOXi3v1`^GTPsNa1FnTD-~a#s diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/.RefJavaCompilerTests.xtendbin deleted file mode 100644 index 57eb439a66364da7affca7d64939766a731a9577..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4323 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 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.java deleted file mode 100644 index 8266df2..0000000 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/compiler/RefJavaCompilerTests.java +++ /dev/null @@ -1,635 +0,0 @@ -package hu.elte.refjava.lang.tests.compiler; - -import com.google.inject.Inject; -import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.extensions.InjectionExtension; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.Extension; -import org.eclipse.xtext.xbase.testing.CompilationTestHelper; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -@ExtendWith(InjectionExtension.class) -@InjectWith(RefJavaInjectorProvider.class) -@SuppressWarnings("all") -public class RefJavaCompilerTests { - @Inject - @Extension - private CompilationTestHelper _compilationTestHelper; - - @Test - public void compileSchemeTypes() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package file.test;"); - _builder.newLine(); - _builder.newLine(); - _builder.append("local refactoring localTest()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.newLine(); - _builder.append("block refactoring blockTest()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.newLine(); - _builder.append("lambda refactoring lambdaTest()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.newLine(); - _builder.append("class refactoring classTest()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("MULTIPLE FILES WERE GENERATED"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("File 1 : /myProject/./src-gen/file/test/blockTest.java"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("package file.test;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.BlockRefactoring;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("@SuppressWarnings(\"all\")"); - _builder_1.newLine(); - _builder_1.append("public class blockTest extends BlockRefactoring {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("public blockTest() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super(\"nothing\", \"nothing\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("File 2 : /myProject/./src-gen/file/test/classTest.java"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("package file.test;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.ClassRefactoring;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("@SuppressWarnings(\"all\")"); - _builder_1.newLine(); - _builder_1.append("public class classTest extends ClassRefactoring {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("public classTest() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super(\"nothing\", \"nothing\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("File 3 : /myProject/./src-gen/file/test/lambdaTest.java"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("package file.test;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.LambdaRefactoring;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("@SuppressWarnings(\"all\")"); - _builder_1.newLine(); - _builder_1.append("public class lambdaTest extends LambdaRefactoring {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("public lambdaTest() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super(\"nothing\", \"nothing\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("File 4 : /myProject/./src-gen/file/test/localTest.java"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("package file.test;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.LocalRefactoring;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("@SuppressWarnings(\"all\")"); - _builder_1.newLine(); - _builder_1.append("public class localTest extends LocalRefactoring {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("public localTest() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super(\"nothing\", \"nothing\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.newLine(); - this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void compileSchemeWithTargetClosure() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package test;"); - _builder.newLine(); - _builder.newLine(); - _builder.append("block refactoring test()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("target"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("package test;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.BlockRefactoring;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("@SuppressWarnings(\"all\")"); - _builder_1.newLine(); - _builder_1.append("public class test extends BlockRefactoring {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("public test() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super(\"nothing\", \"nothing\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("@Override"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("protected boolean safeTargetCheck() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("return super.targetCheck(\"nothing\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void compileSchemeWithPrecondition() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package test;"); - _builder.newLine(); - _builder.newLine(); - _builder.append("local refactoring test()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("when"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("precondition"); - _builder.newLine(); - _builder.append("\t\t"); - _builder.append("isSingle(target) "); - _builder.newLine(); - _builder.append("\t\t"); - _builder.append("&& true == true"); - _builder.newLine(); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("package test;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.Check;"); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.LocalRefactoring;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("@SuppressWarnings(\"all\")"); - _builder_1.newLine(); - _builder_1.append("public class test extends LocalRefactoring {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("public test() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super(\"nothing\", \"nothing\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private boolean instanceCheck() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("return (Check.isSingle(bindings.get(\"target\")) && (true == true));"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("@Override"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("protected boolean check() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("return super.check() && instanceCheck();"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void compileSchemeWithAssignments() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package test;"); - _builder.newLine(); - _builder.newLine(); - _builder.append("local refactoring test()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("when"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("assignment"); - _builder.newLine(); - _builder.append("\t\t"); - _builder.append("name#N = \"TEST\" ;"); - _builder.newLine(); - _builder.append("\t\t"); - _builder.append("type#T = type(target) ;"); - _builder.newLine(); - _builder.append("\t\t"); - _builder.append("visibility#V = visibility(target) ;"); - _builder.newLine(); - _builder.append("\t\t"); - _builder.append("parameter#P = parameters(target)"); - _builder.newLine(); - _builder.newLine(); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("package test;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.Check;"); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.LocalRefactoring;"); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.lang.refJava.Visibility;"); - _builder_1.newLine(); - _builder_1.append("import java.util.List;"); - _builder_1.newLine(); - _builder_1.append("import org.eclipse.jdt.core.dom.SingleVariableDeclaration;"); - _builder_1.newLine(); - _builder_1.append("import org.eclipse.jdt.core.dom.Type;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("@SuppressWarnings(\"all\")"); - _builder_1.newLine(); - _builder_1.append("public class test extends LocalRefactoring {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("public test() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super(\"nothing\", \"nothing\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private String valueof_name_N() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("return \"TEST\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private void set_name_N() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("nameBindings.put(\"N\", valueof_name_N());"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private Type valueof_type_T() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("Type _type = Check.type(bindings.get(\"target\"));"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("return _type;"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private void set_type_T() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("typeBindings.put(\"T\", valueof_type_T());"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private List valueof_visibility_V() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("Visibility _visibility = Check.visibility(bindings.get(\"target\"));"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("return _visibility;"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private void set_visibility_V() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("visibilityBindings.put(\"V\", valueof_visibility_V());"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private List valueof_parameter_P() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("List _parameters = Check.parameters(bindings.get(\"target\"));"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("return _parameters;"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("private void set_parameter_P() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("parameterBindings.put(\"P\", valueof_parameter_P());"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("protected void setMetaVariables() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("set_name_N();"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("set_type_T();"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("set_visibility_V();"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("set_parameter_P();"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.matchingTypeReferenceString = \"\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.replacementTypeReferenceString = \"\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.targetTypeReferenceString = \"\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.definitionTypeReferenceString = \"\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void compileSchemeWithTypeRefStrings() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package test;"); - _builder.newLine(); - _builder.newLine(); - _builder.append("class refactoring test()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("int a ; char b ;"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("double c ; long d ; String e ;"); - _builder.newLine(); - _builder.append("target"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("public void f(boolean b) { }"); - _builder.newLine(); - _builder.append("definition"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("byte b ; short s ;"); - _builder.newLine(); - _builder.newLine(); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("package test;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("import hu.elte.refjava.api.ClassRefactoring;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("@SuppressWarnings(\"all\")"); - _builder_1.newLine(); - _builder_1.append("public class test extends ClassRefactoring {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("public test() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super(\"int a ; char b ;\", \"double c ; long d ; String e ;\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("protected void setMetaVariables() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.definitionString = \"byte b ; short s ;\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.matchingTypeReferenceString = \"int|char|\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.replacementTypeReferenceString = \"double|long|java.lang.String|\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.targetTypeReferenceString = \"void|boolean|\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("super.definitionTypeReferenceString = \"byte|short|\";"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("@Override"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("protected boolean safeTargetCheck() {"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("return super.targetCheck(\"public void f(boolean b) { }\");"); - _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("}"); - _builder_1.newLine(); - this._compilationTestHelper.assertCompilesTo(_builder, _builder_1); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } -} diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/.RefJavaParsingTest.java._trace deleted file mode 100644 index f3451a85821176f406522fbab57b95de55ff155a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15750 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 diff --git a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.java b/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.java deleted file mode 100644 index a5f224f..0000000 --- a/hu.elte.refjava.lang.tests/xtend-gen/hu/elte/refjava/lang/tests/parser/RefJavaParsingTests.java +++ /dev/null @@ -1,307 +0,0 @@ -package hu.elte.refjava.lang.tests.parser; - -import com.google.inject.Inject; -import hu.elte.refjava.lang.refJava.AssignmentList; -import hu.elte.refjava.lang.refJava.File; -import hu.elte.refjava.lang.refJava.MetaVariableType; -import hu.elte.refjava.lang.refJava.PBlockExpression; -import hu.elte.refjava.lang.refJava.PConstructorCall; -import hu.elte.refjava.lang.refJava.PExpression; -import hu.elte.refjava.lang.refJava.PFeatureCall; -import hu.elte.refjava.lang.refJava.PMemberFeatureCall; -import hu.elte.refjava.lang.refJava.PMetaVariable; -import hu.elte.refjava.lang.refJava.PMethodDeclaration; -import hu.elte.refjava.lang.refJava.PNothingExpression; -import hu.elte.refjava.lang.refJava.PReturnExpression; -import hu.elte.refjava.lang.refJava.PTargetExpression; -import hu.elte.refjava.lang.refJava.PVariableDeclaration; -import hu.elte.refjava.lang.refJava.Pattern; -import hu.elte.refjava.lang.refJava.RefactoringRule; -import hu.elte.refjava.lang.refJava.SchemeInstanceRule; -import hu.elte.refjava.lang.refJava.SchemeType; -import hu.elte.refjava.lang.tests.RefJavaInjectorProvider; -import org.eclipse.emf.common.util.EList; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.extensions.InjectionExtension; -import org.eclipse.xtext.testing.util.ParseHelper; -import org.eclipse.xtext.xbase.XExpression; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.Extension; -import org.eclipse.xtext.xbase.lib.Functions.Function1; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -@ExtendWith(InjectionExtension.class) -@InjectWith(RefJavaInjectorProvider.class) -@SuppressWarnings("all") -public class RefJavaParsingTests { - @Inject - @Extension - private ParseHelper parseHelper; - - @Test - public void parseFile() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package file.test;"); - _builder.newLine(); - final File file = this.parseHelper.parse(_builder); - Assertions.assertTrue((file instanceof File)); - Assertions.assertEquals(file.getName(), "file.test"); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void parseAllSchemeTypes() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package file.test;"); - _builder.newLine(); - _builder.append("local refactoring localTest()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.newLine(); - _builder.append("block refactoring blockTest()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.newLine(); - _builder.append("lambda refactoring lambdaTest()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.newLine(); - _builder.append("class refactoring classTest()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - final File file = this.parseHelper.parse(_builder); - final Function1 _function = (RefactoringRule it) -> { - return Boolean.valueOf((it instanceof SchemeInstanceRule)); - }; - Assertions.assertTrue(IterableExtensions.forall(file.getRefactorings(), _function)); - RefactoringRule _get = file.getRefactorings().get(0); - Assertions.assertEquals(((SchemeInstanceRule) _get).getType(), SchemeType.LOCAL); - RefactoringRule _get_1 = file.getRefactorings().get(0); - Assertions.assertEquals(((SchemeInstanceRule) _get_1).getName(), "localTest"); - RefactoringRule _get_2 = file.getRefactorings().get(1); - Assertions.assertEquals(((SchemeInstanceRule) _get_2).getType(), SchemeType.BLOCK); - RefactoringRule _get_3 = file.getRefactorings().get(1); - Assertions.assertEquals(((SchemeInstanceRule) _get_3).getName(), "blockTest"); - RefactoringRule _get_4 = file.getRefactorings().get(2); - Assertions.assertEquals(((SchemeInstanceRule) _get_4).getType(), SchemeType.LAMBDA); - RefactoringRule _get_5 = file.getRefactorings().get(2); - Assertions.assertEquals(((SchemeInstanceRule) _get_5).getName(), "lambdaTest"); - RefactoringRule _get_6 = file.getRefactorings().get(3); - Assertions.assertEquals(((SchemeInstanceRule) _get_6).getType(), SchemeType.CLASS); - RefactoringRule _get_7 = file.getRefactorings().get(3); - Assertions.assertEquals(((SchemeInstanceRule) _get_7).getName(), "classTest"); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void parseSchemeProperties() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package file.test;"); - _builder.newLine(); - _builder.append("local refactoring test()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("target"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("definition"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - _builder.append("when"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("assignment"); - _builder.newLine(); - _builder.append("\t\t"); - _builder.append("name#test = \"TEST\""); - _builder.newLine(); - _builder.append("\t"); - _builder.append("precondition"); - _builder.newLine(); - _builder.append("\t\t"); - _builder.append("true"); - _builder.newLine(); - final File file = this.parseHelper.parse(_builder); - RefactoringRule _head = IterableExtensions.head(file.getRefactorings()); - final SchemeInstanceRule refactoring = ((SchemeInstanceRule) _head); - Pattern _matchingPattern = refactoring.getMatchingPattern(); - Assertions.assertTrue((_matchingPattern instanceof Pattern)); - Pattern _replacementPattern = refactoring.getReplacementPattern(); - Assertions.assertTrue((_replacementPattern instanceof Pattern)); - Pattern _targetPattern = refactoring.getTargetPattern(); - boolean _tripleEquals = (_targetPattern == null); - Assertions.assertFalse(_tripleEquals); - Pattern _targetPattern_1 = refactoring.getTargetPattern(); - Assertions.assertTrue((_targetPattern_1 instanceof Pattern)); - Pattern _definitionPattern = refactoring.getDefinitionPattern(); - boolean _tripleEquals_1 = (_definitionPattern == null); - Assertions.assertFalse(_tripleEquals_1); - Pattern _definitionPattern_1 = refactoring.getDefinitionPattern(); - Assertions.assertTrue((_definitionPattern_1 instanceof Pattern)); - AssignmentList _assignments = refactoring.getAssignments(); - boolean _tripleEquals_2 = (_assignments == null); - Assertions.assertFalse(_tripleEquals_2); - AssignmentList _assignments_1 = refactoring.getAssignments(); - Assertions.assertTrue((_assignments_1 instanceof AssignmentList)); - XExpression _precondition = refactoring.getPrecondition(); - boolean _tripleEquals_3 = (_precondition == null); - Assertions.assertFalse(_tripleEquals_3); - XExpression _precondition_1 = refactoring.getPrecondition(); - Assertions.assertTrue((_precondition_1 instanceof XExpression)); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void parsePatternExpressions() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package file.test;"); - _builder.newLine(); - _builder.append("local refactoring test()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("#s ; target ; return ; nothing ; { } ; public int a ; public void f() { } ; method() ; A.method() ; new F() { }"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - final File file = this.parseHelper.parse(_builder); - RefactoringRule _head = IterableExtensions.head(file.getRefactorings()); - final Pattern pattern = ((SchemeInstanceRule) _head).getMatchingPattern(); - EList _patterns = pattern.getPatterns(); - boolean _tripleEquals = (_patterns == null); - Assertions.assertFalse(_tripleEquals); - final Function1 _function = (PExpression it) -> { - return Boolean.valueOf((it instanceof PExpression)); - }; - Assertions.assertTrue(IterableExtensions.forall(pattern.getPatterns(), _function)); - final EList patterns = pattern.getPatterns(); - PExpression _get = patterns.get(0); - Assertions.assertTrue((_get instanceof PMetaVariable)); - PExpression _get_1 = patterns.get(1); - Assertions.assertTrue((_get_1 instanceof PTargetExpression)); - PExpression _get_2 = patterns.get(2); - Assertions.assertTrue((_get_2 instanceof PReturnExpression)); - PExpression _get_3 = patterns.get(3); - Assertions.assertTrue((_get_3 instanceof PNothingExpression)); - PExpression _get_4 = patterns.get(4); - Assertions.assertTrue((_get_4 instanceof PBlockExpression)); - PExpression _get_5 = patterns.get(5); - Assertions.assertTrue((_get_5 instanceof PVariableDeclaration)); - PExpression _get_6 = patterns.get(6); - Assertions.assertTrue((_get_6 instanceof PMethodDeclaration)); - PExpression _get_7 = patterns.get(7); - Assertions.assertTrue((_get_7 instanceof PFeatureCall)); - PExpression _get_8 = patterns.get(8); - Assertions.assertTrue((_get_8 instanceof PMemberFeatureCall)); - PExpression _get_9 = patterns.get(9); - Assertions.assertTrue((_get_9 instanceof PConstructorCall)); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void parseMetaVariables() { - try { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("package file.test;"); - _builder.newLine(); - _builder.append("local refactoring test()"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("#s ; name#n ; type#t ; visibility#v ; argument#a.. ; parameter#p.."); - _builder.newLine(); - _builder.append("\t"); - _builder.append("~~~~~~~"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("nothing"); - _builder.newLine(); - final File file = this.parseHelper.parse(_builder); - RefactoringRule _head = IterableExtensions.head(file.getRefactorings()); - final EList patterns = ((SchemeInstanceRule) _head).getMatchingPattern().getPatterns(); - final Function1 _function = (PExpression it) -> { - return Boolean.valueOf((it instanceof PMetaVariable)); - }; - Assertions.assertTrue(IterableExtensions.forall(patterns, _function)); - PExpression _get = patterns.get(0); - Assertions.assertEquals(((PMetaVariable) _get).getType(), MetaVariableType.CODE); - PExpression _get_1 = patterns.get(1); - Assertions.assertEquals(((PMetaVariable) _get_1).getType(), MetaVariableType.NAME); - PExpression _get_2 = patterns.get(2); - Assertions.assertEquals(((PMetaVariable) _get_2).getType(), MetaVariableType.TYPE); - PExpression _get_3 = patterns.get(3); - Assertions.assertEquals(((PMetaVariable) _get_3).getType(), MetaVariableType.VISIBILITY); - PExpression _get_4 = patterns.get(4); - Assertions.assertEquals(((PMetaVariable) _get_4).getType(), MetaVariableType.ARGUMENT); - PExpression _get_5 = patterns.get(5); - Assertions.assertEquals(((PMetaVariable) _get_5).getType(), MetaVariableType.PARAMETER); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } -} From 3225c5401e27561311b6291b9c3e5ff2cd4df648 Mon Sep 17 00:00:00 2001 From: dtamaas <52272434+dtamaas@users.noreply.github.com> Date: Sun, 8 Nov 2020 09:57:54 +0100 Subject: [PATCH 13/14] Adding comment to the PatternMatcher --- .../src/hu/elte/refjava/api/patterns/PatternMatcher.xtend | 1 + 1 file changed, 1 insertion(+) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend index bc26516..c44ad14 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/PatternMatcher.xtend @@ -523,6 +523,7 @@ class PatternMatcher { var List postTargetExpression = patterns.clone.reverse.takeWhile[ !(it instanceof PTargetExpression) ].toList.reverse val List targetEnvironment = newArrayList + // If the user use the program as we intended, the selectedNodes.head.parent will be direct contents of a block. targetEnvironment.addAll( (selectedNodes.head.parent as Block).statements ) var List preSelectedNodes = (targetEnvironment as List).clone.takeWhile[ it != selectedNodes.head ].toList From e58b9631552a35d834a0b7b4a090cd30fda1f54b Mon Sep 17 00:00:00 2001 From: dtamaas <52272434+dtamaas@users.noreply.github.com> Date: Sun, 8 Nov 2020 10:08:11 +0100 Subject: [PATCH 14/14] Adding comment to ASTBuilder --- .../src/hu/elte/refjava/api/patterns/ASTBuilder.xtend | 1 + 1 file changed, 1 insertion(+) diff --git a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend index a936a1a..9670170 100644 --- a/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend +++ b/hu.elte.refjava.lang/src/hu/elte/refjava/api/patterns/ASTBuilder.xtend @@ -338,6 +338,7 @@ class ASTBuilder { } //method invocation (without expression) builder + // This function is intended for method invocation without expression. Not to be confused with field access. (Field access don't have parantheses at the end) def private dispatch doBuild(PFeatureCall featureCall) { val methodInv = ast.newMethodInvocation