View | Details | Raw Unified | Return to bug 129178
Collapse All | Expand All

(-)src/org/eclipse/gmf/runtime/emf/core/internal/util/MSLUtil.java (-39 / +14 lines)
Lines 44-49 Link Here
44
import org.eclipse.emf.ecore.resource.Resource;
44
import org.eclipse.emf.ecore.resource.Resource;
45
import org.eclipse.emf.ecore.resource.ResourceSet;
45
import org.eclipse.emf.ecore.resource.ResourceSet;
46
import org.eclipse.emf.ecore.util.EcoreUtil;
46
import org.eclipse.emf.ecore.util.EcoreUtil;
47
import org.eclipse.emf.ecore.util.FeatureMapUtil;
47
import org.eclipse.emf.ecore.xmi.XMLResource;
48
import org.eclipse.emf.ecore.xmi.XMLResource;
48
import org.eclipse.emf.transaction.TransactionalEditingDomain;
49
import org.eclipse.emf.transaction.TransactionalEditingDomain;
49
import org.eclipse.emf.transaction.impl.InternalTransaction;
50
import org.eclipse.emf.transaction.impl.InternalTransaction;
Lines 239-250 Link Here
239
				&& (resource != null))
240
				&& (resource != null))
240
				uriFragment = resource.getURIFragment(eObject);
241
				uriFragment = resource.getURIFragment(eObject);
241
242
242
			EReference reference = eObject.eContainmentFeature();
243
			EcoreUtil.remove(eObject);
243
244
			if (reference.isMany())
245
				((Collection) container.eGet(reference)).remove(eObject);
246
			else
247
				container.eSet(reference, null);
248
244
249
			if ((options & MDestroyOption.NO_EVENTS) == 0)
245
			if ((options & MDestroyOption.NO_EVENTS) == 0)
250
				sendDestroyEvent(domain, eObject);
246
				sendDestroyEvent(domain, eObject);
