diff --git a/src/AddIns/BackendBindings/Boo/Boo.InterpreterAddIn/Project/CodeCompletionData.boo b/src/AddIns/BackendBindings/Boo/Boo.InterpreterAddIn/Project/CodeCompletionData.boo index 4d807e55ef..d617e17c04 100644 --- a/src/AddIns/BackendBindings/Boo/Boo.InterpreterAddIn/Project/CodeCompletionData.boo +++ b/src/AddIns/BackendBindings/Boo/Boo.InterpreterAddIn/Project/CodeCompletionData.boo @@ -118,6 +118,7 @@ internal class GlobalsCompletionDataProvider(ICSharpCode.SharpDevelop.DefaultEdi override def GenerateCompletionData(fileName as string, textArea as TextArea, charTyped as System.Char) as (ICompletionData): globals = _interpreter.GetGlobals() + return array(ICompletionData, 0) if globals is null data = array(ICompletionData, len(globals)) for index, key in enumerate(globals): value = null #_interpreter.GetValue(key) TODO diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin index d8e8f76493..6efac20361 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin @@ -15,6 +15,7 @@ + - + + + - + + + + + + - + diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs index 19973e98ea..fc29204930 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs @@ -18,17 +18,11 @@ namespace Grunwald.BooBinding { public class BooProject : CompilableProject { - static bool initialized = false; public static readonly string BooBinPath = Path.GetDirectoryName(typeof(BooProject).Assembly.Location); void Init() { reparseCodeSensitiveProperties.Add("Ducky"); - - if (!initialized) { - initialized = true; - MSBuildEngine.MSBuildProperties.Add("BooBinPath", BooBinPath); - } } public override string Language { @@ -89,19 +83,19 @@ namespace Grunwald.BooBinding protected override ParseProjectContent CreateProjectContent() { - ParseProjectContent pc = base.CreateProjectContent(); - ReferenceProjectItem systemItem = new ReferenceProjectItem(this, "System"); - pc.AddReferencedContent(ParserService.GetProjectContentForReference(systemItem)); - ReferenceProjectItem booLangItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Builtins).Assembly.Location); - pc.AddReferencedContent(ParserService.GetProjectContentForReference(booLangItem)); if (BooCompilerPC == null) { ReferenceProjectItem booCompilerItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Compiler.AbstractAstAttribute).Assembly.Location); BooCompilerPC = ParserService.GetProjectContentForReference(booCompilerItem); } if (BooUsefulPC == null) { ReferenceProjectItem booUsefulItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Useful.Attributes.SingletonAttribute).Assembly.Location); - BooUsefulPC = ParserService.GetProjectContentForReference(booUsefulItem); + BooUsefulPC = ParserService.GetRegistryForReference(booUsefulItem).GetProjectContentForReference("Boo.Lang.Useful", booUsefulItem.Include); } + ParseProjectContent pc = base.CreateProjectContent(); + ReferenceProjectItem systemItem = new ReferenceProjectItem(this, "System"); + pc.AddReferencedContent(ParserService.GetProjectContentForReference(systemItem)); + ReferenceProjectItem booLangItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Builtins).Assembly.Location); + pc.AddReferencedContent(ParserService.GetProjectContentForReference(booLangItem)); pc.DefaultImports = new DefaultUsing(pc); pc.DefaultImports.Usings.Add("Boo.Lang"); pc.DefaultImports.Usings.Add("Boo.Lang.Builtins"); diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs index 4d64ad0ff8..9a74d5a9ff 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs @@ -351,7 +351,7 @@ namespace VBNetBinding.FormattingStrategy if (Regex.IsMatch(texttoreplace.Trim(), statement.StartRegex, RegexOptions.IgnoreCase)) { string indentation = GetIndentation(textArea, lineNr - 1); if (isEndStatementNeeded(textArea, ref statement, lineNr)) { - textArea.Document.Insert(textArea.Caret.Offset, terminator + indentation + statement.EndStatement); + textArea.Document.Replace(curLine.Offset, curLine.Length, terminator + indentation + statement.EndStatement); ++undoCount; } for (int i = 0; i < statement.IndentPlus; i++) { diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Templates/EmptyWixProject.xpt b/src/AddIns/BackendBindings/WixBinding/Project/Templates/EmptyWixProject.xpt index 1634def44a..80684d4f95 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Templates/EmptyWixProject.xpt +++ b/src/AddIns/BackendBindings/WixBinding/Project/Templates/EmptyWixProject.xpt @@ -20,6 +20,7 @@ Name="" Language="1033" Version="1.0.0.0" + UpgradeCode="${GUID}" Manufacturer=""> /// Loads the string content into the view. /// diff --git a/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs b/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs index afb5a65cc3..019de021f7 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs +++ b/src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs @@ -23,6 +23,9 @@ namespace ICSharpCode.Svn.Commands /// public sealed class RegisterEventsCommand : AbstractCommand { + const int CannotDeleteFileWithLocalModifications = 195006; + const int CannotDeleteFileNotUnderVersionControl = 200005; + public override void Run() { FileService.FileRemoving += FileRemoving; @@ -65,12 +68,12 @@ namespace ICSharpCode.Svn.Commands void FileCreated(object sender, FileEventArgs e) { + if (e.IsDirectory) return; if (!AddInOptions.AutomaticallyAddFiles) return; if (!Path.IsPathRooted(e.FileName)) return; string fullName = Path.GetFullPath(e.FileName); if (!CanBeVersionControlledFile(fullName)) return; - if (e.IsDirectory) return; try { Status status = SvnClient.Instance.Client.SingleStatus(fullName); switch (status.TextStatus) { @@ -91,7 +94,9 @@ namespace ICSharpCode.Svn.Commands if (e.Cancel) return; string fullName = Path.GetFullPath(e.FileName); if (!CanBeVersionControlledFile(fullName)) return; + if (e.IsDirectory) { + // show "cannot delete directories" message even if // AutomaticallyDeleteFiles (see below) is off! Status status = SvnClient.Instance.Client.SingleStatus(fullName); @@ -100,12 +105,45 @@ namespace ICSharpCode.Svn.Commands case StatusKind.Unversioned: break; default: - MessageService.ShowMessage("SubversionAddIn cannot delete directories, the directory is only removed from the project."); + // must be done using the subversion client, even if + // AutomaticallyDeleteFiles is off, because we don't want to corrupt the + // working copy e.OperationAlreadyDone = true; + try { + SvnClient.Instance.Client.Delete(new string[] { fullName }, false); + } catch (SvnClientException ex) { + LoggingService.Warn("SVN Error code " + ex.ErrorCode); + LoggingService.Warn(ex); + + if (ex.ErrorCode == CannotDeleteFileWithLocalModifications + || ex.ErrorCode == CannotDeleteFileNotUnderVersionControl) + { + if (MessageService.ShowCustomDialog("Delete directory", + "Error deleting " + fullName + ":\n" + + ex.Message, 0, 1, + "Force delete", "${res:Global.CancelButtonText}") + == 0) + { + try { + SvnClient.Instance.Client.Delete(new string[] { fullName }, true); + } catch (SvnClientException ex2) { + e.Cancel = true; + MessageService.ShowError(ex2.Message); + } + } else { + e.Cancel = true; + } + } else { + e.Cancel = true; + MessageService.ShowError(ex.Message); + } + } break; } return; } + // not a directory, but a file: + if (!AddInOptions.AutomaticallyDeleteFiles) return; try { Status status = SvnClient.Instance.Client.SingleStatus(fullName); diff --git a/src/Libraries/DockPanel_Src/patchnotes.txt b/src/Libraries/DockPanel_Src/patchnotes.txt index f11fdf2a26..2311008dc8 100644 --- a/src/Libraries/DockPanel_Src/patchnotes.txt +++ b/src/Libraries/DockPanel_Src/patchnotes.txt @@ -11,6 +11,8 @@ Patch #2: Fixed CREATESTRUCT, MDICREATESTRUCT and WINDOWPOS P/Invoke structure declarations: use IntPtr instead of int - we have to use a pointer-size integers here for 64-bit systems Committed in revision 1335. + Reported to SF: http://sourceforge.net/tracker/index.php?func=detail&aid=1438642&group_id=110642&atid=659401 + The fix was accepted and will be in the next release of the library. Patch #3: Activate the autohide pad explicitly - in DockContentHandler.cs diff --git a/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets b/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets index 1828bd35cd..0d1c071b0b 100644 --- a/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets +++ b/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets @@ -7,46 +7,50 @@ to work around a problem in Microsoft's C# targets --> $(TargetFrameworkVersion) + unknown - - $(SystemRoot)\Microsoft.NET\Framework\v1.0.3705 - true - true - - - $(SystemRoot)\Microsoft.NET\Framework\v1.1.4322 - true - true - - - + v1.0 - - + + + $(SystemRoot)\Microsoft.NET\Framework\v1.0.3705 + $(SystemRoot)\Microsoft.NET\Framework\v1.1.4322 false + v1 - - true + + v2.0 + v2 - + v1.0 true + CF - + v2.0 true + CF + + + Mono + + + + - + - + {CandidateAssemblyFiles}; $(ReferencePath); @@ -60,7 +64,7 @@ $(CscToolPath) - + false @@ -68,16 +72,16 @@ - - + - + - + @@ -87,15 +91,24 @@ - - + + + + PocketPC - WinCE + WinCE + + true + true + + + + - - diff --git a/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.VisualBasic.targets b/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.VisualBasic.targets index a95ba0c385..1fed152b06 100644 --- a/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.VisualBasic.targets +++ b/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.VisualBasic.targets @@ -28,8 +28,9 @@ - - true + + v2.0 + true @@ -157,12 +158,21 @@ - - + + + + PocketPC - WinCE + WinCE + + true + true + + + + diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Resources/HTML-Mode.xshd b/src/Libraries/ICSharpCode.TextEditor/Project/Resources/HTML-Mode.xshd index f4a0947917..5ca4ec47ac 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Resources/HTML-Mode.xshd +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Resources/HTML-Mode.xshd @@ -32,7 +32,7 @@ </script> - <script + <script@C </script> diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs index dec810b845..572ef20134 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs @@ -820,9 +820,28 @@ namespace ICSharpCode.SharpDevelop.Project internal static void InitializeMSBuildProject(MSBuild.Project project) { - project.GlobalProperties.SetProperty("BuildingInsideVisualStudio", "true"); - foreach (KeyValuePair pair in MSBuildEngine.MSBuildProperties) { - project.GlobalProperties.SetProperty(pair.Key, pair.Value, true); + InitializeMSBuildProjectProperties(project.GlobalProperties); + } + + /// + /// Set compilation properties (MSBuildProperties and AddInTree/AdditionalPropertiesPath). + /// + internal static void InitializeMSBuildProjectProperties(MSBuild.BuildPropertyGroup propertyGroup) + { + foreach (KeyValuePair entry in MSBuildEngine.MSBuildProperties) { + propertyGroup.SetProperty(entry.Key, entry.Value); + } + // re-load these properties from AddInTree every time because "text" might contain + // SharpDevelop properties resolved by the StringParser (e.g. ${property:FxCopPath}) + AddInTreeNode node = AddInTree.GetTreeNode(MSBuildEngine.AdditionalPropertiesPath, false); + if (node != null) { + foreach (Codon codon in node.Codons) { + object item = codon.BuildItem(null, new System.Collections.ArrayList()); + if (item != null) { + bool escapeValue = !codon.Properties.Get("text", "").Contains("$("); + propertyGroup.SetProperty(codon.Id, item.ToString(), escapeValue); + } + } } } diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine.cs index e347421dcb..5adce7d3d5 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine.cs @@ -30,7 +30,7 @@ namespace ICSharpCode.SharpDevelop.Project const string CompileTaskNamesPath = "/SharpDevelop/MSBuildEngine/CompileTaskNames"; const string AdditionalTargetFilesPath = "/SharpDevelop/MSBuildEngine/AdditionalTargetFiles"; const string AdditionalLoggersPath = "/SharpDevelop/MSBuildEngine/AdditionalLoggers"; - const string AdditionalPropertiesPath = "/SharpDevelop/MSBuildEngine/AdditionalProperties"; + internal const string AdditionalPropertiesPath = "/SharpDevelop/MSBuildEngine/AdditionalProperties"; /// /// Gets a list of the task names that cause a "Compiling ..." log message. @@ -69,6 +69,7 @@ namespace ICSharpCode.SharpDevelop.Project MSBuildProperties = new SortedList(); MSBuildProperties.Add("SharpDevelopBinPath", Path.GetDirectoryName(typeof(MSBuildEngine).Assembly.Location)); + MSBuildProperties.Add("BuildingInsideVisualStudio", "true"); } #region Properties @@ -373,21 +374,9 @@ namespace ICSharpCode.SharpDevelop.Project internal Engine CreateEngine() { Engine engine = MSBuildInternals.CreateEngine(); - foreach (KeyValuePair entry in MSBuildProperties) { - engine.GlobalProperties.SetProperty(entry.Key, entry.Value); - } - // re-load these properties from AddInTree every time because "text" might contain - // SharpDevelop properties resolved by the StringParser (e.g. ${property:FxCopPath}) - AddInTreeNode node = AddInTree.GetTreeNode(AdditionalPropertiesPath, false); - if (node != null) { - foreach (Codon codon in node.Codons) { - object item = codon.BuildItem(null, new System.Collections.ArrayList()); - if (item != null) { - bool escapeValue = !codon.Properties.Get("text", "").Contains("$("); - engine.GlobalProperties.SetProperty(codon.Id, item.ToString(), escapeValue); - } - } - } + + MSBuildBasedProject.InitializeMSBuildProjectProperties(engine.GlobalProperties); + if (options.AdditionalProperties != null) { foreach (KeyValuePair entry in options.AdditionalProperties) { engine.GlobalProperties.SetProperty(entry.Key, entry.Value); @@ -398,8 +387,6 @@ namespace ICSharpCode.SharpDevelop.Project engine.GlobalProperties.SetProperty("SolutionFileName", Path.GetFileName(solution.FileName)); engine.GlobalProperties.SetProperty("SolutionPath", solution.FileName); - engine.GlobalProperties.SetProperty("BuildingInsideVisualStudio", "true"); - return engine; } diff --git a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs index 2f95c9b90e..27c473589e 100644 --- a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs +++ b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs @@ -85,6 +85,10 @@ namespace SearchAndReplace switch (state) { case TextIteratorState.Resetted: + if (textBuffer.Length == 0) { + state = TextIteratorState.Done; + return false; + } Position = endOffset; state = TextIteratorState.Iterating; return true; diff --git a/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs b/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs new file mode 100644 index 0000000000..b45b549c34 --- /dev/null +++ b/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs @@ -0,0 +1,47 @@ +// +// +// +// +// $Revision$ +// + +using System; +using ICSharpCode.SharpDevelop.Tests.Utils; +using ICSharpCode.TextEditor.Document; +using SearchAndReplace; +using NUnit.Framework; + +namespace ICSharpCode.SharpDevelop.Tests +{ + /// + /// The fix for SD2-857 highlighted another bug (SD2-1312) in the + /// ForwardTextIterator where it does not handle the case where + /// the ITextBufferStrategy has a length of zero. + /// + [TestFixture] + public class ForwardIteratorWithEmptyTextBufferTestFixture + { + ForwardTextIterator forwardTextIterator; + + [SetUp] + public void SetUp() + { + // Create the document to be iterated through. + MockDocument doc = new MockDocument(); + StringTextBufferStrategy textBufferStrategy = new StringTextBufferStrategy(); + doc.TextBufferStrategy = textBufferStrategy; + ProvidedDocumentInformation docInfo = new ProvidedDocumentInformation(doc, + @"C:\Temp\test.txt", + 0); + + // Create the forward iterator. + forwardTextIterator = new ForwardTextIterator(docInfo); + } + + [Test] + public void CannotMoveAhead() + { + Assert.IsFalse(forwardTextIterator.MoveAhead(1)); + } + } +} diff --git a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj index 24917d5c6c..4d77837806 100644 --- a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj +++ b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj @@ -54,6 +54,7 @@ + diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs index 81e20a2061..a299d4e047 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs @@ -256,6 +256,7 @@ namespace ICSharpCode.SharpDevelop.Dom DefaultField f = new DefaultField(this, field.Name); f.Modifiers = TranslateModifiers(field); f.ReturnType = CreateType(this.ProjectContent, this, field.FieldType); + AddAttributes(CompilationUnit.ProjectContent, f.Attributes, field.CustomAttributes); Fields.Add(f); } } @@ -277,6 +278,7 @@ namespace ICSharpCode.SharpDevelop.Dom p.IsIndexer = true; } AddParameters(p, property.Parameters); + AddAttributes(CompilationUnit.ProjectContent, p.Attributes, property.CustomAttributes); Properties.Add(p); } } @@ -290,6 +292,7 @@ namespace ICSharpCode.SharpDevelop.Dom e.Modifiers = TranslateModifiers(eventDef); } e.ReturnType = CreateType(this.ProjectContent, this, eventDef.EventType); + AddAttributes(CompilationUnit.ProjectContent, e.Attributes, eventDef.CustomAttributes); Events.Add(e); } } @@ -320,6 +323,7 @@ namespace ICSharpCode.SharpDevelop.Dom } m.ReturnType = CreateType(this.ProjectContent, m, method.ReturnType.ReturnType); + AddAttributes(CompilationUnit.ProjectContent, m.Attributes, method.CustomAttributes); if (this.ClassType == ClassType.Interface) { m.Modifiers = ModifierEnum.Public | ModifierEnum.Abstract; } else { diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/ConstructedReturnType.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/ConstructedReturnType.cs index a765f24170..ff13f06f66 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/ConstructedReturnType.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/ConstructedReturnType.cs @@ -81,17 +81,21 @@ namespace ICSharpCode.SharpDevelop.Dom } } + /// + /// Gets if is/contains a generic return type referring to a class type parameter. + /// bool CheckReturnType(IReturnType t) { + if (t == null) { + return false; + } if (t.IsGenericReturnType) { return t.CastToGenericReturnType().TypeParameter.Method == null; } else if (t.IsArrayReturnType) { return CheckReturnType(t.CastToArrayReturnType().ArrayElementType); } else if (t.IsConstructedReturnType) { foreach (IReturnType para in t.CastToConstructedReturnType().TypeArguments) { - if (para != null) { - if (CheckReturnType(para)) return true; - } + if (CheckReturnType(para)) return true; } return false; } else { diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/SearchClassReturnType.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/SearchClassReturnType.cs index 475b840f72..1866fac8f5 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/SearchClassReturnType.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/SearchClassReturnType.cs @@ -108,14 +108,16 @@ namespace ICSharpCode.SharpDevelop.Dom lock (cache) { if (cache.TryGetValue(this, out type)) return type; - try { - isSearching = true; - type = pc.SearchType(new SearchTypeRequest(name, typeParameterCount, declaringClass, caretLine, caretColumn)).Result; + } + try { + isSearching = true; + type = pc.SearchType(new SearchTypeRequest(name, typeParameterCount, declaringClass, caretLine, caretColumn)).Result; + lock (cache) { cache[this] = type; - return type; - } finally { - isSearching = false; } + return type; + } finally { + isSearching = false; } } }