package org.eclipse.xtend.backend.types.xsd.internal; import java.util.Arrays; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.xtend.backend.common.BackendType; import org.eclipse.xtend.backend.common.BackendTypesystem; import org.eclipse.xtend.backend.common.ExecutionContext; import org.eclipse.xtend.backend.common.QualifiedName; import org.eclipse.xtend.backend.functions.AbstractFunction; import org.eclipse.xtend.backend.types.AbstractProperty; import org.eclipse.xtend.backend.types.AbstractType; import org.eclipse.xtend.backend.types.builtin.StringType; import org.eclipse.xtend.backend.types.xsd.XsdTypesystem; public class EFeatureType extends AbstractType { public EFeatureType(final String name, XsdTypesystem ts) { super(name, XsdTypesystem.XSD_TYPE_PREFIX + name); } public void init () { initProperties (); initOperations (); } public void initProperties () { register (new AbstractProperty(this, String.class, "name", true, false) { public BackendType getType(BackendTypesystem ts) { return StringType.INSTANCE; } @Override protected Object getRaw(ExecutionContext ctx, Object o) { if (o == null) return null; EStructuralFeature f = (EStructuralFeature) o; return f.getName(); } }, this); } public void initOperations () { register(new QualifiedName ("toString"), new AbstractFunction(null, Arrays.asList(this), StringType.INSTANCE, false) { public Object invoke(ExecutionContext ctx, Object[] params) { EStructuralFeature f = (EStructuralFeature) params[0]; if (f != null) f.getName(); return null; } }); } @Override public boolean equals (Object other) { if (this == other) return true; if (other == null) return false; if (getClass() != other.getClass()) return false; return true; } }