bool IElementEquivalence.MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
        {
            CustomPropertyDefinition definition;
            CustomPropertyDefinition otherDefinition;
            ORMModelElement          extendedElement;
            ORMModelElement          otherExtendedElement;

            if (null != (definition = CustomPropertyDefinition) &&
                null != (otherDefinition = CopyMergeUtility.GetEquivalentElement(definition, foreignStore, elementTracker)) &&
                null != (extendedElement = ORMModelElementHasExtensionElement.GetExtendedElement(this)) &&
                null != (otherExtendedElement = CopyMergeUtility.GetEquivalentElement(extendedElement, foreignStore, elementTracker)))
            {
                // UNDONE: COPYMERGE This will not work for custom properties on a model,
                // but these are not currently selectable and all other contained elements should work correctly.
                foreach (ModelElement element in otherExtendedElement.ExtensionCollection)
                {
                    CustomProperty otherProperty = element as CustomProperty;
                    if (otherProperty != null &&
                        otherProperty.CustomPropertyDefinition == otherDefinition)
                    {
                        elementTracker.AddEquivalentElement(this, otherProperty);
                        return(true);
                    }
                }
            }
            return(false);
        }
Example #2
0
        /// <summary>
        /// Helper method for matching value ranges. Called after an
        /// <see cref="IElementEquivalence"/> implementation has determined
        /// that this <see cref="CardinalityConstraint"/> and <paramref name="otherCardinalityConstraint"/>
        /// correspond to the same instance.
        /// </summary>
        /// <param name="otherCardinalityConstraint">The equivalent value constraint.</param>
        /// <param name="elementTracker">The <see cref="IEquivalentElementTracker"/> used
        /// to equate ranges.</param>
        protected void MatchRanges(CardinalityConstraint otherCardinalityConstraint, IEquivalentElementTracker elementTracker)
        {
            LinkedElementCollection <CardinalityRange> ranges = RangeCollection;
            int rangeCount = ranges.Count;

            if (rangeCount != 0)
            {
                LinkedElementCollection <CardinalityRange> otherRanges = otherCardinalityConstraint.RangeCollection;
                int otherRangeCount = otherRanges.Count;
                if (otherRangeCount != 0)
                {
                    BitTracker otherMatches = new BitTracker(otherRangeCount);
                    for (int i = 0; i < rangeCount; ++i)
                    {
                        CardinalityRange range = ranges[i];
                        int lower = range.LowerBound;
                        int upper = range.UpperBound;
                        for (int j = 0; j < otherRangeCount; ++j)
                        {
                            if (!otherMatches[j])
                            {
                                CardinalityRange otherRange = otherRanges[j];
                                if (otherRange.LowerBound == lower && otherRange.UpperBound == upper)
                                {
                                    elementTracker.AddEquivalentElement(range, otherRange);
                                    otherMatches[j] = true;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
		bool IElementEquivalence.MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			CustomPropertyDefinition definition;
			CustomPropertyDefinition otherDefinition;
			ORMModelElement extendedElement;
			ORMModelElement otherExtendedElement;
			if (null != (definition = CustomPropertyDefinition) &&
				null != (otherDefinition = CopyMergeUtility.GetEquivalentElement(definition, foreignStore, elementTracker)) &&
				null != (extendedElement = ORMModelElementHasExtensionElement.GetExtendedElement(this)) &&
				null != (otherExtendedElement = CopyMergeUtility.GetEquivalentElement(extendedElement, foreignStore, elementTracker)))
			{
				// UNDONE: COPYMERGE This will not work for custom properties on a model,
				// but these are not currently selectable and all other contained elements should work correctly.
				foreach (ModelElement element in otherExtendedElement.ExtensionCollection)
				{
					CustomProperty otherProperty = element as CustomProperty;
					if (otherProperty != null &&
						otherProperty.CustomPropertyDefinition == otherDefinition)
					{
						elementTracker.AddEquivalentElement(this, otherProperty);
						return true;
					}
				}
			}
			return false;
		}
 /// <summary>
 /// Map groups by name
 /// </summary>
 bool IElementEquivalence.MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
 {
     if (null != foreignStore.FindDomainModel(CustomPropertiesDomainModel.DomainModelId))
     {
         string testName = Name;
         foreach (CustomPropertyGroup otherGroup in foreignStore.ElementDirectory.FindElements <CustomPropertyGroup>(false))
         {
             if (otherGroup.Name == testName)
             {
                 elementTracker.AddEquivalentElement(this, otherGroup);
                 return(true);
             }
         }
     }
     return(false);
 }
		/// <summary>
		/// Map groups by name
		/// </summary>
		bool IElementEquivalence.MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			if (null != foreignStore.FindDomainModel(CustomPropertiesDomainModel.DomainModelId))
			{
				string testName = Name;
				foreach (CustomPropertyGroup otherGroup in foreignStore.ElementDirectory.FindElements<CustomPropertyGroup>(false))
				{
					if (otherGroup.Name == testName)
					{
						elementTracker.AddEquivalentElement(this, otherGroup);
						return true;
					}
				}
			}
			return false;
		}
		/// <summary>
		/// Map groups by name
		/// </summary>
		bool IElementEquivalence.MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			CustomPropertyGroup otherGroup;
			if (null != (otherGroup = CopyMergeUtility.GetEquivalentElement(CustomPropertyGroup, foreignStore, elementTracker)))
			{
				string testName = Name;
				foreach (CustomPropertyDefinition otherDefinition in otherGroup.CustomPropertyDefinitionCollection)
				{
					if (otherDefinition.Name == testName)
					{
						elementTracker.AddEquivalentElement(this, otherDefinition);
						return true;
					}
				}
			}
			return false;
		}
        /// <summary>
        /// Map groups by name
        /// </summary>
        bool IElementEquivalence.MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
        {
            CustomPropertyGroup otherGroup;

            if (null != (otherGroup = CopyMergeUtility.GetEquivalentElement(CustomPropertyGroup, foreignStore, elementTracker)))
            {
                string testName = Name;
                foreach (CustomPropertyDefinition otherDefinition in otherGroup.CustomPropertyDefinitionCollection)
                {
                    if (otherDefinition.Name == testName)
                    {
                        elementTracker.AddEquivalentElement(this, otherDefinition);
                        return(true);
                    }
                }
            }
            return(false);
        }
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			ObjectType parentObjectType;
			if (null != (parentObjectType = this.Subtype))
			{
				// Embedded through the SubtypeHasDerivationRule relationship
				ObjectType otherParentObjectType;
				SubtypeDerivationRule otherSubtypeDerivationRule;
				if (null != (otherParentObjectType = CopyMergeUtility.GetEquivalentElement(parentObjectType, foreignStore, elementTracker)) && null != (otherSubtypeDerivationRule = otherParentObjectType.DerivationRule))
				{
					elementTracker.AddEquivalentElement(this, otherSubtypeDerivationRule);
					return true;
				}
			}
			return false;
		}
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			CalculatedPathValueInput parentCalculatedPathValueInput;
			ConstraintRoleProjection parentConstraintRoleProjection;
			FactTypeRoleProjection parentFactTypeRoleProjection;
			if (null != (parentCalculatedPathValueInput = this.BoundInput))
			{
				// Embedded through the CalculatedPathValueInputBindsToPathConstant relationship
				CalculatedPathValueInput otherParentCalculatedPathValueInput;
				PathConstant otherPathConstant;
				if (null != (otherParentCalculatedPathValueInput = CopyMergeUtility.GetEquivalentElement(parentCalculatedPathValueInput, foreignStore, elementTracker)) && null != (otherPathConstant = otherParentCalculatedPathValueInput.SourceConstant))
				{
					elementTracker.AddEquivalentElement(this, otherPathConstant);
					return true;
				}
			}
			else if (null != (parentConstraintRoleProjection = this.ConstraintRoleProjection))
			{
				// Embedded through the ConstraintRoleProjectedFromPathConstant relationship
				ConstraintRoleProjection otherParentConstraintRoleProjection;
				PathConstant otherPathConstant;
				if (null != (otherParentConstraintRoleProjection = CopyMergeUtility.GetEquivalentElement(parentConstraintRoleProjection, foreignStore, elementTracker)) && null != (otherPathConstant = otherParentConstraintRoleProjection.ProjectedFromConstant))
				{
					elementTracker.AddEquivalentElement(this, otherPathConstant);
					return true;
				}
			}
			else if (null != (parentFactTypeRoleProjection = this.FactTypeRoleProjection))
			{
				// Embedded through the FactTypeRoleProjectedFromPathConstant relationship
				FactTypeRoleProjection otherParentFactTypeRoleProjection;
				PathConstant otherPathConstant;
				if (null != (otherParentFactTypeRoleProjection = CopyMergeUtility.GetEquivalentElement(parentFactTypeRoleProjection, foreignStore, elementTracker)) && null != (otherPathConstant = otherParentFactTypeRoleProjection.ProjectedFromConstant))
				{
					elementTracker.AddEquivalentElement(this, otherPathConstant);
					return true;
				}
			}
			return false;
		}
Example #10
0
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			RolePathObjectTypeRoot parentRolePathObjectTypeRoot;
			if (null != (parentRolePathObjectTypeRoot = this.PathRoot))
			{
				// Embedded through the RolePathRootHasValueConstraint relationship
				RolePathObjectTypeRoot otherParentRolePathObjectTypeRoot;
				PathConditionRootValueConstraint otherPathConditionRootValueConstraint;
				if (null != (otherParentRolePathObjectTypeRoot = CopyMergeUtility.GetEquivalentElement(parentRolePathObjectTypeRoot, foreignStore, elementTracker)) && null != (otherPathConditionRootValueConstraint = otherParentRolePathObjectTypeRoot.ValueConstraint))
				{
					elementTracker.AddEquivalentElement(this, otherPathConditionRootValueConstraint);
					this.MatchValueRanges(otherPathConditionRootValueConstraint, elementTracker);
					return true;
				}
			}
			return false;
		}
Example #11
0
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			PathedRole parentPathedRole;
			if (null != (parentPathedRole = this.PathedRole))
			{
				// Embedded through the PathedRoleHasValueConstraint relationship
				PathedRole otherParentPathedRole;
				PathConditionRoleValueConstraint otherPathConditionRoleValueConstraint;
				if (null != (otherParentPathedRole = CopyMergeUtility.GetEquivalentElement(parentPathedRole, foreignStore, elementTracker)) && null != (otherPathConditionRoleValueConstraint = otherParentPathedRole.ValueConstraint))
				{
					elementTracker.AddEquivalentElement(this, otherPathConditionRoleValueConstraint);
					this.MatchValueRanges(otherPathConditionRoleValueConstraint, elementTracker);
					return true;
				}
			}
			return false;
		}
