Browse Source

[Completion] It's no longer needed to specify a parsed file for the

completion engine.
newNRvisualizers
Mike Krüger 14 years ago
parent
commit
6cbda46563
  1. 22
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 10
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
  3. 2
      ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
  4. 11
      ICSharpCode.NRefactory.CSharp/Completion/IMemberProvider.cs
  5. 4
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs
  6. 2
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ParameterCompletionTests.cs

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

@ -57,7 +57,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -57,7 +57,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
public bool CloseOnSquareBrackets;
#endregion
public CSharpCompletionEngine(IDocument document, IMemberProvider memberProvider, ICompletionDataFactory factory, IProjectContent content, CSharpTypeResolveContext ctx, CSharpParsedFile parsedFile) : base (content, memberProvider, ctx, parsedFile)
public CSharpCompletionEngine(IDocument document, IMemberProvider memberProvider, ICompletionDataFactory factory, IProjectContent content, CSharpTypeResolveContext ctx) : base (content, memberProvider, ctx)
{
if (document == null) {
throw new ArgumentNullException("document");
@ -882,11 +882,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -882,11 +882,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (n.Parent is ICSharpCode.NRefactory.CSharp.Attribute) {
nodes.Add(n.Parent);
}
var astResolver = new CSharpAstResolver(
csResolver,
identifierStart.Unit,
CSharpParsedFile
);
var astResolver = MemberProvider.GetResolver (csResolver, identifierStart.Unit);
astResolver.ApplyNavigator(new NodeListResolveVisitorNavigator(nodes));
try {
csResolver = astResolver.GetResolverStateBefore(n);
@ -1282,7 +1278,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1282,7 +1278,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var root = node;
while (root.Parent != null)
root = root.Parent;
var astResolver = new CSharpAstResolver(state, root, CSharpParsedFile);
var astResolver = MemberProvider.GetResolver (state, root);
foreach (var type in CreateFieldAction.GetValidTypes(astResolver, (Expression)node)) {
if (type.Kind == TypeKind.Enum) {
AddEnumMembers(wrapper, type, state);
@ -1657,11 +1653,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1657,11 +1653,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var expressionOrVariableDeclaration = GetNewExpressionAt(j);
if (expressionOrVariableDeclaration == null)
return null;
var astResolver = new CSharpAstResolver(
GetState(),
expressionOrVariableDeclaration.Unit,
CSharpParsedFile
);
var astResolver = MemberProvider.GetResolver(GetState(), expressionOrVariableDeclaration.Unit);
hintType = CreateFieldAction.GetValidTypes(
astResolver,
expressionOrVariableDeclaration.Node as Expression
@ -2143,11 +2135,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2143,11 +2135,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var exprParent = resolvedNode.GetParent<Expression>();
var unit = exprParent != null ? exprParent.GetParent<CompilationUnit>() : null;
var astResolver = unit != null ? new CSharpAstResolver(
state,
unit,
CSharpParsedFile
) : null;
var astResolver = unit != null ? MemberProvider.GetResolver(state, unit) : null;
IType hintType = exprParent != null && astResolver != null ?
CreateFieldAction.GetValidTypes(astResolver, exprParent) .FirstOrDefault() :
null;

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

@ -51,8 +51,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -51,8 +51,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
#region Input properties
public CSharpTypeResolveContext ctx { get; private set; }
public CSharpParsedFile CSharpParsedFile { get; private set; }
public IProjectContent ProjectContent { get; private set; }
ICompilation compilation;
@ -66,21 +64,18 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -66,21 +64,18 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
#endregion
protected CSharpCompletionEngineBase(IProjectContent content, IMemberProvider memberProvider, CSharpTypeResolveContext ctx, CSharpParsedFile parsedFile)
protected CSharpCompletionEngineBase(IProjectContent content, IMemberProvider memberProvider, CSharpTypeResolveContext ctx)
{
if (content == null)
throw new ArgumentNullException("content");
if (ctx == null)
throw new ArgumentNullException("ctx");
if (parsedFile == null)
throw new ArgumentNullException("parsedFile");
if (memberProvider == null)
throw new ArgumentNullException("memberProvider");
this.ProjectContent = content;
this.MemberProvider = memberProvider;
this.ctx = ctx;
this.CSharpParsedFile = parsedFile;
}
@ -802,12 +797,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -802,12 +797,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
resolveNode = expr;
}
try {
var ctx = GetState ();
var root = expr.AncestorsAndSelf.FirstOrDefault(n => n is EntityDeclaration || n is CompilationUnit);
if (root == null) {
return null;
}
var csResolver = new CSharpAstResolver (ctx, root, CSharpParsedFile);
var csResolver = MemberProvider.GetResolver (GetState(), root);
var result = csResolver.Resolve(resolveNode);
var state = csResolver.GetResolverStateBefore(resolveNode);
return Tuple.Create(result, state);

2
ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs

@ -39,7 +39,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -39,7 +39,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
{
internal IParameterCompletionDataFactory factory;
public CSharpParameterCompletionEngine(IDocument document, IMemberProvider memberProvider, IParameterCompletionDataFactory factory, IProjectContent content, CSharpTypeResolveContext ctx, CSharpParsedFile parsedFile) : base (content, memberProvider, ctx, parsedFile)
public CSharpParameterCompletionEngine(IDocument document, IMemberProvider memberProvider, IParameterCompletionDataFactory factory, IProjectContent content, CSharpTypeResolveContext ctx) : base (content, memberProvider, ctx)
{
if (document == null) {
throw new ArgumentNullException("document");

11
ICSharpCode.NRefactory.CSharp/Completion/IMemberProvider.cs

@ -29,6 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; @@ -29,6 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.CSharp.TypeSystem;
using System.Linq;
using ICSharpCode.NRefactory.CSharp.Resolver;
namespace ICSharpCode.NRefactory.CSharp.Completion
{
@ -37,6 +38,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -37,6 +38,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
void GetCurrentMembers (int offset, out IUnresolvedTypeDefinition currentType, out IUnresolvedMember currentMember);
Tuple<string, TextLocation> GetMemberTextToCaret(int caretOffset, IUnresolvedTypeDefinition currentType, IUnresolvedMember currentMember);
CSharpAstResolver GetResolver (CSharpResolver resolver, AstNode rootNode);
}
public class DefaultMemberProvider : IMemberProvider
@ -182,7 +185,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -182,7 +185,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return Tuple.Create (document.GetText (startOffset, caretOffset - startOffset), document.GetLocation (startOffset));
}
public CSharpAstResolver GetResolver (CSharpResolver resolver, AstNode rootNode)
{
return new CSharpAstResolver (resolver, rootNode, parsedFile);
}
}
}

4
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -240,7 +240,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -240,7 +240,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
}
}
var mb = new DefaultMemberProvider(doc, parsedFile);
var engine = new CSharpCompletionEngine (doc, mb, new TestFactory (), pctx, rctx, parsedFile);
var engine = new CSharpCompletionEngine (doc, mb, new TestFactory (), pctx, rctx);
engine.EolMarker = Environment.NewLine;
engine.FormattingPolicy = FormattingOptionsFactory.CreateMono ();
@ -266,7 +266,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -266,7 +266,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
var cmp = pctx.CreateCompilation();
var mb = new DefaultMemberProvider(doc, parsedFile);
var engine = new CSharpCompletionEngine (doc, mb, new TestFactory (), pctx, new CSharpTypeResolveContext (cmp.MainAssembly), parsedFile);
var engine = new CSharpCompletionEngine (doc, mb, new TestFactory (), pctx, new CSharpTypeResolveContext (cmp.MainAssembly));
engine.EolMarker = Environment.NewLine;
engine.FormattingPolicy = FormattingOptionsFactory.CreateMono ();
return Tuple.Create (doc, engine);

2
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ParameterCompletionTests.cs

@ -292,7 +292,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -292,7 +292,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
}
}
var mb = new DefaultMemberProvider(doc, parsedFile);
var engine = new CSharpParameterCompletionEngine (doc, mb, new TestFactory (pctx), pctx, rctx, parsedFile);
var engine = new CSharpParameterCompletionEngine (doc, mb, new TestFactory (pctx), pctx, rctx);
return engine.GetParameterDataProvider (cursorPosition, doc.GetCharAt (cursorPosition - 1));
}

Loading…
Cancel
Save