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>2016-09-12 15:37:59 +0300
committerMike Krüger <mkrueger@xamarin.com>2016-09-12 15:38:21 +0300
commit812c82913fcc9dc2f2a347a40dd4d1ff50022336 (patch)
tree937fac3003a874b7ecec4b612b8036800aa78543 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates
parentbf92ff6e50a1c1aed237ac5651b44887abd22fbc (diff)
Fixed 'Bug 44172 - Code template expansion not generating the right thing for arrays'
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs2
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs42
2 files changed, 21 insertions, 23 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs
index bf3df1754c..43d65c69e1 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs
@@ -260,7 +260,7 @@ namespace MonoDevelop.Ide.CodeTemplates
link.IsEditable = variableDecarations [name].IsEditable;
link.IsIdentifier = variableDecarations [name].IsIdentifier;
if (!string.IsNullOrEmpty (variableDecarations [name].Function)) {
- IListDataProvider<string > functionResult = expansion.RunFunction (context, null, variableDecarations [name].Function);
+ var functionResult = expansion.RunFunction (context, null, variableDecarations [name].Function);
if (functionResult != null && functionResult.Count > 0) {
string s = (string)functionResult [functionResult.Count - 1];
if (s == null) {
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs
index 164e9f7bdb..2c514affc6 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeTemplates/ExpansionObject.cs
@@ -123,20 +123,19 @@ namespace MonoDevelop.Ide.CodeTemplates
public string GetLengthProperty (Func<string, string> callback, string varName)
{
- if (callback == null)
+ SemanticModel semanticModel;
+ if (!CurrentContext.DocumentContext.AnalysisDocument.TryGetSemanticModel (out semanticModel))
+ semanticModel = CurrentContext.Compilation;
+ if (callback == null || semanticModel == null)
return "Count";
-
string var = callback (varName);
-
- ITextEditorResolver textEditorResolver = CurrentContext.DocumentContext.GetContent <ITextEditorResolver> ();
- if (textEditorResolver != null) {
- var result = textEditorResolver.GetLanguageItem (CurrentContext.Editor.LocationToOffset (CurrentContext.InsertPosition), var);
- if (result != null) {
- var returnType = result.GetReturnType ();
- if (returnType != null && !returnType.IsReferenceType)
- return "Length";
- }
- }
+ var offset = CurrentContext.Editor.CaretOffset;
+ var sym = semanticModel.LookupSymbols (offset, name: var).FirstOrDefault ();
+ if (sym == null)
+ return "Count";
+ var returnType = sym.GetReturnType ();
+ if (returnType?.Kind == SymbolKind.ArrayType)
+ return "Length";
return "Count";
}
@@ -157,22 +156,22 @@ namespace MonoDevelop.Ide.CodeTemplates
public string GetComponentTypeOf (Func<string, string> callback, string varName)
{
- if (callback == null)
- return "var";
- var compilation = CurrentContext.Compilation;
+ //if (callback == null)
+ return "var";
+ /*var compilation = CurrentContext.Compilation;
if (compilation == null)
return null;
string var = callback (varName);
var offset = CurrentContext.Editor.CaretOffset;
- var sym = compilation.LookupSymbols (offset, name: var).First ();
+ var sym = compilation.LookupSymbols (offset, name: var).FirstOrDefault ();
if (sym == null)
return "var";
var rt = sym.GetReturnType ();
if (rt != null)
return rt.ToMinimalDisplayString (compilation, offset);
- return "var";
+ return "var";*/
}
ICompletionDataList list;
@@ -201,15 +200,15 @@ namespace MonoDevelop.Ide.CodeTemplates
result.Add (new CodeTemplateVariableValue (data.Symbol.Name + " ()", ((CompletionData)data).Icon));
continue;
}
-
- result.Add (new CodeTemplateVariableValue (data.Symbol.Name, ((CompletionData)data).Icon));
+ if (!result.Any (r => r.Text == data.Symbol.Name))
+ result.Add (new CodeTemplateVariableValue (data.Symbol.Name, ((CompletionData)data).Icon));
}
}
foreach (var data in list.OfType<ISymbolCompletionData> ()) {
var m = data.Symbol as IParameterSymbol;
if (m != null) {
- if (GetElementType (compilation, m.Type) != null)
+ if (GetElementType (compilation, m.Type) != null && !result.Any (r => r.Text == m.Name))
result.Add (new CodeTemplateVariableValue (m.Name, ((CompletionData)data).Icon));
}
}
@@ -218,7 +217,7 @@ namespace MonoDevelop.Ide.CodeTemplates
var m = sym.Symbol as ILocalSymbol;
if (m == null)
continue;
- if (GetElementType (compilation, m.Type) != null)
+ if (GetElementType (compilation, m.Type) != null && !result.Any (r => r.Text == m.Name))
result.Add (new CodeTemplateVariableValue (m.Name, ((CompletionData)sym).Icon));
}
}
@@ -290,7 +289,6 @@ namespace MonoDevelop.Ide.CodeTemplates
return new CodeTemplateListDataProvider (GetCurrentClassName ());
case "GetConstructorModifier":
return new CodeTemplateListDataProvider (GetConstructorModifier ());
-
case "GetSimpleTypeName":
return new CodeTemplateListDataProvider (GetSimpleTypeName (match.Groups[2].Value.Trim ('"')));
case "GetLengthProperty":