Example #12
0
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			ElementGrouping parentElementGrouping;
			FactType parentFactType;
			LeadRolePath parentLeadRolePath;
			ObjectType parentObjectType;
			ORMModel parentORMModel;
			SetComparisonConstraint parentSetComparisonConstraint;
			SetConstraint parentSetConstraint;
			ValueConstraint parentValueConstraint;
			if (null != (parentElementGrouping = this.Grouping))
			{
				// Embedded through the ElementGroupingHasNote relationship
				ElementGrouping otherParentElementGrouping;
				Note otherNote;
				if (null != (otherParentElementGrouping = CopyMergeUtility.GetEquivalentElement(parentElementGrouping, foreignStore, elementTracker)) && null != (otherNote = otherParentElementGrouping.Note))
				{
					elementTracker.AddEquivalentElement(this, otherNote);
					return true;
				}
			}
			else if (null != (parentFactType = this.FactType))
			{
				// Embedded through the FactTypeHasNote relationship
				FactType otherParentFactType;
				Note otherNote;
				if (null != (otherParentFactType = CopyMergeUtility.GetEquivalentElement(parentFactType, foreignStore, elementTracker)) && null != (otherNote = otherParentFactType.Note))
				{
					elementTracker.AddEquivalentElement(this, otherNote);
					return true;
				}
			}
			else if (null != (parentLeadRolePath = this.RolePath))
			{
				// Embedded through the LeadRolePathHasNote relationship
				LeadRolePath otherParentLeadRolePath;
				Note otherNote;
				if (null != (otherParentLeadRolePath = CopyMergeUtility.GetEquivalentElement(parentLeadRolePath, foreignStore, elementTracker)) && null != (otherNote = otherParentLeadRolePath.Note))
				{
					elementTracker.AddEquivalentElement(this, otherNote);
					return true;
				}
			}
			else if (null != (parentObjectType = this.ObjectType))
			{
				// Embedded through the ObjectTypeHasNote relationship
				ObjectType otherParentObjectType;
				Note otherNote;
				if (null != (otherParentObjectType = CopyMergeUtility.GetEquivalentElement(parentObjectType, foreignStore, elementTracker)) && null != (otherNote = otherParentObjectType.Note))
				{
					elementTracker.AddEquivalentElement(this, otherNote);
					return true;
				}
			}
			else if (null != (parentORMModel = this.PrimaryForModel))
			{
				// Embedded through the ModelHasPrimaryNote relationship
				ORMModel otherParentORMModel;
				Note otherNote;
				if (null != (otherParentORMModel = CopyMergeUtility.GetEquivalentElement(parentORMModel, foreignStore, elementTracker)) && null != (otherNote = otherParentORMModel.Note))
				{
					elementTracker.AddEquivalentElement(this, otherNote);
					return true;
				}
			}
			else if (null != (parentSetComparisonConstraint = this.SetComparisonConstraint))
			{
				// Embedded through the SetComparisonConstraintHasNote relationship
				SetComparisonConstraint otherParentSetComparisonConstraint;
				Note otherNote;
				if (null != (otherParentSetComparisonConstraint = CopyMergeUtility.GetEquivalentElement(parentSetComparisonConstraint, foreignStore, elementTracker)) && null != (otherNote = otherParentSetComparisonConstraint.Note))
				{
					elementTracker.AddEquivalentElement(this, otherNote);
					return true;
				}
			}
			else if (null != (parentSetConstraint = this.SetConstraint))
			{
				// Embedded through the SetConstraintHasNote relationship
				SetConstraint otherParentSetConstraint;
				Note otherNote;
				if (null != (otherParentSetConstraint = CopyMergeUtility.GetEquivalentElement(parentSetConstraint, foreignStore, elementTracker)) && null != (otherNote = otherParentSetConstraint.Note))
				{
					elementTracker.AddEquivalentElement(this, otherNote);
					return true;
				}
			}
			else if (null != (parentValueConstraint = this.ValueConstraint))
			{
				// Embedded through the ValueConstraintHasNote relationship
				ValueConstraint otherParentValueConstraint;
				Note otherNote;
				if (null != (otherParentValueConstraint = CopyMergeUtility.GetEquivalentElement(parentValueConstraint, foreignStore, elementTracker)) && null != (otherNote = otherParentValueConstraint.Note))
				{
					elementTracker.AddEquivalentElement(this, otherNote);
					return true;
				}
			}
			return false;
		}
