Browse Source

Fixed failing unit test.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
93bea6d4d1
  1. 23
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 6
      ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
  3. 11
      ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
  4. 125
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

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

@ -307,12 +307,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -307,12 +307,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
case "=":
case "==":
GetPreviousToken (ref tokenIndex, false);
var expressionOrVariableDeclaration = GetExpressionAt (tokenIndex);
if (expressionOrVariableDeclaration == null)
return null;
resolveResult = ResolveExpression (expressionOrVariableDeclaration.Item1, expressionOrVariableDeclaration.Item2, expressionOrVariableDeclaration.Item3);
if (resolveResult == null)
return null;
if (resolveResult.Item1.Type.Kind == TypeKind.Enum) {
@ -510,6 +510,27 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -510,6 +510,27 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
}
if (n is IdentifierExpression) {
var bop = n.Parent as BinaryOperatorExpression;
Expression evaluationExpr = null;
if (bop != null && bop.Right == n && (bop.Operator == BinaryOperatorType.Equality || bop.Operator == BinaryOperatorType.InEquality)) {
evaluationExpr = bop.Left;
}
// check for compare to enum case
if (evaluationExpr != null) {
resolveResult = ResolveExpression (identifierStart.Item1, evaluationExpr, identifierStart.Item3);
if (resolveResult != null && resolveResult.Item1.Type.Kind == TypeKind.Enum) {
var wrapper = new CompletionDataWrapper (this);
AddContextCompletion (wrapper, resolveResult.Item2, evaluationExpr);
AddEnumMembers (wrapper, resolveResult.Item1.Type, resolveResult.Item2);
AutoCompleteEmptyMatch = false;
return wrapper.Result;
}
}
}
if (n is Identifier && n.Parent is ForeachStatement) {
if (controlSpace)
return DefaultControlSpaceItems ();

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

@ -195,11 +195,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -195,11 +195,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
invoke = GetTypeBeforeCursor ();
if (invoke == null)
return null;
var typeExpression = ResolveExpression (invoke.Item1, invoke.Item2, invoke.Item3);
if (typeExpression == null || typeExpression.Item1 == null || typeExpression.Item1.IsError)
var tExpr = ResolveExpression (invoke.Item1, invoke.Item2, invoke.Item3);
if (tExpr == null || tExpr.Item1 == null || tExpr.Item1.IsError)
return null;
return factory.CreateTypeParameterDataProvider (CollectAllTypes (typeExpression.Item1.Type));
return factory.CreateTypeParameterDataProvider (CollectAllTypes (tExpr.Item1.Type));
case '[':
invoke = GetIndexerBeforeCursor ();
if (invoke == null)

11
ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs

@ -190,6 +190,17 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -190,6 +190,17 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
MemberType result = new MemberType();
if (typeDef.DeclaringTypeDefinition != null) {
// check if the declaring type is a nested type in the nested type hierarchy
var declaringType = resolver.CurrentTypeDefinition;
while (declaringType != null) {
if (typeDef.DeclaringTypeDefinition.Equals (declaringType)) {
var innerType = new SimpleType(typeDef.Name);
AddTypeArguments(innerType, typeArguments, outerTypeParameterCount, typeDef.TypeParameterCount);
return innerType;
}
declaringType = declaringType.DeclaringTypeDefinition;
}
// Handle nested types
result.Target = ConvertTypeHelper(typeDef.DeclaringTypeDefinition, typeArguments);
} else {

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

@ -25,7 +25,6 @@ @@ -25,7 +25,6 @@
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;
using System.Collections.Generic;
using System.IO;
@ -41,7 +40,6 @@ using System.Diagnostics; @@ -41,7 +40,6 @@ using System.Diagnostics;
using System.Text;
using ICSharpCode.NRefactory.CSharp.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
{
[TestFixture()]
@ -70,9 +68,11 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -70,9 +68,11 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
act (provider);
}
class TestFactory : ICompletionDataFactory
class TestFactory
: ICompletionDataFactory
{
class CompletionData : ICompletionData
class CompletionData
: ICompletionData
{
#region ICompletionData implementation
public void AddOverload (ICompletionData data)
@ -305,7 +305,8 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -305,7 +305,8 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
Assert.IsNotNull (provider.Find ("ReferenceEquals"), "Method 'System.Object.ReferenceEquals' not found.");
}
class TestLocVisitor : ICSharpCode.NRefactory.CSharp.DepthFirstAstVisitor<object, object>
class TestLocVisitor
: ICSharpCode.NRefactory.CSharp.DepthFirstAstVisitor<object, object>
{
public List<Tuple<TextLocation, string>> output = new List<Tuple<TextLocation, string>> ();
@ -331,7 +332,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -331,7 +332,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
int exceptions = 0;
int i = 0;
foreach (var file in Directory.EnumerateFiles ("/Users/mike/work/mono/mcs/tests", "*.cs")) {
if (i++>2)
if (i++ > 2)
break;
if (i <= 2)
continue;
@ -352,7 +353,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -352,7 +353,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
}
}
} catch (Exception e) {
Console.WriteLine ("Exception in:" +file);
Console.WriteLine ("Exception in:" + file);
exceptions++;
}
}
@ -362,7 +363,6 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -362,7 +363,6 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
if (missing > 0)
Assert.Fail ();
}
[Test()]
public void TestSimpleCodeCompletion ()
@ -384,6 +384,7 @@ void TestMethod () @@ -384,6 +384,7 @@ void TestMethod ()
Assert.IsNotNull (provider.Find ("TM2"));
Assert.IsNotNull (provider.Find ("TF1"));
}
[Test()]
public void TestSimpleInterfaceCodeCompletion ()
{
@ -1680,7 +1681,6 @@ class A @@ -1680,7 +1681,6 @@ class A
});
}
[Test()]
public void TestBug2800B ()
{
@ -1717,6 +1717,48 @@ class A @@ -1717,6 +1717,48 @@ class A
});
}
/// <summary>
/// Bug 2798 - Unnecessary namespace qualification being prepended
/// </summary>
[Test()]
public void Test2798 ()
{
CombinedProviderTest (
@"
using System;
namespace Foobar
{
class MainClass
{
public enum Foo
{
Value1,
Value2
}
public class Test
{
Foo Foo {
get; set;
}
public static void Method (Foo foo)
{
$if (foo == F$
}
}
}
}
", provider => {
Assert.IsNull (provider.Find ("MainClass.Foo"), "'MainClass.Foo' found.");
Assert.IsNotNull (provider.Find ("Foo"), "'Foo' not found.");
Assert.IsNotNull (provider.Find ("Foo.Value1"), "'Foo.Value1' not found.");
Assert.IsNotNull (provider.Find ("Foo.Value2"), "'Foo.Value2' not found.");
});
}
/// <summary>
/// Bug 2799 - No completion offered when declaring fields in a class
/// </summary>
@ -1747,8 +1789,6 @@ class A @@ -1747,8 +1789,6 @@ class A
});
}
[Test()]
public void TestNewInConstructor ()
{
@ -1920,7 +1960,7 @@ class Test @@ -1920,7 +1960,7 @@ class Test
");
Assert.IsNotNull (provider, "provider not found.");
Assert.AreEqual (1, provider.OverloadCount, "There should be one overload");
Assert.AreEqual (1, provider.GetParameterCount(0), "Parameter 'test' should exist");
Assert.AreEqual (1, provider.GetParameterCount (0), "Parameter 'test' should exist");
}
/// <summary>
@ -2374,7 +2414,7 @@ class MyClass2 @@ -2374,7 +2414,7 @@ class MyClass2
[Test()]
public void TestBug542976 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
class KeyValuePair<S, T>
{
@ -2424,7 +2464,7 @@ namespace TestMe @@ -2424,7 +2464,7 @@ namespace TestMe
[Test()]
public void TestBug545189A ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
public class A<T>
{
@ -2453,7 +2493,7 @@ public class Foo @@ -2453,7 +2493,7 @@ public class Foo
[Test()]
public void TestBug549864 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
delegate T MyFunc<S, T> (S t);
@ -2482,7 +2522,7 @@ class TestClass @@ -2482,7 +2522,7 @@ class TestClass
[Test()]
public void TestBug550185 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
public interface IMyinterface<T> {
T Foo ();
@ -2516,7 +2556,7 @@ class TestClass @@ -2516,7 +2556,7 @@ class TestClass
[Test()]
public void TestBug553101 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
namespace Some.Type
{
@ -2545,7 +2585,7 @@ namespace Test @@ -2545,7 +2585,7 @@ namespace Test
[Test()]
public void TestBug555523A ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
class A
{
@ -2592,7 +2632,7 @@ class MainClass @@ -2592,7 +2632,7 @@ class MainClass
[Test()]
public void TestBug555523B ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
class A
{
@ -2640,7 +2680,7 @@ class MainClass @@ -2640,7 +2680,7 @@ class MainClass
[Test()]
public void TestBug561964 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
interface A1 {
int A { get; }
@ -2675,7 +2715,7 @@ class Foo : IFoo @@ -2675,7 +2715,7 @@ class Foo : IFoo
[Test()]
public void TestBug568204 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
public class Style
{
@ -2710,7 +2750,7 @@ public class Foo @@ -2710,7 +2750,7 @@ public class Foo
[Test()]
public void TestBug577225 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
using Foo;
@ -2752,7 +2792,7 @@ namespace Other @@ -2752,7 +2792,7 @@ namespace Other
[Test()]
public void TestBug582017 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
class Bar
{
@ -2779,7 +2819,7 @@ class Foo @@ -2779,7 +2819,7 @@ class Foo
[Test()]
public void TestBug586304 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
using System;
using System.Collections.Generic;
@ -2821,7 +2861,7 @@ public class Test @@ -2821,7 +2861,7 @@ public class Test
[Test()]
public void TestBug586304B ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
public delegate S Func<T, S> (T t);
@ -2861,7 +2901,7 @@ class MyClass @@ -2861,7 +2901,7 @@ class MyClass
[Test()]
public void TestBug587543 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
interface ITest
{
@ -2887,7 +2927,7 @@ class C @@ -2887,7 +2927,7 @@ class C
[Test()]
public void TestBug587549 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
public interface ITest
{
@ -2925,7 +2965,7 @@ public class PrinterImpl : Printer @@ -2925,7 +2965,7 @@ public class PrinterImpl : Printer
[Test()]
public void TestBug588223 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
class Lazy<T> { public void Foo () {} }
class Lazy<T, S> { public void Bar () {} }
@ -2965,7 +3005,7 @@ class Test @@ -2965,7 +3005,7 @@ class Test
[Test()]
public void TestBug592120 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
interface IBar
@ -2995,7 +3035,7 @@ class Foo @@ -2995,7 +3035,7 @@ class Foo
[Test()]
public void TestBug576354 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
delegate T Func<S, T> (S s);
@ -3038,7 +3078,7 @@ class MyTest @@ -3038,7 +3078,7 @@ class MyTest
[Test()]
public void TestBug534680 ()
{
CompletionDataList provider = CreateCtrlSpaceProvider (
CompletionDataList provider = CreateCtrlSpaceProvider (
@"
class Foo
{
@ -3058,7 +3098,7 @@ class Foo @@ -3058,7 +3098,7 @@ class Foo
[Test()]
public void TestBug610006 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
class MainClass
{
@ -3083,7 +3123,7 @@ class MainClass @@ -3083,7 +3123,7 @@ class MainClass
[Test()]
public void TestBug614045 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"
namespace A
{
@ -3122,7 +3162,7 @@ namespace B @@ -3122,7 +3162,7 @@ namespace B
[Test()]
public void TestBug615992 ()
{
CompletionDataList provider = CreateProvider (
CompletionDataList provider = CreateProvider (
@"public delegate void Act<T> (T t);
public class Foo
@ -3772,7 +3812,7 @@ public class Test @@ -3772,7 +3812,7 @@ public class Test
");
Assert.IsNotNull (provider, "provider not found.");
Assert.IsNotNull (provider.Find ("SomeMethod"), "method 'SomeMethod' not found.");
}
}
/// <summary>
/// Bug 678340 - Cannot infer types from Dictionary<K,V>.Values
/// </summary>
@ -4096,7 +4136,7 @@ namespace ConsoleProject @@ -4096,7 +4136,7 @@ namespace ConsoleProject
", provider => {
Assert.IsNotNull (provider.Find ("ArgsNum"), "property 'ArgsNum' not found.");
});
}
}
[Test()]
public void TestParameterContext ()
@ -4126,7 +4166,6 @@ public class TestMe @@ -4126,7 +4166,6 @@ public class TestMe
Assert.IsTrue (provider == null || provider.Count == 0, "provider should be empty.");
}
[Test()]
public void TestParameterContextNameProposal ()
{
@ -4283,17 +4322,17 @@ class Test @@ -4283,17 +4322,17 @@ class Test
var list = new List<CompletionCategory> ();
for (int i = 0; i < provider.Count; i++) {
if (list.Contains (provider[i].CompletionCategory))
if (list.Contains (provider [i].CompletionCategory))
continue;
list.Add (provider[i].CompletionCategory);
list.Add (provider [i].CompletionCategory);
}
Assert.AreEqual (4, list.Count);
list.Sort ();
Assert.AreEqual ("CClass", list[0].DisplayText);
Assert.AreEqual ("BClass", list[1].DisplayText);
Assert.AreEqual ("AClass", list[2].DisplayText);
Assert.AreEqual ("System.Object", list[3].DisplayText);
Assert.AreEqual ("CClass", list [0].DisplayText);
Assert.AreEqual ("BClass", list [1].DisplayText);
Assert.AreEqual ("AClass", list [2].DisplayText);
Assert.AreEqual ("System.Object", list [3].DisplayText);
}
[Test()]

Loading…
Cancel
Save