Browse Source

Fixed some completion unit tests.

pull/32/merge
Mike Krüger 13 years ago
parent
commit
1bac9a1ca5
  1. 16
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 2
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
  3. 1059
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs
  4. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay
  5. 1
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs
  6. 3
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Bugs/ParserBugTests.cs

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

@ -282,7 +282,19 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -282,7 +282,19 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (p != null) {
var contextList = new CompletionDataWrapper(this);
var initializerResult = ResolveExpression(p);
if (initializerResult != null && initializerResult.Item1.Type.Kind != TypeKind.Unknown) {
IType initializerType = null;
if (initializerResult.Item1 is DynamicInvocationResolveResult) {
var dr = (DynamicInvocationResolveResult)initializerResult.Item1;
var constructor = (dr.Target as MethodGroupResolveResult).Methods.FirstOrDefault();
if (constructor != null)
initializerType = constructor.DeclaringType;
} else {
initializerType = initializerResult != null ? initializerResult.Item1.Type : null;
}
if (initializerType != null && initializerType.Kind != TypeKind.Unknown) {
// check 3 cases:
// 1) New initalizer { xpr
// 2) Object initializer { prop = val1, field = val2, xpr
@ -302,11 +314,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -302,11 +314,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return contextList.Result;
}
var lookup = new MemberLookup(ctx.CurrentTypeDefinition, Compilation.MainAssembly);
var initializerType = initializerResult.Item1.Type;
bool isProtectedAllowed = ctx.CurrentTypeDefinition != null && initializerType.GetDefinition() != null ?
ctx.CurrentTypeDefinition.IsDerivedFrom(initializerType.GetDefinition()) :
false;
foreach (var m in initializerType.GetMembers (m => m.EntityType == EntityType.Field)) {
var f = m as IField;
if (f != null && (f.IsReadOnly || f.IsConst))

2
ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs

@ -361,8 +361,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -361,8 +361,6 @@ namespace ICSharpCode.NRefactory.CSharp
// optional comma
if (loc != null && pos < loc.Count - 1 && loc.Count == locCount + 1)
result.AddChild (new CSharpTokenNode (Convert (loc [pos++]), Roles.Comma), Roles.Comma);
foreach (var l in loc)
Console.WriteLine( Convert (l));
if (loc != null && pos < loc.Count)
result.AddChild (new CSharpTokenNode (Convert (loc [pos++]), Roles.RBracket), Roles.RBracket);
return result;

1059
ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs

File diff suppressed because it is too large Load Diff

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay

@ -2638,6 +2638,7 @@ incomplete_member @@ -2638,6 +2638,7 @@ incomplete_member
FullNamedExpression type = (FullNamedExpression) $3;
current_field = new Field (current_type, type, (Modifiers) $2, MemberName.Null, (Attributes) $1);
current_type.AddField (current_field);
lbag.AddMember (current_field, GetModifierLocations ());
$$ = current_field;
}
;

1
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs

@ -649,7 +649,6 @@ class C : S @@ -649,7 +649,6 @@ class C : S
/// <summary>
/// Bug 9910 - Completion not working in object initializer
/// </summary>
[Ignore("FIX ME !")]
[Test]
public void TestBug9910()
{

3
ICSharpCode.NRefactory.Tests/CSharp/Parser/Bugs/ParserBugTests.cs

@ -36,9 +36,8 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Bugs @@ -36,9 +36,8 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Bugs
/// <summary>
/// Bug 4252 - override bug in mcs ast
/// </summary>
[Ignore("Still open 03/2013")]
[Test]
public void TestBug4242()
public void TestBug4252()
{
string code = @"
class Foo

Loading…
Cancel
Save