package org.example.smalljava.tests;
import com.google.common.base.Objects;
import com.google.common.collect.Iterators;
import com.google.inject.Inject;
import com.google.inject.Provider;
import java.util.Iterator;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.junit4.InjectWith;
import org.eclipse.xtext.junit4.XtextRunner;
import org.eclipse.xtext.junit4.util.ParseHelper;
import org.eclipse.xtext.junit4.validation.ValidationTestHelper;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.scoping.IScopeProvider;
import org.eclipse.xtext.xbase.lib.Conversions;
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.eclipse.xtext.xbase.lib.IteratorExtensions;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.example.smalljava.SmallJavaInjectorProvider;
import org.example.smalljava.smallJava.SJClass;
import org.example.smalljava.smallJava.SJExpression;
import org.example.smalljava.smallJava.SJField;
import org.example.smalljava.smallJava.SJMember;
import org.example.smalljava.smallJava.SJMemberSelection;
import org.example.smalljava.smallJava.SJMethod;
import org.example.smalljava.smallJava.SJMethodBody;
import org.example.smalljava.smallJava.SJProgram;
import org.example.smalljava.smallJava.SJReturn;
import org.example.smalljava.smallJava.SJStatement;
import org.example.smalljava.smallJava.SJSymbol;
import org.example.smalljava.smallJava.SJSymbolRef;
import org.example.smalljava.smallJava.SJVariableDeclaration;
import org.example.smalljava.smallJava.SmallJavaPackage;
import org.example.smalljava.util.SmallJavaModelUtil;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(XtextRunner.class)
@InjectWith(SmallJavaInjectorProvider.class)
@SuppressWarnings("all")
public class SmallJavaScopeProviderTest {
@Inject
@Extension
private ParseHelper<SJProgram> _parseHelper;
@Inject
@Extension
private ValidationTestHelper _validationTestHelper;
@Inject
@Extension
private IScopeProvider _iScopeProvider;
@Inject
private Provider<ResourceSet> resourceSetProvider;
@Test
public void testScopeProvider() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C {");
_builder.newLine();
_builder.append("\t");
_builder.append("A f;");
_builder.newLine();
_builder.append("\t");
_builder.append("A m(A p) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("A v = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("class A {}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_head);
SJMethod _last = IterableExtensions.<SJMethod>last(_methods);
SJReturn _returnStatement = SmallJavaModelUtil.returnStatement(_last);
SJExpression _expression = _returnStatement.getExpression();
final Procedure1<SJExpression> _function = new Procedure1<SJExpression>() {
@Override
public void apply(final SJExpression it) {
EReference _sJMemberSelection_Member = SmallJavaPackage.eINSTANCE.getSJMemberSelection_Member();
SmallJavaScopeProviderTest.this.assertScope(it, _sJMemberSelection_Member,
"f, m, C.f, C.m");
EReference _sJSymbolRef_Symbol = SmallJavaPackage.eINSTANCE.getSJSymbolRef_Symbol();
SmallJavaScopeProviderTest.this.assertScope(it, _sJSymbolRef_Symbol,
"v, p");
}
};
ObjectExtensions.<SJExpression>operator_doubleArrow(_expression, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testScopeProviderForMember() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C {");
_builder.newLine();
_builder.append("\t");
_builder.append("C f;");
_builder.newLine();
_builder.append("\t");
_builder.append("C m(C p) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("C v = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_head);
SJMethod _last = IterableExtensions.<SJMethod>last(_methods);
SJReturn _returnStatement = SmallJavaModelUtil.returnStatement(_last);
SJExpression _expression = _returnStatement.getExpression();
final Procedure1<SJExpression> _function = new Procedure1<SJExpression>() {
@Override
public void apply(final SJExpression it) {
EReference _sJMemberSelection_Member = SmallJavaPackage.eINSTANCE.getSJMemberSelection_Member();
SmallJavaScopeProviderTest.this.assertScope(it, _sJMemberSelection_Member,
"f, m, C.f, C.m");
}
};
ObjectExtensions.<SJExpression>operator_doubleArrow(_expression, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testScopeProviderForSymbols() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C {");
_builder.newLine();
_builder.append("\t");
_builder.append("A m(A p) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("A v1 = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("if (true) {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("A v2 = null;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("A v3 = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("A v4 = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("class A {}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_head);
SJMethod _last = IterableExtensions.<SJMethod>last(_methods);
SJMethodBody _body = _last.getBody();
TreeIterator<EObject> _eAllContents = _body.eAllContents();
Iterator<SJVariableDeclaration> _filter = Iterators.<SJVariableDeclaration>filter(_eAllContents, SJVariableDeclaration.class);
final Procedure1<Iterator<SJVariableDeclaration>> _function = new Procedure1<Iterator<SJVariableDeclaration>>() {
@Override
public void apply(final Iterator<SJVariableDeclaration> it) {
final Function1<SJVariableDeclaration, Boolean> _function = new Function1<SJVariableDeclaration, Boolean>() {
@Override
public Boolean apply(final SJVariableDeclaration it) {
String _name = it.getName();
return Boolean.valueOf(Objects.equal(_name, "v3"));
}
};
SJVariableDeclaration _findFirst = IteratorExtensions.<SJVariableDeclaration>findFirst(it, _function);
SJExpression _expression = _findFirst.getExpression();
EReference _sJSymbolRef_Symbol = SmallJavaPackage.eINSTANCE.getSJSymbolRef_Symbol();
SmallJavaScopeProviderTest.this.assertScope(_expression, _sJSymbolRef_Symbol,
"v2, v1, p");
final Function1<SJVariableDeclaration, Boolean> _function_1 = new Function1<SJVariableDeclaration, Boolean>() {
@Override
public Boolean apply(final SJVariableDeclaration it) {
String _name = it.getName();
return Boolean.valueOf(Objects.equal(_name, "v4"));
}
};
SJVariableDeclaration _findFirst_1 = IteratorExtensions.<SJVariableDeclaration>findFirst(it, _function_1);
SJExpression _expression_1 = _findFirst_1.getExpression();
EReference _sJSymbolRef_Symbol_1 = SmallJavaPackage.eINSTANCE.getSJSymbolRef_Symbol();
SmallJavaScopeProviderTest.this.assertScope(_expression_1, _sJSymbolRef_Symbol_1,
"v1, p");
}
};
ObjectExtensions.<Iterator<SJVariableDeclaration>>operator_doubleArrow(_filter, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testFieldsScoping() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C { ");
_builder.newLine();
_builder.append("\t");
_builder.append("C a;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("class D extends C {");
_builder.newLine();
_builder.append("\t");
_builder.append("C b;");
_builder.newLine();
_builder.append("\t");
_builder.append("C m(C p1, D p2) { return this.b; }");
_builder.newLine();
_builder.append("}");
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _last = IterableExtensions.<SJClass>last(_classes);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_last);
SJMethod _get = ((SJMethod[])Conversions.unwrapArray(_methods, SJMethod.class))[0];
SJReturn _returnStatement = SmallJavaModelUtil.returnStatement(_get);
SJExpression _expression = _returnStatement.getExpression();
EReference _sJMemberSelection_Member = SmallJavaPackage.eINSTANCE.getSJMemberSelection_Member();
this.assertScope(_expression, _sJMemberSelection_Member, "b, m, a");
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testMethodsScoping() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C { ");
_builder.newLine();
_builder.append("\t");
_builder.append("C n() { return null; }");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("class D extends C {");
_builder.newLine();
_builder.append("\t");
_builder.append("C f;");
_builder.newLine();
_builder.append("\t");
_builder.append("C m() { return this.m(); }");
_builder.newLine();
_builder.append("}");
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _last = IterableExtensions.<SJClass>last(_classes);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_last);
SJMethod _get = ((SJMethod[])Conversions.unwrapArray(_methods, SJMethod.class))[0];
SJReturn _returnStatement = SmallJavaModelUtil.returnStatement(_get);
SJExpression _expression = _returnStatement.getExpression();
EReference _sJMemberSelection_Member = SmallJavaPackage.eINSTANCE.getSJMemberSelection_Member();
this.assertScope(_expression, _sJMemberSelection_Member, "m, f, n");
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testSymbolScoping() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C {");
_builder.newLine();
_builder.append("\t");
_builder.append("C m(C p) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("C v1 = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("if (true) {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("C v2 = p;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("if (true) {");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("C v3 = v1;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("C v4 = v1;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("C v5 = v1;");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _last = IterableExtensions.<SJClass>last(_classes);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_last);
SJMethod _get = ((SJMethod[])Conversions.unwrapArray(_methods, SJMethod.class))[0];
TreeIterator<EObject> _eAllContents = _get.eAllContents();
Iterator<SJVariableDeclaration> _filter = Iterators.<SJVariableDeclaration>filter(_eAllContents, SJVariableDeclaration.class);
final Procedure1<Iterator<SJVariableDeclaration>> _function = new Procedure1<Iterator<SJVariableDeclaration>>() {
@Override
public void apply(final Iterator<SJVariableDeclaration> it) {
final Function1<SJVariableDeclaration, Boolean> _function = new Function1<SJVariableDeclaration, Boolean>() {
@Override
public Boolean apply(final SJVariableDeclaration it) {
String _name = it.getName();
return Boolean.valueOf(Objects.equal(_name, "v3"));
}
};
SJVariableDeclaration _findFirst = IteratorExtensions.<SJVariableDeclaration>findFirst(it, _function);
SJExpression _expression = _findFirst.getExpression();
EReference _sJSymbolRef_Symbol = SmallJavaPackage.eINSTANCE.getSJSymbolRef_Symbol();
SmallJavaScopeProviderTest.this.assertScope(_expression, _sJSymbolRef_Symbol,
"v2, v1, p");
}
};
ObjectExtensions.<Iterator<SJVariableDeclaration>>operator_doubleArrow(_filter, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testFieldScoping() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class A { ");
_builder.newLine();
_builder.append("\t");
_builder.append("D a;");
_builder.newLine();
_builder.append("\t");
_builder.append("D b;");
_builder.newLine();
_builder.append("\t");
_builder.append("D c;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("class B extends A {");
_builder.newLine();
_builder.append("\t");
_builder.append("D b;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("class C extends B {");
_builder.newLine();
_builder.append("\t");
_builder.append("D a;");
_builder.newLine();
_builder.append("\t");
_builder.append("D m() { return this.a; }");
_builder.newLine();
_builder.append("\t");
_builder.append("D n() { return this.b; }");
_builder.newLine();
_builder.append("\t");
_builder.append("D p() { return this.c; }");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("class D{}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
final Procedure1<EList<SJClass>> _function = new Procedure1<EList<SJClass>>() {
@Override
public void apply(final EList<SJClass> it) {
SJClass _get = it.get(2);
Iterable<SJField> _fields = SmallJavaModelUtil.fields(_get);
SJField _get_1 = ((SJField[])Conversions.unwrapArray(_fields, SJField.class))[0];
SJClass _get_2 = it.get(2);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_get_2);
SJMethod _get_3 = ((SJMethod[])Conversions.unwrapArray(_methods, SJMethod.class))[0];
SJMemberSelection _returnExpSel = SmallJavaScopeProviderTest.this.returnExpSel(_get_3);
SJMember _member = _returnExpSel.getMember();
Assert.assertSame(_get_1, _member);
SJClass _get_4 = it.get(1);
Iterable<SJField> _fields_1 = SmallJavaModelUtil.fields(_get_4);
SJField _get_5 = ((SJField[])Conversions.unwrapArray(_fields_1, SJField.class))[0];
SJClass _get_6 = it.get(2);
Iterable<SJMethod> _methods_1 = SmallJavaModelUtil.methods(_get_6);
SJMethod _get_7 = ((SJMethod[])Conversions.unwrapArray(_methods_1, SJMethod.class))[1];
SJMemberSelection _returnExpSel_1 = SmallJavaScopeProviderTest.this.returnExpSel(_get_7);
SJMember _member_1 = _returnExpSel_1.getMember();
Assert.assertSame(_get_5, _member_1);
SJClass _get_8 = it.get(0);
Iterable<SJField> _fields_2 = SmallJavaModelUtil.fields(_get_8);
SJField _get_9 = ((SJField[])Conversions.unwrapArray(_fields_2, SJField.class))[2];
SJClass _get_10 = it.get(2);
Iterable<SJMethod> _methods_2 = SmallJavaModelUtil.methods(_get_10);
SJMethod _get_11 = ((SJMethod[])Conversions.unwrapArray(_methods_2, SJMethod.class))[2];
SJMemberSelection _returnExpSel_2 = SmallJavaScopeProviderTest.this.returnExpSel(_get_11);
SJMember _member_2 = _returnExpSel_2.getMember();
Assert.assertSame(_get_9, _member_2);
}
};
ObjectExtensions.<EList<SJClass>>operator_doubleArrow(_classes, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testMethodScoping() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class A { ");
_builder.newLine();
_builder.append("\t");
_builder.append("D n() { return null; }");
_builder.newLine();
_builder.append("\t");
_builder.append("D m() { return null; }");
_builder.newLine();
_builder.append("\t");
_builder.append("D o() { return null; }");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("class B extends A { ");
_builder.newLine();
_builder.append("\t");
_builder.append("D n() { return null; }");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("class C extends B {");
_builder.newLine();
_builder.append("\t");
_builder.append("D m() { return this.m(); }");
_builder.newLine();
_builder.append("\t");
_builder.append("D p() { return this.n(); }");
_builder.newLine();
_builder.append("\t");
_builder.append("D q() { return this.o(); }");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("class D {}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
final Procedure1<EList<SJClass>> _function = new Procedure1<EList<SJClass>>() {
@Override
public void apply(final EList<SJClass> it) {
SJClass _get = it.get(2);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_get);
SJMethod _get_1 = ((SJMethod[])Conversions.unwrapArray(_methods, SJMethod.class))[0];
SJClass _get_2 = it.get(2);
Iterable<SJMethod> _methods_1 = SmallJavaModelUtil.methods(_get_2);
SJMethod _get_3 = ((SJMethod[])Conversions.unwrapArray(_methods_1, SJMethod.class))[0];
SJMemberSelection _returnExpSel = SmallJavaScopeProviderTest.this.returnExpSel(_get_3);
SJMember _member = _returnExpSel.getMember();
Assert.assertSame(_get_1, _member);
SJClass _get_4 = it.get(1);
Iterable<SJMethod> _methods_2 = SmallJavaModelUtil.methods(_get_4);
SJMethod _get_5 = ((SJMethod[])Conversions.unwrapArray(_methods_2, SJMethod.class))[0];
SJClass _get_6 = it.get(2);
Iterable<SJMethod> _methods_3 = SmallJavaModelUtil.methods(_get_6);
SJMethod _get_7 = ((SJMethod[])Conversions.unwrapArray(_methods_3, SJMethod.class))[1];
SJMemberSelection _returnExpSel_1 = SmallJavaScopeProviderTest.this.returnExpSel(_get_7);
SJMember _member_1 = _returnExpSel_1.getMember();
Assert.assertSame(_get_5, _member_1);
SJClass _get_8 = it.get(0);
Iterable<SJMethod> _methods_4 = SmallJavaModelUtil.methods(_get_8);
SJMethod _get_9 = ((SJMethod[])Conversions.unwrapArray(_methods_4, SJMethod.class))[2];
SJClass _get_10 = it.get(2);
Iterable<SJMethod> _methods_5 = SmallJavaModelUtil.methods(_get_10);
SJMethod _get_11 = ((SJMethod[])Conversions.unwrapArray(_methods_5, SJMethod.class))[2];
SJMemberSelection _returnExpSel_2 = SmallJavaScopeProviderTest.this.returnExpSel(_get_11);
SJMember _member_2 = _returnExpSel_2.getMember();
Assert.assertSame(_get_9, _member_2);
}
};
ObjectExtensions.<EList<SJClass>>operator_doubleArrow(_classes, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testVariableShadowsParamScoping() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C {");
_builder.newLine();
_builder.append("\t");
_builder.append("A m(A a) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("A a = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return a;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("class A {}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_head);
SJMethod _head_1 = IterableExtensions.<SJMethod>head(_methods);
final Procedure1<SJMethod> _function = new Procedure1<SJMethod>() {
@Override
public void apply(final SJMethod it) {
SJReturn _returnStatement = SmallJavaModelUtil.returnStatement(it);
SJExpression _expression = _returnStatement.getExpression();
EReference _sJSymbolRef_Symbol = SmallJavaPackage.eINSTANCE.getSJSymbolRef_Symbol();
SmallJavaScopeProviderTest.this.assertScope(_expression, _sJSymbolRef_Symbol,
"a");
}
};
ObjectExtensions.<SJMethod>operator_doubleArrow(_head_1, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testFieldsAndMethodsWithTheSameName() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C {");
_builder.newLine();
_builder.append("\t");
_builder.append("A f;");
_builder.newLine();
_builder.append("\t");
_builder.append("A f() {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return this.f(); // must refer to method f");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("A m() {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return this.m; // must refer to field m");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("A m;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("class A {}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
final Procedure1<SJClass> _function = new Procedure1<SJClass>() {
@Override
public void apply(final SJClass it) {
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(it);
SJMethod _head = IterableExtensions.<SJMethod>head(_methods);
Iterable<SJMethod> _methods_1 = SmallJavaModelUtil.methods(it);
SJMethod _head_1 = IterableExtensions.<SJMethod>head(_methods_1);
SJMemberSelection _returnExpSel = SmallJavaScopeProviderTest.this.returnExpSel(_head_1);
SJMember _member = _returnExpSel.getMember();
Assert.assertSame(_head, _member);
Iterable<SJField> _fields = SmallJavaModelUtil.fields(it);
SJField _last = IterableExtensions.<SJField>last(_fields);
Iterable<SJMethod> _methods_2 = SmallJavaModelUtil.methods(it);
SJMethod _last_1 = IterableExtensions.<SJMethod>last(_methods_2);
SJMemberSelection _returnExpSel_1 = SmallJavaScopeProviderTest.this.returnExpSel(_last_1);
SJMember _member_1 = _returnExpSel_1.getMember();
Assert.assertSame(_last, _member_1);
}
};
ObjectExtensions.<SJClass>operator_doubleArrow(_head, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testVariableShadowsParamLinking() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class A {");
_builder.newLine();
_builder.append("\t");
_builder.append("A m(A a) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("A a = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return a;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_head);
SJMethod _head_1 = IterableExtensions.<SJMethod>head(_methods);
final Procedure1<SJMethod> _function = new Procedure1<SJMethod>() {
@Override
public void apply(final SJMethod it) {
SmallJavaScopeProviderTest.this._validationTestHelper.assertNoErrors(it);
SJMethodBody _body = it.getBody();
EList<SJStatement> _statements = _body.getStatements();
SJStatement _head = IterableExtensions.<SJStatement>head(_statements);
SJReturn _returnStatement = SmallJavaModelUtil.returnStatement(it);
SJExpression _expression = _returnStatement.getExpression();
SJSymbol _symbol = ((SJSymbolRef) _expression).getSymbol();
Assert.assertSame(_head, _symbol);
}
};
ObjectExtensions.<SJMethod>operator_doubleArrow(_head_1, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testSuperScoping() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class B {");
_builder.newLine();
_builder.append("\t");
_builder.append("C f;");
_builder.newLine();
_builder.append("\t");
_builder.append("C g;");
_builder.newLine();
_builder.append("\t");
_builder.append("C m() { return null; }");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("class C extends B {");
_builder.newLine();
_builder.append("\t");
_builder.append("C f;");
_builder.newLine();
_builder.append("\t");
_builder.append("C m() { return this.m(); }");
_builder.newLine();
_builder.append("\t");
_builder.append("C p() { return super.m(); }");
_builder.newLine();
_builder.append("\t");
_builder.append("C m2() { return this.f; }");
_builder.newLine();
_builder.append("\t");
_builder.append("C p2() { return super.f; }");
_builder.newLine();
_builder.append("}");
SJProgram _parse = this._parseHelper.parse(_builder);
EList<SJClass> _classes = _parse.getClasses();
final Procedure1<EList<SJClass>> _function = new Procedure1<EList<SJClass>>() {
@Override
public void apply(final EList<SJClass> it) {
SJClass _get = it.get(1);
Iterable<SJMethod> _methods = SmallJavaModelUtil.methods(_get);
SJMethod _get_1 = ((SJMethod[])Conversions.unwrapArray(_methods, SJMethod.class))[0];
SJClass _get_2 = it.get(1);
Iterable<SJMethod> _methods_1 = SmallJavaModelUtil.methods(_get_2);
SJMethod _get_3 = ((SJMethod[])Conversions.unwrapArray(_methods_1, SJMethod.class))[0];
SJMemberSelection _returnExpSel = SmallJavaScopeProviderTest.this.returnExpSel(_get_3);
SJMember _member = _returnExpSel.getMember();
Assert.assertSame(_get_1, _member);
SJClass _get_4 = it.get(0);
Iterable<SJMethod> _methods_2 = SmallJavaModelUtil.methods(_get_4);
SJMethod _get_5 = ((SJMethod[])Conversions.unwrapArray(_methods_2, SJMethod.class))[0];
SJClass _get_6 = it.get(1);
Iterable<SJMethod> _methods_3 = SmallJavaModelUtil.methods(_get_6);
SJMethod _get_7 = ((SJMethod[])Conversions.unwrapArray(_methods_3, SJMethod.class))[1];
SJMemberSelection _returnExpSel_1 = SmallJavaScopeProviderTest.this.returnExpSel(_get_7);
SJMember _member_1 = _returnExpSel_1.getMember();
Assert.assertSame(_get_5, _member_1);
SJClass _get_8 = it.get(1);
Iterable<SJField> _fields = SmallJavaModelUtil.fields(_get_8);
SJField _get_9 = ((SJField[])Conversions.unwrapArray(_fields, SJField.class))[0];
SJClass _get_10 = it.get(1);
Iterable<SJMethod> _methods_4 = SmallJavaModelUtil.methods(_get_10);
SJMethod _get_11 = ((SJMethod[])Conversions.unwrapArray(_methods_4, SJMethod.class))[2];
SJMemberSelection _returnExpSel_2 = SmallJavaScopeProviderTest.this.returnExpSel(_get_11);
SJMember _member_2 = _returnExpSel_2.getMember();
Assert.assertSame(_get_9, _member_2);
SJClass _get_12 = it.get(0);
Iterable<SJField> _fields_1 = SmallJavaModelUtil.fields(_get_12);
SJField _get_13 = ((SJField[])Conversions.unwrapArray(_fields_1, SJField.class))[0];
SJClass _get_14 = it.get(1);
Iterable<SJMethod> _methods_5 = SmallJavaModelUtil.methods(_get_14);
SJMethod _get_15 = ((SJMethod[])Conversions.unwrapArray(_methods_5, SJMethod.class))[3];
SJMemberSelection _returnExpSel_3 = SmallJavaScopeProviderTest.this.returnExpSel(_get_15);
SJMember _member_3 = _returnExpSel_3.getMember();
Assert.assertSame(_get_13, _member_3);
}
};
ObjectExtensions.<EList<SJClass>>operator_doubleArrow(_classes, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testAccessToOtherFileClass() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package my.first.pack;");
_builder.newLine();
_builder.newLine();
_builder.append("class C { ");
_builder.newLine();
_builder.append("\t");
_builder.append("C c;");
_builder.newLine();
_builder.append("\t");
_builder.append("C m() { return null; }");
_builder.newLine();
_builder.append("}");
final SJProgram first = this._parseHelper.parse(_builder);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package my.second.pack;");
_builder_1.newLine();
_builder_1.append("class D extends my.first.pack.C { }");
_builder_1.newLine();
Resource _eResource = first.eResource();
ResourceSet _resourceSet = _eResource.getResourceSet();
SJProgram _parse = this._parseHelper.parse(_builder_1, _resourceSet);
this._validationTestHelper.assertNoErrors(_parse);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testImports() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package my.first.pack;");
_builder.newLine();
_builder.newLine();
_builder.append("class C1 { }");
_builder.newLine();
_builder.append("class C2 { }");
final SJProgram first = this._parseHelper.parse(_builder);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package my.second.pack;");
_builder_1.newLine();
_builder_1.append("class D1 { }");
_builder_1.newLine();
_builder_1.append("class D2 { }");
_builder_1.newLine();
Resource _eResource = first.eResource();
ResourceSet _resourceSet = _eResource.getResourceSet();
this._parseHelper.parse(_builder_1, _resourceSet);
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("package my.third.pack;");
_builder_2.newLine();
_builder_2.newLine();
_builder_2.append("import my.first.pack.C1;");
_builder_2.newLine();
_builder_2.append("import my.second.pack.*;");
_builder_2.newLine();
_builder_2.newLine();
_builder_2.append("class E extends C1 { // C1 is imported");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("my.first.pack.C2 c; // C2 not imported");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("D1 d1; // D1 imported by wildcard");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("D2 d2; // D2 imported by wildcard");
_builder_2.newLine();
_builder_2.append("}");
_builder_2.newLine();
Resource _eResource_1 = first.eResource();
ResourceSet _resourceSet_1 = _eResource_1.getResourceSet();
SJProgram _parse = this._parseHelper.parse(_builder_2, _resourceSet_1);
this._validationTestHelper.assertNoErrors(_parse);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testSymbolReferences() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class C {");
_builder.newLine();
_builder.append("\t");
_builder.append("C m(C p) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("C v1 = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("C v2 = null;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("if (true) {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("C v3 = p;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("C v4 = v3;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("C v5 = v2;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("if (true) {");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("v1 = null;");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("v2 = v5;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("v2 = v1;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("C v6 = v2;");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
SJProgram _parse = this._parseHelper.parse(_builder);
this._validationTestHelper.assertNoErrors(_parse);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testGlobalScoping() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package my.first.pack;");
_builder.newLine();
_builder.append("class C { }");
final SJProgram first = this._parseHelper.parse(_builder);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package my.second.pack;");
_builder_1.newLine();
_builder_1.append("class D { }");
_builder_1.newLine();
Resource _eResource = first.eResource();
ResourceSet _resourceSet = _eResource.getResourceSet();
SJProgram _parse = this._parseHelper.parse(_builder_1, _resourceSet);
EList<SJClass> _classes = _parse.getClasses();
SJClass _get = _classes.get(0);
EReference _sJClass_Superclass = SmallJavaPackage.eINSTANCE.getSJClass_Superclass();
this.assertScope(_get, _sJClass_Superclass,
"D, my.second.pack.D, my.first.pack.C");
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testTwoFiles() {
try {
final ResourceSet resourceSet = this.resourceSetProvider.get();
StringConcatenation _builder = new StringConcatenation();
_builder.append("class B extends A {}");
_builder.newLine();
final SJProgram first = this._parseHelper.parse(_builder, resourceSet);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("class A { B b; }");
_builder_1.newLine();
final SJProgram second = this._parseHelper.parse(_builder_1, resourceSet);
this._validationTestHelper.assertNoErrors(first);
this._validationTestHelper.assertNoErrors(second);
EList<SJClass> _classes = second.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
EList<SJClass> _classes_1 = first.getClasses();
SJClass _head_1 = IterableExtensions.<SJClass>head(_classes_1);
SJClass _superclass = _head_1.getSuperclass();
Assert.assertSame(_head, _superclass);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testTwoFilesAlternative() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class B extends A {}");
_builder.newLine();
final SJProgram first = this._parseHelper.parse(_builder);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("class A { B b; }");
_builder_1.newLine();
Resource _eResource = first.eResource();
ResourceSet _resourceSet = _eResource.getResourceSet();
final SJProgram second = this._parseHelper.parse(_builder_1, _resourceSet);
this._validationTestHelper.assertNoErrors(first);
this._validationTestHelper.assertNoErrors(second);
EList<SJClass> _classes = second.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
EList<SJClass> _classes_1 = first.getClasses();
SJClass _head_1 = IterableExtensions.<SJClass>head(_classes_1);
SJClass _superclass = _head_1.getSuperclass();
Assert.assertSame(_head, _superclass);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testPackagesAndClassQualifiedNames() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package my.first.pack;");
_builder.newLine();
_builder.append("class B extends my.second.pack.A {}");
_builder.newLine();
final SJProgram first = this._parseHelper.parse(_builder);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package my.second.pack;");
_builder_1.newLine();
_builder_1.append("class A { ");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("my.first.pack.B b;");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
Resource _eResource = first.eResource();
ResourceSet _resourceSet = _eResource.getResourceSet();
final SJProgram second = this._parseHelper.parse(_builder_1, _resourceSet);
this._validationTestHelper.assertNoErrors(first);
this._validationTestHelper.assertNoErrors(second);
EList<SJClass> _classes = second.getClasses();
SJClass _head = IterableExtensions.<SJClass>head(_classes);
EList<SJClass> _classes_1 = first.getClasses();
SJClass _head_1 = IterableExtensions.<SJClass>head(_classes_1);
SJClass _superclass = _head_1.getSuperclass();
Assert.assertSame(_head, _superclass);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
private void assertScope(final EObject context, final EReference reference, final CharSequence expected) {
this._validationTestHelper.assertNoErrors(context);
String _string = expected.toString();
IScope _scope = this._iScopeProvider.getScope(context, reference);
Iterable<IEObjectDescription> _allElements = _scope.getAllElements();
final Function1<IEObjectDescription, QualifiedName> _function = new Function1<IEObjectDescription, QualifiedName>() {
@Override
public QualifiedName apply(final IEObjectDescription it) {
return it.getName();
}
};
Iterable<QualifiedName> _map = IterableExtensions.<IEObjectDescription, QualifiedName>map(_allElements, _function);
String _join = IterableExtensions.join(_map, ", ");
Assert.assertEquals(_string, _join);
}
private SJMemberSelection returnExpSel(final SJMethod m) {
SJReturn _returnStatement = SmallJavaModelUtil.returnStatement(m);
SJExpression _expression = _returnStatement.getExpression();
return ((SJMemberSelection) _expression);
}
}