Browse Source

- implemented Overrides-CC

- fixed bug OverrideToStringMethodDialog (wrong TypeReference was used)
- print errors in EF-Parser to debug log

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/vbnet@6156 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 16 years ago
parent
commit
a5d19c3267
  1. 38
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/CompletionDataHelper.cs
  2. 4
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  3. 2
      src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/OverrideToStringMethodDialog.xaml.cs
  4. 10
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetExpressionFinder.cs

38
src/AddIns/BackendBindings/VBNetBinding/Project/Src/CompletionDataHelper.cs

@ -37,7 +37,8 @@ namespace ICSharpCode.VBNetBinding @@ -37,7 +37,8 @@ namespace ICSharpCode.VBNetBinding
bool completingDotExpression = false;
if (expressionResult.Context != ExpressionContext.Global && expressionResult.Context != ExpressionContext.TypeDeclaration) {
if (expressionResult.Context == ExpressionContext.Importable && string.IsNullOrWhiteSpace(expressionResult.Expression)) {
if (expressionResult.Context == ExpressionContext.Importable
&& string.IsNullOrWhiteSpace(expressionResult.Expression)) {
expressionResult.Expression = "Global";
} else if (pressedKey != '.') {
int idx = string.IsNullOrWhiteSpace(expressionResult.Expression)
@ -79,11 +80,14 @@ namespace ICSharpCode.VBNetBinding @@ -79,11 +80,14 @@ namespace ICSharpCode.VBNetBinding
if (addedKeywords)
AddTemplates(editor, result);
if (contextCompletion) {
string word = editor.GetWordBeforeCaret().Trim();
IClass c;
if (contextCompletion && pressedKey == ' ') {
IMember m = GetCurrentMember(editor);
if (editor.GetWordBeforeCaret().Trim().Equals("return", StringComparison.InvariantCultureIgnoreCase) && m != null) {
IClass c = m.ReturnType != null ? m.ReturnType.GetUnderlyingClass() : null;
if (word.Equals("return", StringComparison.InvariantCultureIgnoreCase) && m != null) {
c = m.ReturnType != null ? m.ReturnType.GetUnderlyingClass() : null;
if (c != null) {
foreach (CodeCompletionItem item in result.Items.OfType<CodeCompletionItem>()) {
IClass itemClass = item.Entity as IClass;
@ -96,9 +100,15 @@ namespace ICSharpCode.VBNetBinding @@ -96,9 +100,15 @@ namespace ICSharpCode.VBNetBinding
}
}
c = GetCurrentClass(editor);
if (word.Equals("overrides", StringComparison.InvariantCultureIgnoreCase) && pressedKey == ' ' && c != null) {
return new OverrideCompletionItemProvider().GenerateCompletionList(editor);
}
if (pressedKey == '\0') { // ctrl+space
char prevChar = editor.Caret.Offset > 0 ? editor.Document.GetCharAt(editor.Caret.Offset - 1) : '\0';
string word = char.IsLetterOrDigit(prevChar) || prevChar == '_' ? editor.GetWordBeforeCaret() : "";
word = char.IsLetterOrDigit(prevChar) || prevChar == '_' ? editor.GetWordBeforeCaret() : "";
if (!string.IsNullOrWhiteSpace(word))
result.PreselectionLength = word.Length;
@ -107,13 +117,6 @@ namespace ICSharpCode.VBNetBinding @@ -107,13 +117,6 @@ namespace ICSharpCode.VBNetBinding
return result;
}
static bool IdentifierExpected(object tag)
{
if (tag is BitArray)
return (tag as BitArray)[Tokens.Identifier];
return false;
}
static void AddVBNetKeywords(List<ICompletionEntry> ar, BitArray keywords)
{
for (int i = 0; i < keywords.Length; i++) {
@ -143,5 +146,16 @@ namespace ICSharpCode.VBNetBinding @@ -143,5 +146,16 @@ namespace ICSharpCode.VBNetBinding
return null;
}
}
static IClass GetCurrentClass(ITextEditor editor)
{
var caret = editor.Caret;
NRefactoryResolver r = new NRefactoryResolver(LanguageProperties.VBNet);
if (r.Initialize(ParserService.GetParseInformation(editor.FileName), caret.Line, caret.Column)) {
return r.CallingClass;
} else {
return null;
}
}
}
}

4
src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs

@ -69,7 +69,9 @@ namespace ICSharpCode.VBNetBinding @@ -69,7 +69,9 @@ namespace ICSharpCode.VBNetBinding
case ' ':
editor.Document.Insert(editor.Caret.Offset, " ");
result = ef.FindExpression(editor.Document.Text, editor.Caret.Offset);
if (editor.GetWordBeforeCaret().Trim().Equals("return", StringComparison.InvariantCultureIgnoreCase) || !LiteralMayFollow((BitArray)result.Tag) && !OperatorMayFollow((BitArray)result.Tag) && ExpressionContext.IdentifierExpected != result.Context) {
string word = editor.GetWordBeforeCaret().Trim();
if (word.Equals("overrides", StringComparison.InvariantCultureIgnoreCase) || word.Equals("return", StringComparison.InvariantCultureIgnoreCase) || !LiteralMayFollow((BitArray)result.Tag) && !OperatorMayFollow((BitArray)result.Tag) && ExpressionContext.IdentifierExpected != result.Context) {
LoggingService.Debug("CC: After space, result=" + result + ", context=" + result.Context);
editor.ShowCompletionWindow(CompletionDataHelper.GenerateCompletionData(result, editor, ch));
}

2
src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/OverrideToStringMethodDialog.xaml.cs

@ -55,7 +55,7 @@ namespace SharpRefactoring.Gui @@ -55,7 +55,7 @@ namespace SharpRefactoring.Gui
var param = new List<Ast.Expression>() { formatString };
Ast.ReturnStatement ret = new Ast.ReturnStatement(new Ast.InvocationExpression(
new Ast.MemberReferenceExpression(new Ast.TypeReferenceExpression(new Ast.TypeReference("string", true)), "Format"),
new Ast.MemberReferenceExpression(new Ast.TypeReferenceExpression(new Ast.TypeReference("System.String", true)), "Format"),
param.Concat(fields.Select(f => new Ast.IdentifierExpression(f))).ToList()
));

10
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetExpressionFinder.cs

@ -82,6 +82,11 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet @@ -82,6 +82,11 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
p.Advance();
}
if (p.Errors.Any()) {
foreach (var e in p.Errors)
LoggingService.Warn("not expected: " + e);
}
BitArray expectedSet;
try {
@ -204,6 +209,11 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet @@ -204,6 +209,11 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
break;
}
if (p.Errors.Any()) {
foreach (var e in p.Errors)
LoggingService.Warn("not expected: " + e);
}
BitArray expectedSet;
try {

Loading…
Cancel
Save