Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2011-11-03 18:39:01 +0400
committerMike Krüger <mkrueger@xamarin.com>2011-11-03 18:39:01 +0400
commit08ee6c202fd254c800c60452047e5b126491c790 (patch)
tree16ad5c9370a5071cf286885d02370e046e2f29e4 /main/contrib
parentaa5abfa76f25949e8ba0769385ad4db39c34a996 (diff)
[NRefactory] Synced with nrefactory.
Diffstat (limited to 'main/contrib')
-rw-r--r--main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs63
-rw-r--r--main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs15
-rw-r--r--main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs32
-rw-r--r--main/contrib/ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs2
4 files changed, 72 insertions, 40 deletions
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
index 8882cdd848..8559dfc757 100644
--- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
+++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
@@ -44,7 +44,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
#region Additional input properties
public CSharpFormattingOptions FormattingPolicy { get; set; }
+
public string EolMarker { get; set; }
+
public string IndentString { get; set; }
#endregion
@@ -419,7 +421,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
char prevCh = offset > 2 ? document.GetCharAt (offset - 2) : '\0';
char nextCh = offset < document.TextLength ? document.GetCharAt (offset) : ' ';
- const string allowedChars = ";,[]{}+-*/%^?:&|~!<>=";
+ const string allowedChars = ";,[](){}+-*/%^?:&|~!<>=";
if (!Char.IsWhiteSpace (nextCh) && allowedChars.IndexOf (nextCh) < 0)
return null;
if (!(Char.IsWhiteSpace (prevCh) || allowedChars.IndexOf (prevCh) >= 0))
@@ -453,7 +455,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
continue;
contextList.AddMember (property);
}
- foreach (var field in initalizerResult.Item1.Type.GetFields (ctx)){
+ foreach (var field in initalizerResult.Item1.Type.GetFields (ctx)) {
if (!field.IsPublic)
continue;
contextList.AddMember (field);
@@ -630,19 +632,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
foreach (var variable in state.LocalVariables) {
wrapper.AddVariable (variable);
}
- if (state.CurrentMember is IParameterizedMember) {
- var param = (IParameterizedMember)state.CurrentMember;
+
+ if (currentMember is IParameterizedMember) {
+ var param = (IParameterizedMember)currentMember;
foreach (var p in param.Parameters) {
wrapper.AddVariable (p);
}
}
- if (state.CurrentMember is IMethod) {
- var method = (IMethod)state.CurrentMember;
+ if (currentMember is IMethod) {
+ var method = (IMethod)currentMember;
foreach (var p in method.TypeParameters) {
wrapper.AddTypeParameter (p);
}
}
+
Predicate<ITypeDefinition> typePred = null;
if (node is Attribute) {
var attribute = ctx.GetTypeDefinition ("System", "Attribute", 0, StringComparer.Ordinal);
@@ -660,7 +664,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
AddKeywords (wrapper, globalLevelKeywords);
}
- if (IsInSwitchContext(node)) {
+ if (IsInSwitchContext (node)) {
wrapper.AddCustom ("case");
wrapper.AddCustom ("default");
}
@@ -669,7 +673,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
wrapper.Result.AddRange (factory.CreateCodeTemplateCompletionData ());
}
- static bool IsInSwitchContext(AstNode node)
+ static bool IsInSwitchContext (AstNode node)
{
var n = node;
while (n != null && !(n is MemberDeclaration)) {
@@ -697,7 +701,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
}
}
- if (currentMember != null) {
+ if (currentMember != null) {
foreach (var member in currentType.Resolve (ctx).GetMembers (ctx)) {
if (memberPred == null || memberPred (member))
wrapper.AddMember (member);
@@ -751,8 +755,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var wrapper = new CompletionDataWrapper (this);
AddTypesAndNamespaces (wrapper, GetState (), null, t => false);
return wrapper.Result;
- case "case":
- return CreateCaseCompletionData (location);
+ case "case":
+ return CreateCaseCompletionData (location);
// case ",":
// case ":":
// if (result.ExpressionContext == ExpressionContext.InheritableType) {
@@ -989,11 +993,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
// }
// }
// return CreateCtrlSpaceCompletionData (completionContext, null);
-// case "if":
-// case "elif":
-// if (stateTracker.Engine.IsInsidePreprocessorDirective)
-// return GetDefineCompletionData ();
-// return null;
+ case "if":
+ case "elif":
+ if (wordStart > 0 && document.GetCharAt (wordStart - 1) == '#')
+ return factory.CreatePreProcessorDefinesCompletionData ();
+ return null;
case "yield":
var yieldDataList = new CompletionDataWrapper (this);
DefaultCompletionString = "return";
@@ -1051,6 +1055,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
return true;
}
+
string GetLineIndent (int lineNr)
{
var line = document.GetLineByNumber (lineNr);
@@ -1160,7 +1165,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (part == type)
continue;
for (int i = 0; i < methods.Count; i++) {
- var curMethod = methods[i];
+ var curMethod = methods [i];
var method = GetImplementation (partialType, curMethod);
if (method != null && !method.BodyRegion.IsEmpty) {
methods.RemoveAt (i);
@@ -1184,7 +1189,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (cur.Name == method.Name && cur.Parameters.Count == method.Parameters.Count && !cur.BodyRegion.IsEmpty) {
bool equal = true;
for (int i = 0; i < cur.Parameters.Count; i++) {
- if (!cur.Parameters[i].Type.Resolve (ctx).Equals (method.Parameters[i].Type.Resolve (ctx))) {
+ if (!cur.Parameters [i].Type.Resolve (ctx).Equals (method.Parameters [i].Type.Resolve (ctx))) {
equal = false;
break;
}
@@ -1196,7 +1201,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
}
-
static string GetNameWithParamCount (IMember member)
{
var e = member as IMethod;
@@ -1546,21 +1550,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (resolvedNode.Annotation<ObjectCreateExpression> () == null) { //tags the created expression as part of an object create expression.
foreach (var member in type.GetMembers (ctx)) {
if (!lookup.IsAccessible (member, isProtectedAllowed)) {
- // Console.WriteLine ("skip access: " + member.FullName);
+ // Console.WriteLine ("skip access: " + member.FullName);
continue;
}
if (resolvedNode is BaseReferenceExpression && member.IsAbstract)
continue;
if (!includeStaticMembers && member.IsStatic && !(resolveResult is TypeResolveResult)) {
- // Console.WriteLine ("skip static member: " + member.FullName);
+ // Console.WriteLine ("skip static member: " + member.FullName);
continue;
}
if (!member.IsStatic && (resolveResult is TypeResolveResult)) {
- // Console.WriteLine ("skip non static member: " + member.FullName);
+ // Console.WriteLine ("skip non static member: " + member.FullName);
continue;
}
- // Console.WriteLine ("add : "+ member.FullName + " --- " + member.IsStatic);
+ // Console.WriteLine ("add : "+ member.FullName + " --- " + member.IsStatic);
result.AddMember (member);
}
}
@@ -1620,6 +1624,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
}
}
+
IEnumerable<ICompletionData> CreateCaseCompletionData (TextLocation location)
{
var unit = ParseStub ("a: break;");
@@ -1677,7 +1682,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin;
var mref = baseUnit.GetNodeAt<MemberReferenceExpression> (location);
- if (mref == null){
+ if (mref == null) {
var invoke = baseUnit.GetNodeAt<InvocationExpression> (location);
if (invoke != null)
mref = invoke.Target as MemberReferenceExpression;
@@ -1690,7 +1695,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
Expression tref = baseUnit.GetNodeAt<TypeReferenceExpression> (location);
var memberType = tref != null ? ((TypeReferenceExpression)tref).Type as MemberType : null;
if (memberType == null) {
- memberType = baseUnit.GetNodeAt<MemberType> (location);
+ memberType = baseUnit.GetNodeAt<MemberType> (location);
if (memberType != null) {
tref = baseUnit.GetNodeAt<Expression> (location);
if (tref == null)
@@ -1728,7 +1733,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
memberLocation = currentMember.Region.Begin;
} else if (currentType != null) {
memberLocation = currentType.Region.Begin;
- } else {
+ } else {
memberLocation = location;
}
@@ -1809,7 +1814,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return Tuple.Create (tsvisitor.ParsedFile, expr, completionUnit);
}
-
Tuple<CSharpParsedFile, AstNode, CompilationUnit> GetNewExpressionAt (int offset)
{
var parser = new CSharpParser ();
@@ -2052,25 +2056,20 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
#region Keywords
static string[] expressionLevelKeywords = new string [] { "as", "is", "else", "out", "ref", "null", "delegate", "default"};
-
static string[] primitiveTypesKeywords = new string [] { "void", "object", "bool", "byte", "sbyte", "char", "short", "int", "long", "ushort", "uint", "ulong", "float", "double", "decimal", "string"};
-
static string[] statementStartKeywords = new string [] { "base", "new", "sizeof", "this",
"true", "false", "typeof", "checked", "unchecked", "from", "break", "checked",
"unchecked", "const", "continue", "do", "finally", "fixed", "for", "foreach",
"goto", "if", "lock", "return", "stackalloc", "switch", "throw", "try", "unsafe",
"using", "while", "yield", "dynamic", "var" };
-
static string[] globalLevelKeywords = new string [] {
"namespace", "using", "extern", "public", "internal",
"class", "interface", "struct", "enum", "delegate",
"abstract", "sealed", "static", "unsafe", "partial"
};
-
static string[] accessorModifierKeywords = new string [] {
"public", "internal", "protected", "private"
};
-
static string[] typeLevelKeywords = new string [] {
"public", "internal", "protected", "private",
"class", "interface", "struct", "enum", "delegate",
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
index 17c77582d1..9147c7cc71 100644
--- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
+++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
@@ -44,14 +44,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
protected IDocument document;
protected int offset;
protected TextLocation location;
-
protected ITypeDefinition currentType;
protected IMember currentMember;
#region Input properties
public ITypeResolveContext ctx { get; set; }
+
public CompilationUnit Unit { get; set; }
+
public CSharpParsedFile CSharpParsedFile { get; set; }
+
public IProjectContent ProjectContent { get; set; }
#endregion
@@ -70,7 +72,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
currentMember = member;
}
}
-
var stack = GetBracketStack (GetMemberTextToCaret ().Item1);
if (stack.Count == 0)
currentMember = null;
@@ -83,8 +84,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
bool inSingleComment = false, inString = false, inVerbatimString = false, inChar = false, inMultiLineComment = false;
for (int i = 0; i < text.Item1.Length - 1; i++) {
- char ch = text.Item1[i];
- char nextCh = text.Item1[i + 1];
+ char ch = text.Item1 [i];
+ char nextCh = text.Item1 [i + 1];
switch (ch) {
case '/':
@@ -257,9 +258,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
bool didAppendCatch = false;
while (o >= "try".Length) {
- char ch = memberText[o];
+ char ch = memberText [o];
if (!char.IsWhiteSpace (ch)) {
- if (ch == 'y' && memberText[o - 1] == 'r' && memberText[o - 2] == 't') {
+ if (ch == 'y' && memberText [o - 1] == 'r' && memberText [o - 2] == 't') {
wrapper.Append ("} catch {}");
didAppendCatch = true;
}
@@ -373,7 +374,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
}
- /* var member = Unit.GetNodeAt<AttributedNode> (memberLocation);
+ /* var member = Unit.GetNodeAt<AttributedNode> (memberLocation);
var member2 = baseUnit.GetNodeAt<AttributedNode> (memberLocation);
member2.Remove ();
member.ReplaceWith (member2);
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
index 6aaa6716ea..57f25b5352 100644
--- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
+++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
@@ -75,7 +75,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
SetOffset (offset);
char completionChar = document.GetCharAt (offset - 1);
- if (completionChar != '(' && completionChar != '<' && completionChar != '[')
+ if (completionChar != '(' && completionChar != '<' && completionChar != '[' && completionChar != ',')
return null;
if (IsInsideCommentOrString ())
return null;
@@ -126,7 +126,37 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
// return new NRefactoryParameterDataProvider (textEditorData, result.Expression, resolvedType);
// }
break;
+ case ',':
+ if (invoke.Item2 is ObjectCreateExpression) {
+ var createType = ResolveExpression (invoke.Item1, ((ObjectCreateExpression)invoke.Item2).Type, invoke.Item3);
+ return factory.CreateConstructorProvider (createType.Item1.Type);
+ }
+
+ if (invoke.Item2 is ICSharpCode.NRefactory.CSharp.Attribute) {
+ var attribute = ResolveExpression (invoke.Item1, invoke.Item2, invoke.Item3);
+ if (attribute == null || attribute.Item1 == null)
+ return null;
+ return factory.CreateConstructorProvider (attribute.Item1.Type);
+ }
+
+ invocationExpression = ResolveExpression (invoke.Item1, invoke.Item2, invoke.Item3);
+
+ if (invocationExpression == null || invocationExpression.Item1 == null || invocationExpression.Item1.IsError)
+ return null;
+ resolveResult = invocationExpression.Item1;
+ if (resolveResult is MethodGroupResolveResult)
+ return factory.CreateMethodDataProvider (resolveResult as MethodGroupResolveResult);
+ if (resolveResult is MemberResolveResult) {
+ if (resolveResult.Type.Kind == TypeKind.Delegate)
+ return factory.CreateDelegateDataProvider (resolveResult.Type);
+ var mr = resolveResult as MemberResolveResult;
+ if (mr.Member is IMethod)
+ return factory.CreateMethodDataProvider ((IMethod)mr.Member);
+ }
+ if (resolveResult != null)
+ return factory.CreateIndexerParameterDataProvider (resolveResult.Type, invoke.Item2);
+ break;
// case '<':
// if (string.IsNullOrEmpty (result.Expression))
// return null;
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs
index 48cf01dcc6..cf8f4960cf 100644
--- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs
+++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs
@@ -63,5 +63,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
ICompletionData CreateNewOverrideCompletionData (int declarationBegin, ITypeDefinition type, IMember m);
IEnumerable<ICompletionData> CreateCodeTemplateCompletionData ();
+
+ IEnumerable<ICompletionData> CreatePreProcessorDefinesCompletionData ();
}
}