/// <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"); }
/// <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"); }