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