AlternateConstraintMatcher

          flowchart TD
          AlternateConstraintMatcher("AlternateConstraintMatcher")

          AlternateConstraintMatcher -->|"_anyTypeMatcher"| IAstType
          IAstType("IAstType")

          IAstType -->|"="| AnyTypeMatcher
          AnyTypeMatcher("AnyTypeMatcher")

          AnyTypeMatcher -->|"_typeMatchers"| ITypeMatcher
          ITypeMatcher("ITypeMatcher")

          ITypeMatcher -->|"#0"| AlternateConstraintMatcher
          ITypeMatcher -->|"#1"| EnumConstraintMatcher
          ITypeMatcher -->|"#10"| MatchObjectParentDualBase_IAstInputField_
          ITypeMatcher -->|"#11"| MatchObjectParentDualBase_IAstOutputField_
          ITypeMatcher -->|"#2"| SpecialConstraintMatcher
          ITypeMatcher -->|"#3"| UnionConstraintMatcher
          ITypeMatcher -->|"#4"| DomainMatcher
          ITypeMatcher -->|"#5"| SimpleParentMatcher_IAstDomain_
          ITypeMatcher -->|"#6"| SimpleParentMatcher_IAstEnum_
          ITypeMatcher -->|"#7"| SimpleParentMatcher_IAstTypeSpecial_
          ITypeMatcher -->|"#8"| SimpleParentMatcher_IAstUnion_
          ITypeMatcher -->|"#9"| ObjectParentMatcher_IAstDualField_
          EnumConstraintMatcher("EnumConstraintMatcher")

          EnumConstraintMatcher -->|"_enumMatcher"| IAstEnum
          IAstEnum("IAstEnum")

          IAstEnum -->|"="| SimpleParentMatcher_IAstEnum_
          UnionConstraintMatcher("UnionConstraintMatcher")

          UnionConstraintMatcher -->|"_anyTypeMatcher"| IAstType
          DomainMatcher("DomainMatcher")

          DomainMatcher -->|"_enumMatcher"| IAstEnum
        

IAstDomain

          flowchart TD
          IAstDomain("IAstDomain")

          IAstDomain -->|"="| SimpleParentMatcher_IAstDomain_
          IAstObject_IAstDualField_("IAstObject(IAstDualField)")

          IAstObject_IAstDualField_ -->|"="| ObjectParentMatcher_IAstDualField_
          IAstObject_IAstInputField_("IAstObject(IAstInputField)")

          IAstObject_IAstInputField_ -->|"="| MatchObjectParentDualBase_IAstInputField_
          IAstObject_IAstOutputField_("IAstObject(IAstOutputField)")

          IAstObject_IAstOutputField_ -->|"="| MatchObjectParentDualBase_IAstOutputField_
          IAstTypeArg("IAstTypeArg")

          IAstTypeArg -->|"="| TypeArgMatcher
          TypeArgMatcher("TypeArgMatcher")

          TypeArgMatcher -->|"_anyTypeMatcher"| IAstType
          IAstType("IAstType")

          IAstType -->|"="| AnyTypeMatcher
        

IAstTypeSpecial

          flowchart TD
          IAstTypeSpecial("IAstTypeSpecial")

          IAstTypeSpecial -->|"="| SimpleParentMatcher_IAstTypeSpecial_
          IAstUnion("IAstUnion")

          IAstUnion -->|"="| SimpleParentMatcher_IAstUnion_