Browse Source

Fixed forum-12453: Exception viewing C# file while boo project is open

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2013 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
7cd5f63f9e
  1. 4
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
  2. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs
  3. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/Parser.cs
  4. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  5. 10
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs
  6. 34
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/RemotingConfigurationHelpper.cs
  7. 14
      src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/NRefactoryAstCacheService.cs
  8. 8
      src/Main/Base/Project/Src/Gui/Dialogs/SharpDevelopAboutPanels.cs
  9. 12
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs
  10. 4
      src/Main/ICSharpCode.SharpDevelop.Widgets/Project/TreeGrid/DynamicListItem.cs

4
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs

@ -324,7 +324,7 @@ namespace CSharpBinding @@ -324,7 +324,7 @@ namespace CSharpBinding
IMember GetCurrentMember(SharpDevelopTextAreaControl editor)
{
ICSharpCode.TextEditor.Caret caret = editor.ActiveTextAreaControl.Caret;
NRefactoryResolver r = new NRefactoryResolver(ParserService.CurrentProjectContent);
NRefactoryResolver r = new NRefactoryResolver(ParserService.CurrentProjectContent, LanguageProperties.CSharp);
if (r.Initialize(editor.FileName, caret.Line + 1, caret.Column + 1)) {
return r.CallingMember;
} else {
@ -336,7 +336,7 @@ namespace CSharpBinding @@ -336,7 +336,7 @@ namespace CSharpBinding
bool DoCaseCompletion(SharpDevelopTextAreaControl editor)
{
ICSharpCode.TextEditor.Caret caret = editor.ActiveTextAreaControl.Caret;
NRefactoryResolver r = new NRefactoryResolver(ParserService.CurrentProjectContent);
NRefactoryResolver r = new NRefactoryResolver(ParserService.CurrentProjectContent, LanguageProperties.CSharp);
if (r.Initialize(editor.FileName, caret.Line + 1, caret.Column + 1)) {
AST.INode currentMember = r.ParseCurrentMember(editor.Text);
if (currentMember != null) {

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs

@ -114,7 +114,7 @@ namespace CSharpBinding.Parser @@ -114,7 +114,7 @@ namespace CSharpBinding.Parser
public IResolver CreateResolver()
{
return new NRefactoryResolver(ParserService.CurrentProjectContent);
return new NRefactoryResolver(ParserService.CurrentProjectContent, LanguageProperties.CSharp);
}
///////// IParser Interface END
}

2
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/Parser.cs

@ -134,7 +134,7 @@ namespace VBNetBinding.Parser @@ -134,7 +134,7 @@ namespace VBNetBinding.Parser
public IResolver CreateResolver()
{
return new NRefactoryResolver(ParserService.CurrentProjectContent);
return new NRefactoryResolver(ParserService.CurrentProjectContent, LanguageProperties.VBNet);
}
///////// IParser Interface END
}

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

@ -157,7 +157,7 @@ namespace VBNetBinding @@ -157,7 +157,7 @@ namespace VBNetBinding
IMember GetCurrentMember(SharpDevelopTextAreaControl editor)
{
ICSharpCode.TextEditor.Caret caret = editor.ActiveTextAreaControl.Caret;
NRefactoryResolver r = new NRefactoryResolver(ParserService.CurrentProjectContent);
NRefactoryResolver r = new NRefactoryResolver(ParserService.CurrentProjectContent, LanguageProperties.VBNet);
if (r.Initialize(editor.FileName, caret.Line + 1, caret.Column + 1)) {
return r.CallingMember;
} else {

10
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs

@ -153,9 +153,13 @@ namespace ICSharpCode.FormsDesigner.Services @@ -153,9 +153,13 @@ namespace ICSharpCode.FormsDesigner.Services
// FIX for SD2-716, remove when designer gets its own AppDomain
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
if (string.Equals(asm.Location, fileName, StringComparison.InvariantCultureIgnoreCase)) {
RegisterAssembly(asm);
return asm;
try {
if (string.Equals(asm.Location, fileName, StringComparison.InvariantCultureIgnoreCase)) {
RegisterAssembly(asm);
return asm;
}
} catch (NotSupportedException) {
// Fixes forum-12823
}
}

34
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/RemotingConfigurationHelpper.cs

@ -27,10 +27,15 @@ namespace ICSharpCode.SharpDevelop.Services @@ -27,10 +27,15 @@ namespace ICSharpCode.SharpDevelop.Services
{
string path = null;
foreach (System.Reflection.Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) {
string fullFilename = assembly.Location;
if (Path.GetFileName(fullFilename).Equals(assemblyName, StringComparison.OrdinalIgnoreCase)) {
path = Path.GetDirectoryName(fullFilename);
break;
try {
string fullFilename = assembly.Location;
if (Path.GetFileName(fullFilename).Equals(assemblyName, StringComparison.OrdinalIgnoreCase)) {
path = Path.GetDirectoryName(fullFilename);
break;
}
} catch (NotSupportedException) {
// assembly.Location throws NotSupportedException for assemblies emitted using
// Reflection.Emit by custom controls used in the forms designer
}
}
if (path == null) {
@ -48,10 +53,10 @@ namespace ICSharpCode.SharpDevelop.Services @@ -48,10 +53,10 @@ namespace ICSharpCode.SharpDevelop.Services
string baseDir = Directory.GetDirectoryRoot(AppDomain.CurrentDomain.BaseDirectory);
string relDirs = AppDomain.CurrentDomain.BaseDirectory + ";" + path;
AppDomain serverAppDomain = AppDomain.CreateDomain("Debugging server",
new Evidence(AppDomain.CurrentDomain.Evidence),
baseDir,
relDirs,
AppDomain.CurrentDomain.ShadowCopyFiles);
new Evidence(AppDomain.CurrentDomain.Evidence),
baseDir,
relDirs,
AppDomain.CurrentDomain.ShadowCopyFiles);
serverAppDomain.DoCallBack(new CrossAppDomainDelegate(ConfigureServer));
}
@ -64,10 +69,15 @@ namespace ICSharpCode.SharpDevelop.Services @@ -64,10 +69,15 @@ namespace ICSharpCode.SharpDevelop.Services
Assembly AssemblyResolve(object sender, ResolveEventArgs args)
{
foreach (System.Reflection.Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) {
string fullFilename = assembly.Location;
if (Path.GetFileNameWithoutExtension(fullFilename).Equals(args.Name, StringComparison.OrdinalIgnoreCase) ||
assembly.FullName == args.Name) {
return assembly;
try {
string fullFilename = assembly.Location;
if (Path.GetFileNameWithoutExtension(fullFilename).Equals(args.Name, StringComparison.OrdinalIgnoreCase) ||
assembly.FullName == args.Name) {
return assembly;
}
} catch (NotSupportedException) {
// assembly.Location throws NotSupportedException for assemblies emitted using
// Reflection.Emit by custom controls used in the forms designer
}
}
return null;

14
src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/NRefactoryAstCacheService.cs

@ -174,7 +174,19 @@ namespace Hornung.ResourceToolkit.Resolver @@ -174,7 +174,19 @@ namespace Hornung.ResourceToolkit.Resolver
return null;
}
NRefactoryResolver resolver = new NRefactoryResolver(pc);
// HACK: initialize resolver with correct language properties
// when file language != project language
// see http://community.sharpdevelop.net/forums/thread/12453.aspx
// Ideally ParserService should provide a GetResolver overload taking file name and project content
// instead of always using the current project content
NRefactoryResolver fileResolverWrongProject = ParserService.CreateResolver(fileName) as NRefactoryResolver;
NRefactoryResolver resolver;
if (fileResolverWrongProject != null) {
resolver = new NRefactoryResolver(pc, fileResolverWrongProject.LanguageProperties);
} else {
resolver = new NRefactoryResolver(pc, LanguageProperties.CSharp);
}
if (compilationUnit == null) {
compilationUnit = GetFullAst(resolver.Language, fileName);

8
src/Main/Base/Project/Src/Gui/Dialogs/SharpDevelopAboutPanels.cs

@ -128,7 +128,9 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -128,7 +128,9 @@ namespace ICSharpCode.SharpDevelop.Gui
newItem.SubItems.Add(name.Version.ToString());
try {
newItem.SubItems.Add(asm.Location);
} catch (Exception) {
} catch (NotSupportedException) {
// assembly.Location throws NotSupportedException for assemblies emitted using
// Reflection.Emit by custom controls used in the forms designer
newItem.SubItems.Add("dynamic");
}
@ -148,7 +150,9 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -148,7 +150,9 @@ namespace ICSharpCode.SharpDevelop.Gui
versionInfo.Append(",");
try {
versionInfo.Append(asm.Location);
} catch (Exception) {
} catch (NotSupportedException) {
// assembly.Location throws NotSupportedException for assemblies emitted using
// Reflection.Emit by custom controls used in the forms designer
versionInfo.Append("dynamic");
}

12
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs

@ -82,9 +82,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -82,9 +82,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
}
public NRefactoryResolver(IProjectContent projectContent)
public NRefactoryResolver(IProjectContent projectContent, LanguageProperties languageProperties)
{
this.languageProperties = projectContent.Language;
if (projectContent == null)
throw new ArgumentNullException("projectContent");
if (languageProperties == null)
throw new ArgumentNullException("languageProperties");
this.languageProperties = languageProperties;
this.projectContent = projectContent;
if (languageProperties is LanguageProperties.CSharpProperties) {
language = NR.SupportedLanguage.CSharp;
@ -95,6 +99,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -95,6 +99,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
}
[Obsolete("Use the IProjectContent, LanguageProperties overload instead to support .cs files inside vb projects or similar.")]
public NRefactoryResolver(IProjectContent projectContent)
: this(projectContent, projectContent.Language) {}
Expression ParseExpression(string expression)
{
Expression expr = SpecialConstructs(expression);

4
src/Main/ICSharpCode.SharpDevelop.Widgets/Project/TreeGrid/DynamicListItem.cs

@ -112,6 +112,10 @@ namespace ICSharpCode.SharpDevelop.Widgets.TreeGrid @@ -112,6 +112,10 @@ namespace ICSharpCode.SharpDevelop.Widgets.TreeGrid
minimumWidth = Math.Max(minimumWidth, e.ItemWidth);
}
if (text.Length > 0) {
// Prevent GDI exception (forum-12284) when text is very long
if (text.Length > short.MaxValue) {
text = text.Substring(0, short.MaxValue - 1);
}
int width = 2 + (int)graphics.MeasureString(text, font, new PointF(0, 0), textFormat).Width;
minimumWidth = Math.Max(minimumWidth, width);
}

Loading…
Cancel
Save