示例#1
0
        public IGeneralSignatureMemberUniqueIdentifier GetIdentifier(IIntermediateConstructorSignatureMember member)
        {
            var internalHelper = member as _IntermediateConstructorSignatureMember;

            if (internalHelper == null)
            {
                return(TypeSystemIdentifiers.GetCtorSignatureIdentifier(member.Parameters.ParameterTypes.ToArray()));
            }
            else if (internalHelper.IsDisposed)
            {
                throw new InvalidOperationException(Utilities.Properties.Resources.ObjectStateThrowMessage);
            }
            else if (internalHelper.IsTypeInitializer)
            {
                return(TypeSystemIdentifiers.GetCtorSignatureIdentifier());
            }
            else if (internalHelper.AreParametersInitialized)
            {
                return(TypeSystemIdentifiers.GetCtorSignatureIdentifier(member.Parameters.ParameterTypes.ToArray()));
            }
            else
            {
                return(TypeSystemIdentifiers.GetCtorSignatureIdentifier(new IType[0]));
            }
        }
示例#2
0
 internal static ISignatureMemberUniqueIdentifier GetCtorIdentifier(ICliMetadataMethodDefinitionTableRow methodDef, IType owner, _ICliManager manager)
 {
     return(TypeSystemIdentifiers.GetCtorSignatureIdentifier((from p in methodDef.Signature.Parameters
                                                              select manager.ObtainTypeReference(p.ParameterType, owner, null, owner == null ? null : owner.Assembly)).SinglePass()));
 }
示例#3
0
        private void CheckIdentifierAt(int memberIndex)
        {
            if (memberIndex < 0 || memberIndex >= this.Count)
            {
                throw new ArgumentOutOfRangeException("memberIndex");
            }
            if (this.memberIdentifiers[memberIndex] != null)
            {
                return;
            }
            switch (this.memberTypes[memberIndex])
            {
            case CliMemberType.BinaryOperator:
                this.memberIdentifiers[memberIndex] = CliMemberExtensions.GetBinaryOperatorIdentifier((ICliMetadataMethodDefinitionTableRow)this.memberSources[memberIndex], (IType)this.parent, this.parent.IdentityManager);
                break;

            case CliMemberType.Constructor:
                var ctor = (ICliMetadataMethodDefinitionTableRow)this.memberSources[memberIndex];
                if (ctor.Name == CliCommon.ConstructorStaticName &&
                    ctor.Parameters.Count == 0)
                {
                    this.memberIdentifiers[memberIndex] = TypeSystemIdentifiers.GetCtorSignatureIdentifier();
                }
                else
                {
                    this.memberIdentifiers[memberIndex] = CliMemberExtensions.GetCtorIdentifier(ctor, (IType)this.parent, this.parent.IdentityManager);
                }
                break;

            case CliMemberType.Event:
                this.memberIdentifiers[memberIndex] = CliMemberExtensions.GetEventIdentifier((ICliMetadataEventTableRow)this.memberSources[memberIndex], (IType)this.parent, this.parent.IdentityManager);
                break;

            case CliMemberType.Field:
                this.memberIdentifiers[memberIndex] = (IGeneralMemberUniqueIdentifier)CliMemberExtensions.GetFieldIdentifier((ICliMetadataFieldTableRow)this.memberSources[memberIndex]);
                break;

            case CliMemberType.Indexer:
                this.memberIdentifiers[memberIndex] = CliMemberExtensions.GetIndexerIdentifier((ICliMetadataPropertyTableRow)this.memberSources[memberIndex], (IType)this.parent, this.parent.IdentityManager);
                break;

            case CliMemberType.Method:
                this.memberIdentifiers[memberIndex] = CliMemberExtensions.GetMethodIdentifier((ICliMetadataMethodDefinitionTableRow)this.memberSources[memberIndex], (IType)this.parent, this.parent.IdentityManager, () => (IMethodSignatureMember)this.Values[memberIndex].Entry);
                break;

            case CliMemberType.Property:
                this.memberIdentifiers[memberIndex] = (IGeneralMemberUniqueIdentifier)CliMemberExtensions.GetPropertyIdentifier((ICliMetadataPropertyTableRow)this.memberSources[memberIndex]);
                break;

            case CliMemberType.TypeCoercionOperator:
                this.memberIdentifiers[memberIndex] = CliMemberExtensions.GetTypeCoercionOperatorIdentifier((ICliMetadataMethodDefinitionTableRow)this.memberSources[memberIndex], (IType)this.parent, this.parent.IdentityManager);
                break;

            case CliMemberType.UnaryOperator:
                this.memberIdentifiers[memberIndex] = CliMemberExtensions.GetUnaryOperatorIdentifier((ICliMetadataMethodDefinitionTableRow)this.memberSources[memberIndex], (IType)this.parent, this.parent.IdentityManager);
                break;

            default:
                throw new InvalidOperationException("Member of invalid kind.");
            }
        }