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