Browse Source

Fixed stub mechanic.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
c51a5f6222
  1. 11
      ICSharpCode.NRefactory.CSharp/Ast/AstNode.cs
  2. 1
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  3. 61
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
  4. 2
      ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs

11
ICSharpCode.NRefactory.CSharp/Ast/AstNode.cs

@ -273,6 +273,17 @@ namespace ICSharpCode.NRefactory.CSharp
} }
} }
/// <summary>
/// Gets the ancestors of this node (including this node itself)
/// </summary>
public IEnumerable<AstNode> AncestorsAndSelf {
get {
for (AstNode cur = this; cur != null; cur = cur.parent) {
yield return cur;
}
}
}
/// <summary> /// <summary>
/// Gets all descendants of this node (excluding this node itself). /// Gets all descendants of this node (excluding this node itself).
/// </summary> /// </summary>

1
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -478,6 +478,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var contextList = new CompletionDataWrapper (this); var contextList = new CompletionDataWrapper (this);
var identifierStart = GetExpressionAtCursor(); var identifierStart = GetExpressionAtCursor();
if (identifierStart != null && identifierStart.Node is TypeParameterDeclaration) { if (identifierStart != null && identifierStart.Node is TypeParameterDeclaration) {
return null; return null;
} }

61
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs

@ -429,18 +429,36 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var wrapper = new StringBuilder (); var wrapper = new StringBuilder ();
bool wrapInClass = memberLocation != new TextLocation (1, 1); bool wrapInClass = memberLocation != new TextLocation (1, 1);
if (wrapInClass) { if (wrapInClass) {
/* foreach (var child in Unit.Children) { var nodeAtLocation = Unit.GetNodeAt(memberLocation, n => n is TypeDeclaration || n is NamespaceDeclaration);
if (child is UsingDeclaration) { foreach (var n in nodeAtLocation.AncestorsAndSelf) {
var offset = document.GetOffset (child.StartLocation); if (memberLocation == n.StartLocation) {
wrapper.Append (document.GetText (offset, document.GetOffset (child.EndLocation) - offset)); continue;
} }
}*/ if (n is TypeDeclaration) {
wrapper.Append("class Stub {"); var t = (TypeDeclaration)n;
switch (t.ClassType) {
case ClassType.Class:
wrapper.Append("class");
break;
case ClassType.Struct:
wrapper.Append("struct");
break;
case ClassType.Interface:
wrapper.Append("interface");
break;
case ClassType.Enum:
wrapper.Append("enum");
break;
}
wrapper.Append(" " + t.Name + " {");
wrapper.AppendLine(); wrapper.AppendLine();
closingBrackets++; closingBrackets++;
generatedLines = 1; generatedLines++;
} else {
Console.WriteLine(n);
}
}
} }
wrapper.Append(memberText); wrapper.Append(memberText);
wrapper.Append(continuation); wrapper.Append(continuation);
AppendMissingClosingBrackets(wrapper, memberText, appendSemicolon); AppendMissingClosingBrackets(wrapper, memberText, appendSemicolon);
@ -486,7 +504,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
--startOffset; --startOffset;
} }
startOffset = 0;
if (cachedText == null) if (cachedText == null)
cachedText = document.GetText (startOffset, offset - startOffset); cachedText = document.GetText (startOffset, offset - startOffset);
@ -552,10 +569,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return ResolveExpression (tuple.Node, tuple.Unit); return ResolveExpression (tuple.Node, tuple.Unit);
} }
protected Tuple<ResolveResult, CSharpResolver> ResolveExpression (AstNode expr, CompilationUnit unit) protected Tuple<ResolveResult, CSharpResolver> ResolveExpression(AstNode expr, CompilationUnit unit)
{ {
if (expr == null) if (expr == null) {
return null; return null;
}
AstNode resolveNode; AstNode resolveNode;
if (expr is Expression || expr is AstType) { if (expr is Expression || expr is AstType) {
resolveNode = expr; resolveNode = expr;
@ -565,19 +583,19 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
resolveNode = expr; resolveNode = expr;
} }
try { try {
var csResolver = new CSharpAstResolver (GetState (), unit, CSharpParsedFile); var ctx = CSharpParsedFile.GetResolver(Compilation, location);
var result = csResolver.Resolve (resolveNode); var root = expr.AncestorsAndSelf.FirstOrDefault(n => n is EntityDeclaration || n is CompilationUnit);
var state = csResolver.GetResolverStateBefore (resolveNode); if (root == null) {
return Tuple.Create (result, state);
} catch (Exception) {
return null; return null;
} }
var csResolver = new CSharpAstResolver (ctx, root, CSharpParsedFile);
var result = csResolver.Resolve(resolveNode);
var state = csResolver.GetResolverStateBefore(resolveNode);
return Tuple.Create(result, state);
} catch (Exception e) {
Console.WriteLine(e);
return null;
} }
protected static void Print (AstNode node)
{
var v = new CSharpOutputVisitor (Console.Out, new CSharpFormattingOptions ());
node.AcceptVisitor (v);
} }
#endregion #endregion
@ -703,5 +721,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
} }
} }
} }

2
ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs

@ -159,7 +159,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
return null; return null;
} }
public CSharpTypeResolveContext GetTypeResolveContext (ICompilation compilation, TextLocation loc) public CSharpTypeResolveContext GetTypeResolveContext(ICompilation compilation, TextLocation loc)
{ {
var rctx = new CSharpTypeResolveContext (compilation.MainAssembly); var rctx = new CSharpTypeResolveContext (compilation.MainAssembly);
rctx = rctx.WithUsingScope (GetUsingScope (loc).Resolve (compilation)); rctx = rctx.WithUsingScope (GetUsingScope (loc).Resolve (compilation));

Loading…
Cancel
Save