protected Map<String, QualifiedName> getImplicitAliases() { if (implicitAliases == null) { implicitAliases = newHashMap(); for (final EDataType eDataType : XcoreImportedNamespaceAwareScopeProvider.IMPLICIT_ALIASES) { String instanceClassName = eDataType.getInstanceClassName(); final QualifiedName actualQualifiedName = QualifiedName.create("org", "eclipse", "emf", "ecore", eDataType.getName()); final QualifiedName qualifiedName = nameConverter.toQualifiedName(instanceClassName); implicitAliases.put(instanceClassName, actualQualifiedName); implicitAliases.put(qualifiedName.getLastSegment(), actualQualifiedName); } } return implicitAliases; }
@Test public void testGenerateWithExpressionContext() throws Exception { EDataType dataType = EcorePackage.eINSTANCE.getEBigDecimal(); EPackage pkg = helper.createPackage("tests"); EClass clazz = helper.createClass(pkg, "NumericTests"); helper.addAttribute(clazz, dataType, "a"); EObject instance = helper.createInstance(clazz); XtextResourceSet resourceSet = expressionFactory.getInjector().getInstance(XtextResourceSet.class); Resource resource = resourceSet.createResource(URI.createURI("__synthetic.testData.expr")); resource.getContents().add(instance); // TODO could use TypeReferences getTypeForName() instead JvmTypesBuilder newTypeRef() .. Injector injector = expressionFactory.getInjector(); JvmTypesBuilder jvmTypesBuilder = injector.getInstance(JvmTypesBuilder.class); JvmTypeReferenceBuilder.Factory factory = injector.getInstance(JvmTypeReferenceBuilder.Factory.class); JvmTypeReferenceBuilder jvmTypeReferenceBuilder = factory.create(instance.eResource().getResourceSet()); JvmGenericType type = jvmTypesBuilder.toClass(instance, "tests.NumericTests"); resource.getContents().add(type); JvmField field = jvmTypesBuilder.toField( instance, "a", jvmTypeReferenceBuilder.typeRef( dataType.getInstanceClassName() /*"java.math.BigDecimal"*/)); field.setVisibility(JvmVisibility.PUBLIC); type.getMembers().add(field); ExpressionContext context = new ExpressionContext(resource); context.setType(jvmTypeReferenceBuilder.typeRef(Boolean.TYPE)); context.addVariable("t", jvmTypeReferenceBuilder.typeRef(type)); checkGeneration( "t.a == 5", Boolean.TYPE, context, "com.google.common.base.Objects.equal(t.a, new java.math.BigDecimal(\"5\"))"); }