diff --git a/src/Analysis/Engine/Impl/Analyzer/FunctionAnalysisUnit.cs b/src/Analysis/Engine/Impl/Analyzer/FunctionAnalysisUnit.cs index f2a7e9db7..15891762f 100644 --- a/src/Analysis/Engine/Impl/Analyzer/FunctionAnalysisUnit.cs +++ b/src/Analysis/Engine/Impl/Analyzer/FunctionAnalysisUnit.cs @@ -101,7 +101,8 @@ private bool ProcessAbstractDecorators(IAnalysisSet decorator) { // Only handle these if they are specialized foreach (var d in decorator.OfType()) { - if (d.DeclaringModule?.ModuleName != "abc") { + if (d.DeclaringModule != null + && d.DeclaringModule.ModuleName != "abc") { continue; } diff --git a/src/Analysis/Engine/Impl/Values/SpecializedNamespace.cs b/src/Analysis/Engine/Impl/Values/SpecializedNamespace.cs index ed9cc1228..486f051c9 100644 --- a/src/Analysis/Engine/Impl/Values/SpecializedNamespace.cs +++ b/src/Analysis/Engine/Impl/Values/SpecializedNamespace.cs @@ -217,6 +217,8 @@ public override IEnumerable Locations { } } + public override string Name => _original == null ? base.Name : this._original.Name; + public override IEnumerable Overloads { get { if (_original == null) { diff --git a/src/Analysis/Engine/Test/InheritanceTests.cs b/src/Analysis/Engine/Test/InheritanceTests.cs index 052b425e0..3eece791e 100644 --- a/src/Analysis/Engine/Test/InheritanceTests.cs +++ b/src/Analysis/Engine/Test/InheritanceTests.cs @@ -3,12 +3,13 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Python.LanguageServer.Implementation; +using Microsoft.PythonTools.Analysis; using Microsoft.PythonTools.Analysis.FluentAssertions; using Microsoft.PythonTools.Interpreter; using Microsoft.VisualStudio.TestTools.UnitTesting; using TestUtilities; -namespace Microsoft.PythonTools.Analysis { +namespace AnalysisTests { [TestClass] public class InheritanceTests { public TestContext TestContext { get; set; } @@ -38,5 +39,30 @@ def virt(): analysis.Should().HaveVariable("b").OfType(BuiltinTypeId.Int); } } + + [TestMethod] + public async Task AbstractPropertyReturnTypeIgnored() { + var code = @" +import abc + +class A: + @abc.abstractproperty + def virt(): + pass + +class B(A): + @property + def virt(): + return 42 + +a = A() +b = a.virt"; + + using (var server = await new Server().InitializeAsync(PythonVersions.Required_Python36X)) { + var analysis = await server.OpenDefaultDocumentAndGetAnalysisAsync(code); + + analysis.Should().HaveVariable("b").OfType(BuiltinTypeId.Int); + } + } } } diff --git a/src/Analysis/Engine/Test/Microsoft.Python.Analysis.Engine.Tests.csproj b/src/Analysis/Engine/Test/Microsoft.Python.Analysis.Engine.Tests.csproj index 8353a7386..df62a46ee 100644 --- a/src/Analysis/Engine/Test/Microsoft.Python.Analysis.Engine.Tests.csproj +++ b/src/Analysis/Engine/Test/Microsoft.Python.Analysis.Engine.Tests.csproj @@ -1,7 +1,7 @@  netcoreapp2.1 - Microsoft.PythonTools.Analysis + AnalysisTests Microsoft.Python.Analysis.Engine.Tests