@Override protected ICommand getBeforeSetCommand(SetRequest request) { ICommand setCommand = super.getBeforeSetCommand(request); Set<View> viewsToDestroy = new HashSet<View>(); // Get modified object and retrieve inconsistent view EObject modifiedObject = request.getElementToEdit(); if ((modifiedObject != null) && (modifiedObject instanceof Property) && (request.getFeature() == UMLPackage.eINSTANCE.getProperty_Aggregation()) && (request.getValue() != AggregationKind.COMPOSITE_LITERAL)) { viewsToDestroy.addAll(getViewsToDestroy(modifiedObject)); } if ((modifiedObject != null) && (modifiedObject instanceof Property) && (request.getFeature() == UMLPackage.eINSTANCE.getTypedElement_Type()) && (request.getValue() instanceof Type) && !((ISpecializationType) SysMLElementTypes.BLOCK) .getMatcher() .matches((Type) request.getValue())) { viewsToDestroy.addAll(getViewsToDestroy(modifiedObject)); } if (!viewsToDestroy.isEmpty()) { DestroyDependentsRequest ddr = new DestroyDependentsRequest( request.getEditingDomain(), request.getElementToEdit(), false); ddr.setClientContext(request.getClientContext()); ddr.addParameters(request.getParameters()); ICommand destroyViewsCommand = ddr.getDestroyDependentsCommand(viewsToDestroy); setCommand = CompositeCommand.compose(setCommand, destroyViewsCommand); } return setCommand; }