use of org.eclipse.xtext.common.types.JvmGenericType in project xtext-xtend by eclipse.
the class InferredJvmModelTest method testDispatchFunction_03_impl.
protected void testDispatchFunction_03_impl(boolean validation) throws Exception {
XtendFile xtendFile = file("class Dispatcher {\n" + " def dispatch doStuff(org.eclipse.emf.ecore.EClass model) {\n" + " model.ETypeParameters.map(e|doStuff(e))\n" + " }\n" + " def dispatch doStuff(org.eclipse.emf.ecore.EPackage packageDecl) {\n" + " packageDecl.EClassifiers.map(e|doStuff(e))\n" + " }\n" + " def dispatch doStuff(org.eclipse.emf.ecore.EStructuralFeature feature) {\n" + " newArrayList(feature)\n" + " }\n" + "}", validation);
JvmGenericType inferredType = getInferredType(xtendFile);
// one main dispatch
Iterable<JvmOperation> operations = inferredType.getDeclaredOperations();
JvmOperation dispatch = findByNameAndFirstParameterType(operations, "doStuff", ENamedElement.class);
// TODO ultimately this should be List<? extends NamedElement>
assertEquals("java.util.List<? extends java.lang.Object>", dispatch.getReturnType().getIdentifier());
// three internal case methods
JvmOperation eClassParam = findByNameAndFirstParameterType(operations, "_doStuff", EClass.class);
assertEquals("java.util.List<? extends java.lang.Object>", eClassParam.getReturnType().getIdentifier());
JvmOperation ePackageParam = findByNameAndFirstParameterType(operations, "_doStuff", EPackage.class);
assertEquals("java.util.List<? extends java.lang.Object>", ePackageParam.getReturnType().getIdentifier());
JvmOperation eStructuralFeatureParam = findByNameAndFirstParameterType(operations, "_doStuff", EStructuralFeature.class);
assertEquals("java.util.List<? extends java.lang.Object>", eStructuralFeatureParam.getReturnType().getIdentifier());
}
use of org.eclipse.xtext.common.types.JvmGenericType in project xtext-xtend by eclipse.
the class InferredJvmModelTest method testInferredFunctionWithParameter.
@Test
public void testInferredFunctionWithParameter() throws Exception {
XtendFile xtendFile = file("class Foo { def bar(Boolean baz) { true } }");
JvmGenericType inferredType = getInferredType(xtendFile);
JvmOperation jvmOperation = (JvmOperation) inferredType.getMembers().get(1);
XtendFunction xtendFunction = (XtendFunction) ((XtendClass) xtendFile.getXtendTypes().get(0)).getMembers().get(0);
assertEquals(1, jvmOperation.getParameters().size());
JvmFormalParameter jvmParameter = jvmOperation.getParameters().get(0);
XtendParameter xtendParameter = xtendFunction.getParameters().get(0);
assertEquals(xtendParameter.getName(), jvmParameter.getSimpleName());
assertEquals(xtendParameter.getParameterType().getType(), jvmParameter.getParameterType().getType());
}
use of org.eclipse.xtext.common.types.JvmGenericType in project xtext-xtend by eclipse.
the class InferredJvmModelTest method testBug_340611_03.
@Test
public void testBug_340611_03() throws Exception {
XtendFile xtendFile = file("class Bug340611 {\n" + " def dispatch foo(Appendable appendable) {\n" + " appendable\n" + " }\n" + " def dispatch foo(CharSequence charSeq) {\n" + " charSeq\n" + " }\n" + "}", false);
JvmGenericType inferredType = getInferredType(xtendFile);
assertEquals(3, IterableExtensions.size(inferredType.getDeclaredOperations()));
// one main dispatch
Iterable<JvmOperation> operations = inferredType.getDeclaredOperations();
JvmOperation dispatch = findByNameAndFirstParameterType(operations, "foo", Object.class);
assertEquals("java.lang.Object", dispatch.getReturnType().getIdentifier());
// two internal case methods
JvmOperation stringParam = findByNameAndFirstParameterType(operations, "_foo", Appendable.class);
assertEquals("java.lang.Object", stringParam.getReturnType().getIdentifier());
JvmOperation objectParam = findByNameAndFirstParameterType(operations, "_foo", CharSequence.class);
assertEquals("java.lang.Object", objectParam.getReturnType().getIdentifier());
}
use of org.eclipse.xtext.common.types.JvmGenericType in project xtext-xtend by eclipse.
the class InferredJvmModelTest method testExtensionToAnnotation_02.
@Test
public void testExtensionToAnnotation_02() throws Exception {
XtendFile xtendFile = file("class C { def void m(extension String s) {} }");
JvmGenericType inferredType = getInferredType(xtendFile);
JvmOperation jvmOperation = (JvmOperation) inferredType.getMembers().get(1);
List<JvmFormalParameter> parameters = jvmOperation.getParameters();
JvmFormalParameter singleParameter = parameters.get(0);
List<JvmAnnotationReference> annotations = singleParameter.getAnnotations();
assertEquals(1, annotations.size());
assertEquals(Extension.class.getCanonicalName(), annotations.get(0).getAnnotation().getQualifiedName());
}
use of org.eclipse.xtext.common.types.JvmGenericType in project xtext-xtend by eclipse.
the class InferredJvmModelTest method testInferredFunction_04.
@Test
public void testInferredFunction_04() throws Exception {
XtendFile xtendFile = file("class Foo { def Iterable<CharSequence> create result: newArrayList(s) newList(String s) {} }");
JvmGenericType inferredType = getInferredType(xtendFile);
XtendClass xtendClass = (XtendClass) xtendFile.getXtendTypes().get(0);
EList<JvmMember> jvmMembers = inferredType.getMembers();
assertEquals(4, jvmMembers.size());
JvmMember jvmMember = jvmMembers.get(1);
assertTrue(jvmMember instanceof JvmOperation);
XtendFunction xtendFunction = (XtendFunction) xtendClass.getMembers().get(0);
assertEquals(xtendFunction.getName(), jvmMember.getSimpleName());
assertEquals(JvmVisibility.PUBLIC, jvmMember.getVisibility());
assertEquals("java.lang.Iterable<java.lang.CharSequence>", ((JvmOperation) jvmMember).getReturnType().getIdentifier());
JvmField cacheVar = (JvmField) jvmMembers.get(2);
assertEquals("_createCache_" + xtendFunction.getName(), cacheVar.getSimpleName());
assertEquals(JvmVisibility.PRIVATE, cacheVar.getVisibility());
assertEquals("java.util.HashMap<java.util.ArrayList<? extends java.lang.Object>, java.lang.Iterable<java.lang.CharSequence>>", cacheVar.getType().getIdentifier());
JvmOperation privateInitializer = (JvmOperation) jvmMembers.get(3);
assertEquals("_init_" + xtendFunction.getName(), privateInitializer.getSimpleName());
assertEquals(JvmVisibility.PRIVATE, privateInitializer.getVisibility());
// This used to be a bogus assertion since Iterable<CharSequence> is not assignable from ArrayList<String>
// assertEquals("java.util.ArrayList<java.lang.String>", privateInitializer.getParameters().get(0).getParameterType().getIdentifier());
assertEquals("java.util.ArrayList<java.lang.CharSequence>", privateInitializer.getParameters().get(0).getParameterType().getIdentifier());
assertEquals("java.lang.String", privateInitializer.getParameters().get(1).getParameterType().getIdentifier());
}
Aggregations