private void ComputeConstructorOverloads(ITypeSymbol type, SymbolMetaData meta) { meta.ConstructorCount = type.GetMembers().Count(t => t.Kind == SymbolKind.Method && ((IMethodSymbol)t).MethodKind == MethodKind.Constructor && !t.IsStatic); meta.HasConstructorOverloads = meta.ConstructorCount > 1; if (meta.ConstructorCount < 2 && type.BaseType != null && type.BaseType.SpecialType != SpecialType.System_Object) { meta.HasConstructorOverloads = HasConstructorOverloads(type.BaseType); } }
private SymbolMetaData GetOrCreateMeta(ISymbol symbol) { lock (this) { if (!_symbolMetaCache.TryGetValue(symbol, out var meta)) { _symbolMetaCache[symbol] = meta = new SymbolMetaData(); } return meta; } }