Lines 1016-1024 Link Here
1016
	private static class TeardownAction {
1012
	private static class TeardownAction {
1017
1013
1018
		private EObject container = null;
1014
		private EObject container = null;
1019
1020
		private EReference reference = null;
1015
		private EReference reference = null;
1021
1022
		private EObject object = null;
1016
		private EObject object = null;
1023
1017
1024
		/**
1018
		/**
Lines 1036-1054 Link Here
1036
		 * Execute the action.
1030
		 * Execute the action.
1037
		 */
1031
		 */
1038
		public void execute() {
1032
		public void execute() {
1039
1040
			if (object == null) {
1033
			if (object == null) {
1041
1042
				if (container.eIsSet(reference)) {
1034
				if (container.eIsSet(reference)) {
1043
1035
					if (FeatureMapUtil.isMany(container, reference)) {
1044
					if (reference.isMany()) {
1045
1046
						List objects = (List) container.eGet(reference);
1036
						List objects = (List) container.eGet(reference);
1047
1037
1048
						if (reference.isContainment()) {
1038
						if (reference.isContainment()) {
1049
1050
							if (!objects.isEmpty()) {
1039
							if (!objects.isEmpty()) {
1051
1052
								Collection destroyed = new ArrayList(objects);
1040
								Collection destroyed = new ArrayList(objects);
1053
1041
1054
								for (Iterator i = destroyed.iterator(); i
1042
								for (Iterator i = destroyed.iterator(); i
Lines 1057-1065 Link Here
1057
							}
1045
							}
1058
1046
1059
						} else {
1047
						} else {
1060
1061
							if (!objects.isEmpty()) {
1048
							if (!objects.isEmpty()) {
1062
1063
								Collection detached = new ArrayList(objects);
1049
								Collection detached = new ArrayList(objects);
1064
1050
1065
								for (Iterator i = detached.iterator(); i
1051
								for (Iterator i = detached.iterator(); i
Lines 1067-1102 Link Here
1067
1053
1068
									EObject eObject = (EObject) i.next();
1054
									EObject eObject = (EObject) i.next();
1069
1055
1070
									((Collection) container.eGet(reference))
1056
									EcoreUtil.remove(container,reference,eObject);
1071
										.remove(eObject);
1072
								}
1057
								}
1073
							}
1058
							}
1074
						}
1059
						}
1075
1060
1076
					} else {
1061
					} else {
1077
1078
						if (reference.isContainment()) {
1062
						if (reference.isContainment()) {
1079
1080
							object = (EObject) container.eGet(reference);
1063
							object = (EObject) container.eGet(reference);
1081
1064
1082
							if (object != null)
1065
							if (object != null)
1083
								EObjectUtil.destroy(object);
1066
								EObjectUtil.destroy(object);
1084
						} else
1067
						} else {
1085
							container.eSet(reference, null);
1068
							object = (EObject)container.eGet(reference);
1069
							EcoreUtil.remove(container, reference, object);
1070
						}
1086
					}
1071
					}
1087
				}
1072
				}
1088
1073
1089
			} else {
1074
			} else {
1090
1075
				if (reference.isContainment()) {
1091
				if (reference.isContainment())
1092
					EObjectUtil.destroy(object);
1076
					EObjectUtil.destroy(object);
1093
1077
				} else {
1094
				else {
1078
					EcoreUtil.remove(container, reference, object);
1095
1096
					if (reference.isMany())
1097
						((Collection) container.eGet(reference)).remove(object);
1098
					else
1099
						container.eSet(reference, null);
1100
				}
1079
				}
1101
			}
1080
			}
1102
		}
1081
		}
Lines 1109-1116 Link Here
1109
			EObject newObject, EReference reference, EClass type,
1088
			EObject newObject, EReference reference, EClass type,
1110
			EObject referencer) {
1089
			EObject referencer) {
1111
1090
1112
		if (reference.isMany()) {
1091
		if (FeatureMapUtil.isMany(referencer, reference)) {
1113
1114
			List list = (List) referencer.eGet(reference);
1092
			List list = (List) referencer.eGet(reference);
1115
1093
1116
			int position = list.indexOf(eObject);
1094
			int position = list.indexOf(eObject);
Lines 1125-1131 Link Here
1125
			referencer.eSet(reference, newObject);
1103
			referencer.eSet(reference, newObject);
1126
1104
1127
		else
1105
		else
1128
			referencer.eSet(reference, null);
1106
			referencer.eUnset(reference);
1129
	}
1107
	}
1130
1108
1131
	/**
1109
	/**
Lines 1140-1146 Link Here
1140
		boolean ignore = false;
1118
		boolean ignore = false;
1141
1119
1142
		for (Iterator k = ignoredObjects.iterator(); k.hasNext();) {
1120
		for (Iterator k = ignoredObjects.iterator(); k.hasNext();) {
1143
1144
			EObject ignored = (EObject) k.next();
1121
			EObject ignored = (EObject) k.next();
1145
1122
1146
			if (EObjectUtil.contains(ignored, referencer)) {
1123
			if (EObjectUtil.contains(ignored, referencer)) {
Lines 1151-1158 Link Here
1151
1128
1152
		if (!ignore) {
1129
		if (!ignore) {
1153
1130
1154
			if (reference.isMany()) {
1131
			if (FeatureMapUtil.isMany(referencer, reference)) {
1155
1156
				EList list = (EList) referencer.eGet(reference);
1132
				EList list = (EList) referencer.eGet(reference);
1157
				int existingIndex = list.indexOf(replacement);
1133
				int existingIndex = list.indexOf(replacement);
1158
1134
Lines 1165-1171 Link Here
1165
					int index = list.indexOf(referenced);
1141
					int index = list.indexOf(referenced);
1166
					list.add(index, replacement);
1142
					list.add(index, replacement);
1167
				}
1143
				}
1168
1169
			} else
1144
			} else
1170
				referencer.eSet(reference, replacement);
1145
				referencer.eSet(reference, replacement);
1171
		}
1146
		}

Return to bug 129178