Example #13
0
		bool IElementEquivalence.MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			ORMModel parentORMModel;
			if (null != (parentORMModel = this.Model))
			{
				// Embedded through the ModelHasModelErrorDisplayFilter relationship
				ORMModel otherParentORMModel;
				ModelErrorDisplayFilter otherModelErrorDisplayFilter;
				if (null != (otherParentORMModel = CopyMergeUtility.GetEquivalentElement(parentORMModel, foreignStore, elementTracker)) && null != (otherModelErrorDisplayFilter = otherParentORMModel.ModelErrorDisplayFilter))
				{
					elementTracker.AddEquivalentElement(this, otherModelErrorDisplayFilter);
					return true;
				}
			}
			return false;
		}
Example #14
0
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			ElementGrouping parentElementGrouping;
			FactType parentFactType;
			ObjectType parentObjectType;
			ORMModel parentORMModel;
			SetComparisonConstraint parentSetComparisonConstraint;
			SetConstraint parentSetConstraint;
			ValueConstraint parentValueConstraint;
			if (null != (parentElementGrouping = this.Grouping))
			{
				// Embedded through the ElementGroupingHasDefinition relationship
				ElementGrouping otherParentElementGrouping;
				Definition otherDefinition;
				if (null != (otherParentElementGrouping = CopyMergeUtility.GetEquivalentElement(parentElementGrouping, foreignStore, elementTracker)) && null != (otherDefinition = otherParentElementGrouping.Definition))
				{
					elementTracker.AddEquivalentElement(this, otherDefinition);
					return true;
				}
			}
			else if (null != (parentFactType = this.FactType))
			{
				// Embedded through the FactTypeHasDefinition relationship
				FactType otherParentFactType;
				Definition otherDefinition;
				if (null != (otherParentFactType = CopyMergeUtility.GetEquivalentElement(parentFactType, foreignStore, elementTracker)) && null != (otherDefinition = otherParentFactType.Definition))
				{
					elementTracker.AddEquivalentElement(this, otherDefinition);
					return true;
				}
			}
			else if (null != (parentObjectType = this.ObjectType))
			{
				// Embedded through the ObjectTypeHasDefinition relationship
				ObjectType otherParentObjectType;
				Definition otherDefinition;
				if (null != (otherParentObjectType = CopyMergeUtility.GetEquivalentElement(parentObjectType, foreignStore, elementTracker)) && null != (otherDefinition = otherParentObjectType.Definition))
				{
					elementTracker.AddEquivalentElement(this, otherDefinition);
					return true;
				}
			}
			else if (null != (parentORMModel = this.Model))
			{
				// Embedded through the ModelHasDefinition relationship
				ORMModel otherParentORMModel;
				Definition otherDefinition;
				if (null != (otherParentORMModel = CopyMergeUtility.GetEquivalentElement(parentORMModel, foreignStore, elementTracker)) && null != (otherDefinition = otherParentORMModel.Definition))
				{
					elementTracker.AddEquivalentElement(this, otherDefinition);
					return true;
				}
			}
			else if (null != (parentSetComparisonConstraint = this.SetComparisonConstraint))
			{
				// Embedded through the SetComparisonConstraintHasDefinition relationship
				SetComparisonConstraint otherParentSetComparisonConstraint;
				Definition otherDefinition;
				if (null != (otherParentSetComparisonConstraint = CopyMergeUtility.GetEquivalentElement(parentSetComparisonConstraint, foreignStore, elementTracker)) && null != (otherDefinition = otherParentSetComparisonConstraint.Definition))
				{
					elementTracker.AddEquivalentElement(this, otherDefinition);
					return true;
				}
			}
			else if (null != (parentSetConstraint = this.SetConstraint))
			{
				// Embedded through the SetConstraintHasDefinition relationship
				SetConstraint otherParentSetConstraint;
				Definition otherDefinition;
				if (null != (otherParentSetConstraint = CopyMergeUtility.GetEquivalentElement(parentSetConstraint, foreignStore, elementTracker)) && null != (otherDefinition = otherParentSetConstraint.Definition))
				{
					elementTracker.AddEquivalentElement(this, otherDefinition);
					return true;
				}
			}
			else if (null != (parentValueConstraint = this.ValueConstraint))
			{
				// Embedded through the ValueConstraintHasDefinition relationship
				ValueConstraint otherParentValueConstraint;
				Definition otherDefinition;
				if (null != (otherParentValueConstraint = CopyMergeUtility.GetEquivalentElement(parentValueConstraint, foreignStore, elementTracker)) && null != (otherDefinition = otherParentValueConstraint.Definition))
				{
					elementTracker.AddEquivalentElement(this, otherDefinition);
					return true;
				}
			}
			return false;
		}
