Browse Source

Merge remote-tracking branch 'upstream/master' into mansheng

newNRvisualizers
Mansheng Yang 14 years ago
parent
commit
8426277ae0
  1. 16
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 30
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs
  3. 6
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/PrimitiveExpressionTests.cs

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

@ -212,6 +212,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -212,6 +212,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
resolveResult.Item2
);
}
return CreateCompletionData(
location,
resolveResult.Item1,
@ -312,11 +314,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -312,11 +314,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
case '>':
if (!IsInsideDocComment()) {
if (offset > 2 && document.GetCharAt (offset - 2) == '-' && !IsInsideCommentStringOrDirective()) {
return HandleMemberReferenceCompletion(GetExpressionBeforeCursor());
}
return null;
}
string lineText = document.GetText(document.GetLineByNumber(location.Line));
int startIndex = Math.Min(location.Column - 1, lineText.Length - 1);
while (startIndex >= 0 && lineText [startIndex] != '<') {
--startIndex;
if (lineText [startIndex] == '/') {
@ -2293,6 +2297,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2293,6 +2297,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
IType type = resolveResult.Type;
if (resolvedNode.Parent is PointerReferenceExpression && (type is PointerType)) {
type = ((PointerType)type).ElementType;
}
//var typeDef = resolveResult.Type.GetDefinition();
var result = new CompletionDataWrapper(this);
bool includeStaticMembers = false;
@ -2525,7 +2533,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2525,7 +2533,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
baseUnit = ParseStub("a", false);
var curNode = baseUnit.GetNodeAt(location);
// hack for local variable declaration missing ';' issue - remove that if it works.
if (curNode is EntityDeclaration || baseUnit.GetNodeAt<Expression>(location) == null && baseUnit.GetNodeAt<MemberType>(location) == null) {
baseUnit = ParseStub("a");
@ -2550,6 +2557,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2550,6 +2557,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (type != null) {
return new ExpressionResult((AstNode)type.Target, baseUnit);
}
var pref = baseUnit.GetNodeAt<PointerReferenceExpression>(location);
if (pref != null) {
return new ExpressionResult((AstNode)pref.Target, baseUnit);
}
}
AstNode expr = null;
if (mref != null) {

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

@ -5296,5 +5296,35 @@ static class Ext @@ -5296,5 +5296,35 @@ static class Ext
});
}
/// <summary>
/// Bug 5404 - Completion and highlighting for pointers
/// </summary>
[Test()]
public void TestBug5404()
{
CombinedProviderTest(
@"using System;
namespace TestConsole
{
unsafe class MainClass
{
public int i = 5, j =19;
public static void Main (string[] args)
{
MainClass* mc;
$mc->$
}
}
}
", provider => {
Assert.IsNotNull(provider.Find("i"), "'i' not found.");
});
}
}
}

6
ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/PrimitiveExpressionTests.cs

@ -145,9 +145,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -145,9 +145,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
public void InvalidHexadecimalInteger()
{
// don't check result, just make sure there is no exception
ParseUtilCSharp.ParseExpression<PrimitiveExpression>("0x2GF", expectErrors: true);
ParseUtilCSharp.ParseExpression<PrimitiveExpression>("0xG2F", expectErrors: true);
ParseUtilCSharp.ParseExpression<PrimitiveExpression>("0x", expectErrors: true); // SD-457
ParseUtilCSharp.ParseExpression<ICSharpCode.NRefactory.CSharp.Expression>("0x2GF", expectErrors: true);
ParseUtilCSharp.ParseExpression<ICSharpCode.NRefactory.CSharp.Expression>("0xG2F", expectErrors: true);
ParseUtilCSharp.ParseExpression<ICSharpCode.NRefactory.CSharp.Expression>("0x", expectErrors: true); // SD-457
// hexadecimal integer >ulong.MaxValue
ParseUtilCSharp.ParseExpression<PrimitiveExpression>("0xfedcba98765432100", expectErrors: true);
}

Loading…
Cancel
Save