Merge branch 'refs/heads/bug421957' into xpand2_master
diff --git a/plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/EClassType.java b/plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/EClassType.java
index 8442fd3..0050efe 100644
--- a/plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/EClassType.java
+++ b/plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/EClassType.java
@@ -73,7 +73,7 @@
 
 					@Override
 					public void set(final Object target, Object newValue) {
-						if (feature.isChangeable() && !feature.isUnsettable() && !feature.isDerived()) {
+						if (feature.isChangeable() && !feature.isDerived()) {
 							if (feature.getEType() instanceof EDataType && !(feature.getEType() instanceof EEnum)) {
 								final EDataType dt = (EDataType) feature.getEType();
 								newValue = getReturnType().convert(newValue, dt.getInstanceClass());
@@ -86,7 +86,7 @@
 					}
 				});
 				// setter
-				if (feature.isChangeable() && !feature.isMany()){ //  && !feature.isDerived()  { !feature.isUnsettable()
+				if (feature.isChangeable() && !feature.isMany()){ //  && !feature.isDerived()
 					// &&
 					result.add(new OperationImpl(this, "set" + StringHelper.firstUpper(feature.getName()), this,
 							new Type[] { t }) {
@@ -134,7 +134,7 @@
 						}
 					});
 				}
-				// isSet operation for unsettable features
+				// isSetXXX and unsetXXX operation if feature is unsettable
 				if (feature.isUnsettable()) {
 					result.add(new OperationImpl(this, "isSet" + StringHelper.firstUpper(feature.getName()), getTypeSystem().getBooleanType()) {
 						@Override
diff --git a/tests/org.eclipse.xtend.typesystem.emf.tests/src/org/eclipse/xtend/typesystem/emf/EClassTypeTest.java b/tests/org.eclipse.xtend.typesystem.emf.tests/src/org/eclipse/xtend/typesystem/emf/EClassTypeTest.java
index b5b8577..8ab8c58 100644
--- a/tests/org.eclipse.xtend.typesystem.emf.tests/src/org/eclipse/xtend/typesystem/emf/EClassTypeTest.java
+++ b/tests/org.eclipse.xtend.typesystem.emf.tests/src/org/eclipse/xtend/typesystem/emf/EClassTypeTest.java
@@ -99,6 +99,10 @@
 		// now the attribute is unset again
 		assertEquals(Boolean.FALSE, ec.evaluate("obj.isSetUnsettableAttribute()"));
 		
+		// try to set the value
+		Object result = ec.evaluate("obj.setUnsettableAttribute('Bar')");
+		assertEquals("Bar", ec.evaluate("obj.unsettableAttribute"));
+		
 		
 		// Counter test: Settable features do not have an 'isSet' operation