package org.eclipse.xtext.example.domainmodel.xpect.tests.modify;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.common.types.JvmParameterizedTypeReference;
import org.eclipse.xtext.common.types.JvmTypeReference;
import org.eclipse.xtext.common.types.util.TypeReferences;
import org.eclipse.xtext.example.domainmodel.domainmodel.DomainModel;
import org.eclipse.xtext.example.domainmodel.domainmodel.Entity;
import org.eclipse.xtext.example.domainmodel.domainmodel.Property;
import org.eclipse.xtext.xbase.jvmmodel.IJvmModelAssociations;
import com.google.inject.Inject;
@SuppressWarnings("restriction")
public class DeleteUtil {
@Inject
private TypeReferences typeReferencers;
@Inject
private IJvmModelAssociations associations;
public void deleteEntity(Entity entity) {
DomainModel dmodel = EcoreUtil2.getContainerOfType(entity, DomainModel.class);
for (Entity ent : EcoreUtil2.getAllContentsOfType(dmodel, Entity.class)) {
JvmParameterizedTypeReference superType = ent.getSuperType();
if (superType != null && associations.getPrimarySourceElement(superType.getType()) == entity)
EcoreUtil.remove(superType);
}
for (Property prop : EcoreUtil2.getAllContentsOfType(dmodel, Property.class)) {
JvmTypeReference type = prop.getType();
if (type != null && associations.getPrimarySourceElement(type.getType()) == entity)
prop.setType(typeReferencers.getTypeForName(Void.TYPE, dmodel));
}
EcoreUtil.remove(entity);
}
}