private static bool TryCreateImportRecordFromCSharpImportString(EESymbolProvider <TTypeSymbol, TLocalSymbol> symbolProvider, string importString, out ImportRecord record) { ImportTargetKind targetKind; string externAlias; string alias; string targetString; if (CustomDebugInfoReader.TryParseCSharpImportString(importString, out alias, out externAlias, out targetString, out targetKind)) { ITypeSymbol type = null; if (targetKind == ImportTargetKind.Type) { type = symbolProvider.GetTypeSymbolForSerializedType(targetString); targetString = null; } record = new ImportRecord( targetKind: targetKind, alias: alias, targetType: type, targetString: targetString, targetAssembly: null, targetAssemblyAlias: externAlias); return(true); } record = default(ImportRecord); return(false); }
public static bool TryCreateFromVisualBasicImportString(string importString, out ImportRecord record, out ImportScope scope) { ImportTargetKind targetKind; string alias; string targetString; if (CustomDebugInfoReader.TryParseVisualBasicImportString(importString, out alias, out targetString, out targetKind, out scope)) { record = new NativeImportRecord( targetKind, externAlias: null, alias: alias, targetString: targetString); return(true); } record = default(ImportRecord); return(false); }
public static bool TryCreateFromCSharpImportString(string importString, out ImportRecord record) { ImportTargetKind targetKind; string externAlias; string alias; string targetString; if (CustomDebugInfoReader.TryParseCSharpImportString(importString, out alias, out externAlias, out targetString, out targetKind)) { record = new NativeImportRecord( targetKind, externAlias, alias, targetString); return(true); } record = default(ImportRecord); return(false); }
private static bool TryCreateImportRecordFromVisualBasicImportString(string importString, out ImportRecord record, out VBImportScopeKind scope) { ImportTargetKind targetKind; string alias; string targetString; if (CustomDebugInfoReader.TryParseVisualBasicImportString(importString, out alias, out targetString, out targetKind, out scope)) { record = new ImportRecord( targetKind: targetKind, alias: alias, targetType: null, targetString: targetString, targetAssembly: null, targetAssemblyAlias: null); return(true); } record = default(ImportRecord); return(false); }
private static bool TryAddImport( string alias, NamespaceOrTypeSymbol targetSymbol, ArrayBuilder<NamespaceOrTypeAndUsingDirective> usingsBuilder, ImmutableDictionary<string, AliasAndUsingDirective>.Builder usingAliases, InContainerBinder binder, ImportRecord importRecord) { if (alias == null) { usingsBuilder.Add(new NamespaceOrTypeAndUsingDirective(targetSymbol, usingDirective: null)); } else { IdentifierNameSyntax aliasSyntax; if (!TryParseIdentifierNameSyntax(alias, out aliasSyntax)) { Debug.WriteLine($"Import record '{importRecord}' has syntactically invalid alias '{alias}'"); return false; } var aliasSymbol = AliasSymbol.CreateCustomDebugInfoAlias(targetSymbol, aliasSyntax.Identifier, binder); usingAliases.Add(alias, new AliasAndUsingDirective(aliasSymbol, usingDirective: null)); } return true; }
private static void ReadVisualBasicImportsDebugInfo( ISymUnmanagedReader reader, int methodToken, int methodVersion, out ImmutableArray <ImmutableArray <ImportRecord> > importRecordGroups, out string defaultNamespaceName) { importRecordGroups = ImmutableArray <ImmutableArray <ImportRecord> > .Empty; var importStrings = reader.GetVisualBasicImportStrings(methodToken, methodVersion); if (importStrings.IsDefault) { defaultNamespaceName = ""; return; } defaultNamespaceName = null; var projectLevelImportRecords = ArrayBuilder <ImportRecord> .GetInstance(); var fileLevelImportRecords = ArrayBuilder <ImportRecord> .GetInstance(); foreach (string importString in importStrings) { Debug.Assert(importString != null); if (importString.Length > 0 && importString[0] == '*') { string alias = null; string target = null; ImportTargetKind kind = 0; ImportScope scope = 0; if (!CustomDebugInfoReader.TryParseVisualBasicImportString(importString, out alias, out target, out kind, out scope)) { Debug.WriteLine($"Unable to parse import string '{importString}'"); continue; } else if (kind == ImportTargetKind.Defunct) { continue; } Debug.Assert(alias == null); // The default namespace is never aliased. Debug.Assert(target != null); Debug.Assert(kind == ImportTargetKind.DefaultNamespace); // We only expect to see one of these, but it looks like ProcedureContext::LoadImportsAndDefaultNamespaceNormal // implicitly uses the last one if there are multiple. Debug.Assert(defaultNamespaceName == null); defaultNamespaceName = target; } else { ImportRecord importRecord = null; ImportScope scope = 0; if (TryCreateImportRecordFromVisualBasicImportString(importString, out importRecord, out scope)) { if (scope == ImportScope.Project) { projectLevelImportRecords.Add(importRecord); } else { Debug.Assert(scope == ImportScope.File || scope == ImportScope.Unspecified); fileLevelImportRecords.Add(importRecord); } } else { Debug.WriteLine($"Failed to parse import string {importString}"); } } } importRecordGroups = ImmutableArray.Create( fileLevelImportRecords.ToImmutableAndFree(), projectLevelImportRecords.ToImmutableAndFree()); defaultNamespaceName = defaultNamespaceName ?? ""; }