[433103] Fix null/invalid analysis of ShadowPart
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/modelspecs/CGValuedElementModelSpec.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/modelspecs/CGValuedElementModelSpec.java
index 1d2eb38..c0be0dc 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/modelspecs/CGValuedElementModelSpec.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/modelspecs/CGValuedElementModelSpec.java
@@ -2336,7 +2336,7 @@
new CGValuedElementModelSpec(CGLetExp.class, "in", Box.DELEG, null , null , null , null , Glo.FALSE, null , null , null , null , Val.DELEG, null , null , Ctl.LET , null , null , Eq.EQUIV);
new CGValuedElementModelSpec(CGMapExp.class, "CGMapPart", Box.BOX , Ths.PARTS, null , Nul.NEVER, Inv.PARTS, Glo.PARTS, null , null , null , Con.PARTS, null , null , null , Ctl.LORG , null , null , Eq.EQUIV);
new CGValuedElementModelSpec(CGMapPart.class, null, Box.BOX , null , null , Nul.NEVER, Inv.MPART, Glo.MPART, null , null , null , Con.MPART, null , null , null , null , Com.FALSE, null , Eq.EQUIV);
- new CGValuedElementModelSpec(CGShadowPart.class, null, Box.BOX , null , null , null , null , Glo.FALSE, null , null , null , Con.FALSE, null , null , null , null , Com.FALSE, Rew.PART , Eq.EQUIV);
+ new CGValuedElementModelSpec(CGShadowPart.class, "init", Box.BOX , null , null , null , null , Glo.FALSE, null , null , null , Con.FALSE, Val.DELEG, null , null , null , Com.FALSE, Rew.PART , Eq.DELEG);
new CGValuedElementModelSpec(CGCallable.class, null, null , null , null , null , null , null , null , null , null , null , null , null , Ctx.TRUE , Ctl.BODY , null , null , Eq.UNSUP);
new CGValuedElementModelSpec(CGConstraint.class, null, Box.UNBOX, null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null );
diff --git a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/CGCallExp.java b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/CGCallExp.java
index 54b6901..36ad7bb 100644
--- a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/CGCallExp.java
+++ b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/CGCallExp.java
@@ -41,7 +41,7 @@
* </p>
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
- * Whether this call expression may return an invalid result for non-invalid inputs.
+ * Whether this call expression may return an invalid result for non-invalid (or invalid if also validating) inputs.
* <!-- end-model-doc -->
* @return the value of the '<em>Invalidating</em>' attribute.
* @see #setInvalidating(boolean)
diff --git a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGShadowPartImpl.java b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGShadowPartImpl.java
index 20dc6ad..5d12094 100644
--- a/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGShadowPartImpl.java
+++ b/examples/org.eclipse.ocl.examples.codegen/emf-gen/org/eclipse/ocl/examples/codegen/cgmodel/impl/CGShadowPartImpl.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
- *
+ *
* Contributors:
* E.D.Willink(CEA LIST) - Initial API and implementation
*******************************************************************************/
@@ -17,13 +17,12 @@
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.ocl.examples.codegen.cgmodel.CGShadowExp;
-import org.eclipse.ocl.examples.codegen.cgmodel.CGShadowPart;
import org.eclipse.ocl.examples.codegen.cgmodel.CGExecutorShadowPart;
import org.eclipse.ocl.examples.codegen.cgmodel.CGModelPackage;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGShadowExp;
+import org.eclipse.ocl.examples.codegen.cgmodel.CGShadowPart;
import org.eclipse.ocl.examples.codegen.cgmodel.CGValuedElement;
import org.eclipse.ocl.examples.codegen.cgmodel.util.CGModelVisitor;
-import org.eclipse.ocl.examples.codegen.utilities.EquivalenceUtil;
/**
* <!-- begin-user-doc -->
@@ -300,6 +299,51 @@
* @generated
*/
@Override
+ public @NonNull CGValuedElement getNamedValue() {
+ return init != null ? init.getNamedValue() : this;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @generated
+ */
+ @Override
+ public @NonNull CGValuedElement getReferredValue() {
+ return init != null ? init : this;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @generated
+ */
+ @Override
+ public @NonNull CGValuedElement getSourceValue() {
+ return init != null ? init.getSourceValue() : this;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @generated
+ */
+ @Override
+ public @NonNull CGValuedElement getTypedValue() {
+ return init != null ? init.getTypedValue() : this;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @generated
+ */
+ @Override
+ public @Nullable String getValueName() {
+ return init != null ? init.getValueName() : null;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @generated
+ */
+ @Override
public boolean isBoxed() {
return true;
}
@@ -336,8 +380,17 @@
* @generated
*/
@Override
+ public @Nullable Boolean isEquivalentTo(@NonNull CGValuedElement thatValue) {
+ return init != null ? thatValue.isEquivalentTo(init) : super.isEquivalentTo(thatValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ * @generated
+ */
+ @Override
public @Nullable Boolean isEquivalentToInternal(@NonNull CGValuedElement thatValue) {
- return (getClass() == thatValue.getClass()) ? EquivalenceUtil.isEquivalent(this, (CGShadowPart)thatValue) : null;
+ return init != null ? thatValue.isEquivalentToInternal(init) : null;
}
/**
diff --git a/examples/org.eclipse.ocl.examples.codegen/model/cgmodel.ecore b/examples/org.eclipse.ocl.examples.codegen/model/cgmodel.ecore
index 638f911..2bff90a 100644
--- a/examples/org.eclipse.ocl.examples.codegen/model/cgmodel.ecore
+++ b/examples/org.eclipse.ocl.examples.codegen/model/cgmodel.ecore
@@ -74,7 +74,7 @@
<eStructuralFeatures xsi:type="ecore:EAttribute" name="invalidating" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
<eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
- <details key="documentation" value="Whether this call expression may return an invalid result for non-invalid inputs."/>
+ <details key="documentation" value="Whether this call expression may return an invalid result for non-invalid (or invalid if also validating) inputs."/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="validating" lowerBound="1"