mhutch / MonoDevelop.MSBuildEditor

Improved MSBuild editing support
Other
226 stars 26 forks source link

ProjectElement can be null in a malformed project #148

Closed KirillOsenkov closed 7 months ago

KirillOsenkov commented 8 months ago

Note this document doesn't have the root element:

<ItemGroup>
  <a Include="@(b->WithMetadataValue()->c)">
  </a>
</ItemGroup>

hover over the parentheses

System.NullReferenceException: Object reference not set to an instance of an object.
   at bool MonoDevelop.MSBuild.Language.MSBuildRootDocument.UsesLegacyProjectSystem() in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildRootDocument.cs:line 296
   at IEnumerable<IMSBuildSchema> MonoDevelop.MSBuild.Language.MSBuildRootDocument.GetSchemas(bool skipThisDocumentInferredSchema)+MoveNext() in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildRootDocument.cs:line 305
   at IEnumerable<ItemInfo> MonoDevelop.MSBuild.Schema.MSBuildSchemaExtensions.GetAllItemDefinitions(IEnumerable<IMSBuildSchema> schemas, string name)+MoveNext() in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Schema/MSBuildSchemaExtensions.cs:line 47
   at T MonoDevelop.MSBuild.Schema.MSBuildSchemaExtensions.GetFirstWithDescriptionOrDefault<T>(IEnumerable<T> seq) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Schema/MSBuildSchemaExtensions.cs:line 313
   at ItemInfo MonoDevelop.MSBuild.Schema.MSBuildSchemaExtensions.GetItem(IEnumerable<IMSBuildSchema> schemas, string name) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Schema/MSBuildSchemaExtensions.cs:line 41
   at MSBuildAttributeSyntax MonoDevelop.MSBuild.Schema.MSBuildSchemaExtensions.SpecializeAttribute(IEnumerable<IMSBuildSchema> schemas, MSBuildAttributeSyntax attribute, string elementName) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Schema/MSBuildSchemaExtensions.cs:line 249
   at ITypedSymbol MonoDevelop.MSBuild.Schema.MSBuildSchemaExtensions.GetAttributeInfo(IEnumerable<IMSBuildSchema> schemas, MSBuildAttributeSyntax attribute, string elementName, string attributeName) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Schema/MSBuildSchemaExtensions.cs:line 243
   at void MonoDevelop.MSBuild.Language.MSBuildDocumentVisitor.ResolveAttributesAndValue(XElement element, MSBuildElementSyntax resolvedElement, ITypedSymbol elementSymbol) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildDocumentVisitor.cs:line 130
   at void MonoDevelop.MSBuild.Language.MSBuildDocumentVisitor.VisitResolvedElementChildren(XElement element, MSBuildElementSyntax resolved, ITypedSymbol elementSymbol) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildDocumentVisitor.cs:line 91
   at void MonoDevelop.MSBuild.Language.MSBuildDocumentVisitor.VisitResolvedElement(XElement element, MSBuildElementSyntax resolved, ITypedSymbol elementSymbol) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildDocumentVisitor.cs:line 86
   at void MonoDevelop.MSBuild.Language.MSBuildResolver+MSBuildResolveVisitor.VisitResolvedElement(XElement element, MSBuildElementSyntax resolved, ITypedSymbol symbol) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildResolver.cs:line 160
   at void MonoDevelop.MSBuild.Language.MSBuildDocumentVisitor.VisitResolvedElement(XElement element, MSBuildElementSyntax resolved) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildDocumentVisitor.cs:line 78
   at void MonoDevelop.MSBuild.Language.MSBuildDocumentVisitor.Run(XElement element, MSBuildElementSyntax resolvedElement, int offset, int length, CancellationToken token) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildDocumentVisitor.cs:line 52
   at MSBuildResolveResult MonoDevelop.MSBuild.Language.MSBuildResolver.Resolve(XmlSpineParser spineParser, ITextSource textSource, MSBuildDocument context, IFunctionTypeProvider functionTypeProvider, ILogger logger, CancellationToken cancellationToken) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild/Language/MSBuildResolver.cs:line 92
   at async Task<(SnapshotSpan sourceSpan, ImmutableArray<ValueTuple<ReferenceUsage, SnapshotSpan>> highlights)> MonoDevelop.MSBuild.Editor.HighlightReferences.MSBuildHighlightReferencesTagger.GetHighlightsAsync(SnapshotPoint caretLocation, CancellationToken token) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.MSBuild.Editor/HighlightReferences/MSBuildHighlightReferencesTagger.cs:line 51
   at void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>.Start<TStateMachine>(ref TStateMachine stateMachine)
   at Task<(SnapshotSpan sourceSpan, ImmutableArray<ValueTuple<ReferenceUsage, SnapshotSpan>> highlights)> MonoDevelop.MSBuild.Editor.HighlightReferences.MSBuildHighlightReferencesTagger.GetHighlightsAsync(SnapshotPoint caretLocation, CancellationToken token)
   at async Task<(ValueTuple<SnapshotSpan?, SnapshotSpan> sourceSpan)> MonoDevelop.Xml.Editor.HighlightReferences.HighlightTagger<TTag, TKind>.UpdateHighlightsAsync(CancellationToken cancellationToken) in C:/MonoDevelop.MSBuildEditor/MonoDevelop.Xml/Editor/HighlightReferences/HighlightTagger.cs:line 72
   at void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>.Start<TStateMachine>(ref TStateMachine stateMachine)
   at Task<(ValueTuple<SnapshotSpan?, SnapshotSpan> sourceSpan)> MonoDevelop.Xml.Editor.HighlightReferences.HighlightTagger<TTag, TKind>.UpdateHighlightsAsync(CancellationToken cancellationToken)
   at async void MonoDevelop.Xml.Editor.HighlightReferences.HighlightTagger<TTag, TKind>.TimerFired(object state)+(?) => { } in C:/MonoDevelop.MSBuildEditor/MonoDevelop.Xml/Editor/HighlightReferences/HighlightTagger.cs:line 102
   at void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<TStateMachine>(ref TStateMachine stateMachine)
   at void MonoDevelop.Xml.Editor.HighlightReferences.HighlightTagger<TTag, TKind>.TimerFired(object state)+() => { }
   at void System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at bool System.Threading.ThreadPoolWorkQueue.Dispatch()
   at bool System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()