Exemplo n.º 1
0
        /// <summary>
        /// Tries to relocate the <see cref="ITypeDefOrRef"/>.
        /// </summary>
        /// <param name="typeDefOrRef">The type definition or reference.</param>
        /// <returns></returns>
        /// <exception cref="InvalidOperationException">For unknown implementations.</exception>
        protected virtual ITypeDefOrRef TryRelocateTypeDefOrRef(ITypeDefOrRef typeDefOrRef)
        {
            if (typeDefOrRef == null)
            {
                return(null);
            }

            // no need to relocate
            if (typeDefOrRef is TypeDef typeDef)
            {
                return(TryRelocateTypeDef(typeDef));
            }

            if (typeDefOrRef is TypeRef typeRef)
            {
                return(TryRelocateTypeRef(typeRef));
            }

            if (typeDefOrRef is TypeSpec typeSpec)
            {
                return(TryRelocateTypeSig(typeSpec.TypeSig).ToTypeDefOrRef());
            }

            throw new InvalidOperationException($"typeDefOrRef of type {typeDefOrRef.GetType()} was unhandled");
        }
Exemplo n.º 2
0
        /// <summary>
        /// Tries to relocate the type definition or reference.
        /// </summary>
        /// <param name="typeDefOrRef">The type definition or reference.</param>
        /// <returns></returns>
        /// <exception cref="InvalidOperationException">For unknown implementations.</exception>
        protected virtual ITypeDefOrRef TryRelocateTypeDefOrRef(ITypeDefOrRef typeDefOrRef)
        {
            if (typeDefOrRef == null)
                return null;

            // no need to relocate
            var typeDef = typeDefOrRef as TypeDef;
            if (typeDef != null)
                return null;

            var typeRef = typeDefOrRef as TypeRef;
            if (typeRef != null)
                return TryRelocateTypeRef(typeRef).ToTypeDefOrRef();

            var typeSpec = typeDefOrRef as TypeSpec;
            if (typeSpec != null)
                return TryRelocateTypeSig(typeSpec.TypeSig).ToTypeDefOrRef();

            throw new InvalidOperationException($"typeDefOrRef of type {typeDefOrRef.GetType()} was unhandled");
        }