Search in sources :

Example 1 with AbstractNameFunction

use of com.avaloq.tools.ddk.xtext.scoping.AbstractNameFunction in project dsl-devkit by dsldevkit.

the class ExportJavaValidator method checkInterfaceFieldUniqueness.

/**
 * Checks that the interface don't have overlapping features, as a feature export is inherited by the export of subtypes.
 *
 * @param context
 *          model to check
 */
@Check
public void checkInterfaceFieldUniqueness(final ExportModel context) {
    UniquenessJavaValidationHelper<InterfaceField> helper1 = new UniquenessJavaValidationHelper<InterfaceField>(new AbstractNameFunction() {

        @Override
        public QualifiedName apply(final EObject from) {
            String name = ((InterfaceField) from).getField().getName();
            return QualifiedName.create(name != null ? name : "");
        }
    }, getMessageAcceptor());
    UniquenessJavaValidationHelper<InterfaceNavigation> helper2 = new UniquenessJavaValidationHelper<InterfaceNavigation>(new AbstractNameFunction() {

        @Override
        public QualifiedName apply(final EObject from) {
            String name = ((InterfaceNavigation) from).getRef().getName();
            return QualifiedName.create(name != null ? name : "");
        }
    }, getMessageAcceptor());
    for (Interface fingertype : context.getInterfaces()) {
        helper1.errorOnDuplicates(Iterables.filter(fingertype.getItems(), InterfaceField.class), ExportPackage.Literals.INTERFACE_FIELD__FIELD);
        helper2.errorOnDuplicates(Iterables.filter(fingertype.getItems(), InterfaceNavigation.class), ExportPackage.Literals.INTERFACE_NAVIGATION__REF);
    }
}
Also used : AbstractNameFunction(com.avaloq.tools.ddk.xtext.scoping.AbstractNameFunction) InterfaceNavigation(com.avaloq.tools.ddk.xtext.export.export.InterfaceNavigation) EObject(org.eclipse.emf.ecore.EObject) QualifiedName(org.eclipse.xtext.naming.QualifiedName) InterfaceField(com.avaloq.tools.ddk.xtext.export.export.InterfaceField) UniquenessJavaValidationHelper(com.avaloq.tools.ddk.xtext.validation.UniquenessJavaValidationHelper) Interface(com.avaloq.tools.ddk.xtext.export.export.Interface) Check(org.eclipse.xtext.validation.Check)

Example 2 with AbstractNameFunction

use of com.avaloq.tools.ddk.xtext.scoping.AbstractNameFunction in project dsl-devkit by dsldevkit.

the class ExportJavaValidator method checkInterfaceAndExportUniqueness.

/**
 * Checks that the interfaces and exports in an export section all are declared for a unique type.
 *
 * @param context
 *          model to check
 */
@Check
public void checkInterfaceAndExportUniqueness(final ExportModel context) {
    UniquenessJavaValidationHelper<DeclarationForType> helper = new UniquenessJavaValidationHelper<DeclarationForType>(new AbstractNameFunction() {

        @Override
        public QualifiedName apply(final EObject from) {
            return QualifiedName.create(((DeclarationForType) from).getType().getEPackage().getName(), ((DeclarationForType) from).getType().getName());
        }
    }, getMessageAcceptor()) {

        @Override
        public String getMessage(final DeclarationForType declaration) {
            return "declaration duplicate found: " + declaration.getType().getEPackage().getName() + "::" + declaration.getType().getName();
        }
    };
    helper.errorOnDuplicates(Iterables.filter(context.getInterfaces(), DeclarationForType.class), ExportPackage.Literals.DECLARATION_FOR_TYPE__TYPE);
    helper.errorOnDuplicates(Iterables.filter(context.getExports(), DeclarationForType.class), ExportPackage.Literals.DECLARATION_FOR_TYPE__TYPE);
}
Also used : AbstractNameFunction(com.avaloq.tools.ddk.xtext.scoping.AbstractNameFunction) DeclarationForType(com.avaloq.tools.ddk.xtext.export.export.DeclarationForType) EObject(org.eclipse.emf.ecore.EObject) QualifiedName(org.eclipse.xtext.naming.QualifiedName) UniquenessJavaValidationHelper(com.avaloq.tools.ddk.xtext.validation.UniquenessJavaValidationHelper) Check(org.eclipse.xtext.validation.Check)

Example 3 with AbstractNameFunction

use of com.avaloq.tools.ddk.xtext.scoping.AbstractNameFunction in project dsl-devkit by dsldevkit.

the class ValidScopeProvider method createEClassScope.

/**
 * Creates the Eclass scope provider (all EClasses from the parent classifiers, referenced by their fully qualified (::) names.
 *
 * @param parent
 *          the parent
 * @param classifiers
 *          the classifiers
 * @return the i scope
 */
private IScope createEClassScope(final IScope parent, final Iterable<EClassifier> classifiers) {
    final Iterable<EClass> classes = Iterables.filter(classifiers, EClass.class);
    Iterable<IEObjectDescription> elements = EObjectDescriptions.all(classes, EcorePackage.Literals.ENAMED_ELEMENT__NAME);
    elements = Iterables.concat(elements, EObjectDescriptions.all(classes, new AbstractNameFunction() {

        public QualifiedName apply(final EObject from) {
            final EClass param = (EClass) from;
            return QualifiedName.create(param.getEPackage().getNsPrefix(), param.getName());
        }
    }));
    return new SimpleScope(parent, elements);
}
Also used : AbstractNameFunction(com.avaloq.tools.ddk.xtext.scoping.AbstractNameFunction) EClass(org.eclipse.emf.ecore.EClass) SimpleScope(org.eclipse.xtext.scoping.impl.SimpleScope) EObject(org.eclipse.emf.ecore.EObject) QualifiedName(org.eclipse.xtext.naming.QualifiedName) IEObjectDescription(org.eclipse.xtext.resource.IEObjectDescription)

Aggregations

AbstractNameFunction (com.avaloq.tools.ddk.xtext.scoping.AbstractNameFunction)3 EObject (org.eclipse.emf.ecore.EObject)3 QualifiedName (org.eclipse.xtext.naming.QualifiedName)3 UniquenessJavaValidationHelper (com.avaloq.tools.ddk.xtext.validation.UniquenessJavaValidationHelper)2 Check (org.eclipse.xtext.validation.Check)2 DeclarationForType (com.avaloq.tools.ddk.xtext.export.export.DeclarationForType)1 Interface (com.avaloq.tools.ddk.xtext.export.export.Interface)1 InterfaceField (com.avaloq.tools.ddk.xtext.export.export.InterfaceField)1 InterfaceNavigation (com.avaloq.tools.ddk.xtext.export.export.InterfaceNavigation)1 EClass (org.eclipse.emf.ecore.EClass)1 IEObjectDescription (org.eclipse.xtext.resource.IEObjectDescription)1 SimpleScope (org.eclipse.xtext.scoping.impl.SimpleScope)1