Example #15
0
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			ConstraintRoleSequence parentConstraintRoleSequence;
			if (null != (parentConstraintRoleSequence = this.RoleSequence))
			{
				// Embedded through the ConstraintRoleSequenceHasJoinPath relationship
				ConstraintRoleSequence otherParentConstraintRoleSequence;
				ConstraintRoleSequenceJoinPath otherConstraintRoleSequenceJoinPath;
				if (null != (otherParentConstraintRoleSequence = CopyMergeUtility.GetEquivalentElement(parentConstraintRoleSequence, foreignStore, elementTracker)) && null != (otherConstraintRoleSequenceJoinPath = otherParentConstraintRoleSequence.JoinPath))
				{
					elementTracker.AddEquivalentElement(this, otherConstraintRoleSequenceJoinPath);
					return true;
				}
			}
			return false;
		}
Example #16
0
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			ObjectType parentObjectType;
			if (null != (parentObjectType = this.ValueType))
			{
				// Embedded through the ValueTypeHasValueConstraint relationship
				ObjectType otherParentObjectType;
				ValueTypeValueConstraint otherValueTypeValueConstraint;
				if (null != (otherParentObjectType = CopyMergeUtility.GetEquivalentElement(parentObjectType, foreignStore, elementTracker)) && null != (otherValueTypeValueConstraint = otherParentObjectType.ValueConstraint))
				{
					elementTracker.AddEquivalentElement(this, otherValueTypeValueConstraint);
					this.MatchValueRanges(otherValueTypeValueConstraint, elementTracker);
					return true;
				}
			}
			return false;
		}
