From 6ba58ec72fd9ee282b7a1bf00531c10fec66ce5b Mon Sep 17 00:00:00 2001 From: Christian Hornung Date: Wed, 13 Feb 2008 10:29:32 +0000 Subject: [PATCH] ResourceToolkit: Fixed resource tooltips by adapting NRefactoryResourceResolver to the new behavior of the C# ExpressionFinder. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2955 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Resolver/NRefactoryResourceResolver.cs | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/NRefactoryResourceResolver.cs b/src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/NRefactoryResourceResolver.cs index 14ded6fcd5..76d72360d8 100644 --- a/src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/NRefactoryResourceResolver.cs +++ b/src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/NRefactoryResourceResolver.cs @@ -111,31 +111,37 @@ namespace Hornung.ResourceToolkit.Resolver return null; } - ExpressionResult result = ef.FindFullExpression(document.TextContent, caretOffset); - - if (result.Expression == null) { - // may happen if in string - while (--caretOffset > 0 && (result = ef.FindFullExpression(document.TextContent, caretOffset)).Expression == null) { - if (document.GetLineNumberForOffset(caretOffset) != caretLine) { - // only look in same line - break; + while (true) { + + ExpressionResult result = ef.FindFullExpression(document.TextContent, caretOffset); + + if (result.Expression == null) { + // Try to find an expression to the left, but only + // in the same line. + if (--caretOffset < 0 || document.GetLineNumberForOffset(caretOffset) != caretLine) { + return null; } + continue; } - } - - if (result.Expression != null) { + PrimitiveExpression pe; Expression expr = NRefactoryAstCacheService.ParseExpression(fileName, result.Expression, caretLine + 1, caretColumn + 1); if (expr == null) { return null; + } else if ((pe = expr as PrimitiveExpression) != null) { + if (pe.Value is string) { + // We are inside a string literal and need to find + // the next outer expression to decide + // whether it is a resource key. + if (--caretOffset < 0) return null; + continue; + } } return TryResolve(result, expr, caretLine, caretColumn, fileName, document.TextContent, ef, charTyped); } - - return null; } // ******************************************************************************************************************************** @@ -331,7 +337,7 @@ namespace Hornung.ResourceToolkit.Resolver resourceName = resourceName.Substring(p.RootNamespace.Length+1); switch(p.Language) { - + case "VBNet": // SD2-1239