Browse Source

reimplemented language-specific snippet functions

pull/32/merge
Siegfried Pammer 12 years ago
parent
commit
b501529965
  1. 35
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs
  2. 26
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippet.cs
  3. 4
      src/Main/Base/Project/Refactoring/ICodeGenerator.cs

35
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs

@ -124,5 +124,40 @@ namespace CSharpBinding.Refactoring
script.InsertBefore(node, attr); script.InsertBefore(node, attr);
} }
} }
public string GetPropertyName(string fieldName)
{
if (string.IsNullOrEmpty(fieldName))
return fieldName;
if (fieldName.StartsWith("_") && fieldName.Length > 1)
return Char.ToUpper(fieldName[1]) + fieldName.Substring(2);
else if (fieldName.StartsWith("m_") && fieldName.Length > 2)
return Char.ToUpper(fieldName[2]) + fieldName.Substring(3);
else
return Char.ToUpper(fieldName[0]) + fieldName.Substring(1);
}
public string GetParameterName(string fieldName)
{
if (string.IsNullOrEmpty(fieldName))
return fieldName;
if (fieldName.StartsWith("_") && fieldName.Length > 1)
return Char.ToLower(fieldName[1]) + fieldName.Substring(2);
else if (fieldName.StartsWith("m_") && fieldName.Length > 2)
return Char.ToLower(fieldName[2]) + fieldName.Substring(3);
else
return Char.ToLower(fieldName[0]) + fieldName.Substring(1);
}
public string GetFieldName(string propertyName)
{
if (string.IsNullOrEmpty(propertyName))
return propertyName;
string newName = Char.ToLower(propertyName[0]) + propertyName.Substring(1);
if (newName == propertyName)
return "_" + newName;
else
return newName;
}
} }
} }

26
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippet.cs

@ -8,12 +8,15 @@ using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using ICSharpCode.AvalonEdit.Snippets; using ICSharpCode.AvalonEdit.Snippets;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit; using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion; using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.AvalonEdit.AddIn.Snippets namespace ICSharpCode.AvalonEdit.AddIn.Snippets
{ {
@ -212,18 +215,29 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
return s => s.ToLower(); return s => s.ToLower();
if ("toUpper".Equals(name, StringComparison.OrdinalIgnoreCase)) if ("toUpper".Equals(name, StringComparison.OrdinalIgnoreCase))
return s => s.ToUpper(); return s => s.ToUpper();
#warning Reimplement language-specific name conversion functions
/* ICodeGenerator generator = GetCodeGeneratorForFile(context.FileName);
if (generator == null) return null;
if ("toFieldName".Equals(name, StringComparison.OrdinalIgnoreCase)) if ("toFieldName".Equals(name, StringComparison.OrdinalIgnoreCase))
return s => context.Language.Properties.CodeGenerator.GetFieldName(s); return s => generator.GetFieldName(s);
if ("toPropertyName".Equals(name, StringComparison.OrdinalIgnoreCase)) if ("toPropertyName".Equals(name, StringComparison.OrdinalIgnoreCase))
return s => context.Language.Properties.CodeGenerator.GetPropertyName(s); return s => generator.GetPropertyName(s);
if ("toParameterName".Equals(name, StringComparison.OrdinalIgnoreCase)) if ("toParameterName".Equals(name, StringComparison.OrdinalIgnoreCase))
return s => context.Language.Properties.CodeGenerator.GetParameterName(s); return s => generator.GetParameterName(s);
*/
return null; return null;
} }
static ICodeGenerator GetCodeGeneratorForFile(FileName fileName)
{
// ICodeGenerator depends on IProject (at least the C# version of it).
// TODO : what if file is not part of a project?
IProject project = SD.ProjectService.FindProjectContainingFile(fileName);
if (project == null)
return null;
return project.CodeGenerator;
}
sealed class FunctionBoundElement : SnippetBoundElement sealed class FunctionBoundElement : SnippetBoundElement
{ {
internal Func<string, string> function; internal Func<string, string> function;

4
src/Main/Base/Project/Refactoring/ICodeGenerator.cs

@ -16,5 +16,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
void AddAssemblyAttribute(IAttribute attribute); void AddAssemblyAttribute(IAttribute attribute);
void AddReturnTypeAttribute(IMethod target, IAttribute attribute); void AddReturnTypeAttribute(IMethod target, IAttribute attribute);
void InsertEventHandler(ITypeDefinition target, string name, IEvent eventDefinition, bool jumpTo); void InsertEventHandler(ITypeDefinition target, string name, IEvent eventDefinition, bool jumpTo);
string GetPropertyName(string fieldName);
string GetParameterName(string fieldName);
string GetFieldName(string propertyName);
} }
} }

Loading…
Cancel
Save