提交 d28587c4 编写于 作者: D Dustin Campbell

Further clean up in FileCodeModel

* Removing some dead code
* Clarifying comments
* Giving consistent names
上级 deda497a
......@@ -175,16 +175,6 @@ internal DocumentId GetDocumentId()
throw Exceptions.ThrowEUnexpected();
}
private void AddElement(SyntaxNodeKey nodeKey, EnvDTE.CodeElement element)
{
_codeElementTable.Add(nodeKey, element);
}
private void RemoveElement(SyntaxNodeKey nodeKey)
{
_codeElementTable.Remove(nodeKey);
}
internal void UpdateCodeElementNodeKey(AbstractKeyedCodeElement keyedElement, SyntaxNodeKey oldNodeKey, SyntaxNodeKey newNodeKey)
{
var codeElement = _codeElementTable.Remove(oldNodeKey);
......@@ -198,9 +188,9 @@ internal void UpdateCodeElementNodeKey(AbstractKeyedCodeElement keyedElement, Sy
_codeElementTable.Add(newNodeKey, codeElement);
}
internal void OnElementCreated(SyntaxNodeKey nodeKey, EnvDTE.CodeElement element)
internal void OnCodeElementCreated(SyntaxNodeKey nodeKey, EnvDTE.CodeElement element)
{
AddElement(nodeKey, element);
_codeElementTable.Add(nodeKey, element);
}
internal T GetOrCreateCodeElement<T>(SyntaxNode node)
......@@ -209,39 +199,26 @@ internal T GetOrCreateCodeElement<T>(SyntaxNode node)
if (!nodeKey.IsEmpty)
{
// Check if the node exists in the parse tree.
// Note that in designer spew the nodes don't get created right away so we skip this check.
if (!IsBatchOpen && CodeModelService.LookupNode(nodeKey, GetSyntaxTree()) == null)
{
throw Exceptions.ThrowEFail();
}
// Since the node already has a key, check to see if a code element already
// exists for it. If so, return that element it it's still valid; otherwise,
// remove it from the table.
// See if the element exists.
// Here's our element... possibly. It must be valid -- if it isn't,
// we need to remove it.
EnvDTE.CodeElement element;
if (_codeElementTable.TryGetValue(nodeKey, out element))
EnvDTE.CodeElement codeElement;
if (_codeElementTable.TryGetValue(nodeKey, out codeElement))
{
var previousElementImpl = ComAggregate.TryGetManagedObject<AbstractCodeElement>(element);
if (previousElementImpl.IsValidNode())
var element = ComAggregate.TryGetManagedObject<AbstractCodeElement>(codeElement);
if (element.IsValidNode())
{
if (element is T)
if (codeElement is T)
{
return (T)element;
}
else
{
Debug.Fail("Called asked for the wrong type!");
throw new InvalidOperationException();
return (T)codeElement;
}
throw new InvalidOperationException($"Found a valid code element for {nodeKey}, but it is not of type, {typeof(T).ToString()}");
}
else
{
// This guy is no longer valid, so yank it out. No sense
// continuing to look for a match, either.
RemoveElement(nodeKey);
_codeElementTable.Remove(nodeKey);
}
}
}
......
......@@ -28,7 +28,7 @@ public sealed class CodeClass : AbstractCodeType, EnvDTE.CodeClass, EnvDTE80.Cod
var element = new CodeClass(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeClass)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -20,7 +20,7 @@ public sealed partial class CodeDelegate : AbstractCodeType, ICodeElementContain
var element = new CodeDelegate(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeDelegate)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -18,7 +18,7 @@ public sealed partial class CodeEnum : AbstractCodeType, EnvDTE.CodeEnum
var element = new CodeEnum(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeEnum)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -21,7 +21,7 @@ public sealed partial class CodeEvent : AbstractCodeMember, EnvDTE80.CodeEvent
var element = new CodeEvent(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE80.CodeEvent)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -24,7 +24,7 @@ public partial class CodeFunction : AbstractCodeMember, ICodeElementContainer<Co
var element = new CodeFunction(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeFunction)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -23,7 +23,7 @@ public sealed class CodeFunctionDeclareDecl : CodeFunction
var element = new CodeFunctionDeclareDecl(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeFunction)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -18,7 +18,7 @@ public sealed class CodeFunctionWithEventHandler : CodeFunction, Interop.IEventH
var element = new CodeFunctionWithEventHandler(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeFunction)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -19,7 +19,7 @@ public sealed class CodeInterface : AbstractCodeType, EnvDTE.CodeInterface, EnvD
var element = new CodeInterface(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeInterface)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -23,7 +23,7 @@ public sealed class CodeNamespace : AbstractKeyedCodeElement, EnvDTE.CodeNamespa
var element = new CodeNamespace(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeNamespace)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -22,7 +22,7 @@ public sealed partial class CodeProperty : AbstractCodeMember, ICodeElementConta
var element = new CodeProperty(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeProperty)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -20,7 +20,7 @@ public sealed class CodeStruct : AbstractCodeType, EnvDTE.CodeStruct, EnvDTE80.C
var element = new CodeStruct(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeStruct)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
......@@ -20,7 +20,7 @@ public sealed class CodeVariable : AbstractCodeMember, EnvDTE.CodeVariable, EnvD
var element = new CodeVariable(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeVariable)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
fileCodeModel.OnCodeElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册