diff --git a/src/Analysis/Ast/Impl/Types/PythonFunctionType.cs b/src/Analysis/Ast/Impl/Types/PythonFunctionType.cs index 26674cc1c..2e3ecade7 100644 --- a/src/Analysis/Ast/Impl/Types/PythonFunctionType.cs +++ b/src/Analysis/Ast/Impl/Types/PythonFunctionType.cs @@ -26,8 +26,8 @@ namespace Microsoft.Python.Analysis.Types { [DebuggerDisplay("Function {Name} ({TypeId})")] internal class PythonFunctionType : PythonType, IPythonFunctionType { - private readonly List _overloads = new List(); - private readonly object _lock = new object(); + private IPythonFunctionOverload _overload; + private List _overloads; private readonly string _documentation; private bool _isAbstract; private bool _isSpecialized; @@ -122,7 +122,8 @@ internal override void SetDocumentationProvider(Func provider) { public bool IsStub { get; internal set; } public bool IsUnbound => DeclaringType == null; - public IReadOnlyList Overloads => _overloads.ToArray(); + public IReadOnlyList Overloads => + _overloads?.ToArray() ?? (_overload != null ? new[] { _overload } : Array.Empty()); #endregion #region IHasQualifiedName @@ -141,8 +142,16 @@ internal void Specialize(string[] dependencies) { internal ImmutableArray Dependencies { get; private set; } = ImmutableArray.Empty; internal void AddOverload(IPythonFunctionOverload overload) { - lock (_lock) { + if (_overload != null) { + _overloads = new List { _overload, overload }; + _overload = null; + return; + } + + if (_overloads != null) { _overloads.Add(overload); + } else { + _overload = overload; } }