Example #17
0
		bool IElementEquivalence.MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			return this.MapEquivalentElements(foreignStore, elementTracker);
		}
Example #18
0
		/// <summary>Implements <cref name="IElementEquivalence.MapEquivalentElements"/></summary>
		protected bool MapEquivalentElements(Store foreignStore, IEquivalentElementTracker elementTracker)
		{
			FactTypeDerivationRule parentFactTypeDerivationRule;
			SubtypeDerivationRule parentSubtypeDerivationRule;
			if (null != (parentFactTypeDerivationRule = this.FactTypeDerivationRule))
			{
				// Embedded through the FactTypeDerivationRuleHasDerivationNote relationship
				FactTypeDerivationRule otherParentFactTypeDerivationRule;
				DerivationNote otherDerivationNote;
				if (null != (otherParentFactTypeDerivationRule = CopyMergeUtility.GetEquivalentElement(parentFactTypeDerivationRule, foreignStore, elementTracker)) && null != (otherDerivationNote = otherParentFactTypeDerivationRule.DerivationNote))
				{
					elementTracker.AddEquivalentElement(this, otherDerivationNote);
					return true;
				}
			}
			else if (null != (parentSubtypeDerivationRule = this.SubtypeDerivationRule))
			{
				// Embedded through the SubtypeDerivationRuleHasDerivationNote relationship
				SubtypeDerivationRule otherParentSubtypeDerivationRule;
				DerivationNote otherDerivationNote;
				if (null != (otherParentSubtypeDerivationRule = CopyMergeUtility.GetEquivalentElement(parentSubtypeDerivationRule, foreignStore, elementTracker)) && null != (otherDerivationNote = otherParentSubtypeDerivationRule.DerivationNote))
				{
					elementTracker.AddEquivalentElement(this, otherDerivationNote);
					return true;
				}
			}
			return false;
		}