public bool PrimTryResolve(Global global, out AssemblyDef assemblyDef, out TypeDef typeDef, out MemberDef memberDef) { if (!DefiningType.PrimTryResolve(global, out assemblyDef, out typeDef)) { memberDef = null; return(false); } memberDef = typeDef.ResolveMember(Signature); return(memberDef != null); }
public override TypeStyle Style(RootEnvironment rootEnv) { var assembly = default(AssemblyDef); var type = default(TypeDef); if (name.PrimTryResolve(rootEnv.Global, out assembly, out type)) { return(type.Style); } else { throw new InvalidOperationException("unable to resolve type"); } }
public bool ExtraUsedType(QualifiedTypeName name) { var assemblyDef = default(AssemblyDef); var typeDef = default(TypeDef); if (name.PrimTryResolve(Global, out assemblyDef, out typeDef)) { return(typeDef.MarkAsUsed(this, assemblyDef)); } return(false); }
private PE.Row TypeDefOrRefRowFromQualifiedTypeName(DllSaveContext ctxt, QualifiedTypeName name) { if (name.Assembly.Equals(ctxt.AssemblyName)) { var assemblyDef = default(AssemblyDef); var typeDef = default(TypeDef); if (!name.PrimTryResolve(rootEnv.Global, out assemblyDef, out typeDef)) { throw new InvalidOperationException("no such type"); } return(TypeDefRowFromTypeDef(ctxt, typeDef)); } else { var row = default(PE.TypeRefRow); var resScope = default(PE.Row); if (name.Type.IsNested) { resScope = TypeDefOrRefRowFromQualifiedTypeName(ctxt, name.Outer()); } else { resScope = AssemblyNameToAssemblyRefRow(ctxt, name.Assembly); } if (!ctxt.QualifiedTypeNameToRowCache.TryGetValue(name, out row)) { row = new PE.TypeRefRow { ResolutionScope = { Value = resScope }, TypeName = { Value = name.Type.Types[name.Type.Types.Count - 1] }, TypeNamespace = { Value = name.Type.Namespace } }; ctxt.QualifiedTypeNameToRowCache.Add(name, row); } return(row); } }