Browse Source

Fixed code completion for VB.NET. Implemented LanguageProperties to control case sensivity for project content.

Fixed solution loading to first create all project contents and then create the references to each other.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@130 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
d0400c2e1d
  1. 2
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 2
      data/templates/file/CSharp/CSharp.Forms.Form.xft
  3. 2
      data/templates/file/VBNet/VBNet.Forms.Form.xft
  4. 4
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/Parser.cs
  5. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  6. 19
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  7. 9
      src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin
  8. 1
      src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj
  9. 23
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/LookupTableVisitor.cs
  10. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  11. 4
      src/Main/Base/Project/Src/Dom/IClass.cs
  12. 6
      src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs
  13. 6
      src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs
  14. 45
      src/Main/Base/Project/Src/Dom/LanguageProperties.cs
  15. 5
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  16. 95
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  17. 2
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
  18. 12
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  19. 4
      src/Main/Base/Project/Src/Project/IProject.cs
  20. 227
      src/Main/Base/Project/Src/Services/ParserService/CaseSensitiveProjectContent.cs
  21. 11
      src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs
  22. 54
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  23. 9
      src/Main/Base/Project/Src/Services/ParserService/ProjectContentRegistry.cs
  24. 5
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/InsightWindow/MethodInsightDataProvider.cs
  25. 4
      src/Main/Base/Test/NRefactoryResolverTests.cs
  26. 82
      src/SharpDevelop.sln

2
AddIns/ICSharpCode.SharpDevelop.addin

@ -1415,7 +1415,7 @@
</Condition> </Condition>
</Path> </Path>
<Path name = "/AddIns/DefaultTextEditor/Formater"> <Path name = "/AddIns/DefaultTextEditor/Formatter">
<Condition name = "TextContent" textcontent = "XML"> <Condition name = "TextContent" textcontent = "XML">
<Class id ="XmlFormatter" class = "ICSharpCode.SharpDevelop.DefaultEditor.XmlFormattingStrategy"/> <Class id ="XmlFormatter" class = "ICSharpCode.SharpDevelop.DefaultEditor.XmlFormattingStrategy"/>
</Condition> </Condition>

2
data/templates/file/CSharp/CSharp.Forms.Form.xft

@ -57,7 +57,7 @@ namespace ${StandardNamespace}
// //
// ${ClassName} // ${ClassName}
// //
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 266); this.ClientSize = new System.Drawing.Size(292, 266);
this.Text = "${ClassName}"; this.Text = "${ClassName}";
this.Name = "${ClassName}"; this.Name = "${ClassName}";

2
data/templates/file/VBNet/VBNet.Forms.Form.xft

@ -51,7 +51,7 @@ Namespace ${StandardNamespace}
' '
'${ClassName} '${ClassName}
' '
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(292, 266) Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Name = "${ClassName}" Me.Name = "${ClassName}"
Me.Text = "${ClassName}" Me.Text = "${ClassName}"

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

@ -109,7 +109,7 @@ namespace VBNetBinding.Parser
public ICompilationUnit Parse(IProjectContent projectContent, string fileName, string fileContent) public ICompilationUnit Parse(IProjectContent projectContent, string fileName, string fileContent)
{ {
using (ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(ICSharpCode.NRefactory.Parser.SupportedLanguages.CSharp, new StringReader(fileContent))) { using (ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(ICSharpCode.NRefactory.Parser.SupportedLanguages.VBNet, new StringReader(fileContent))) {
p.Lexer.SpecialCommentTags = lexerTags; p.Lexer.SpecialCommentTags = lexerTags;
p.Parse(); p.Parse();
@ -138,7 +138,7 @@ namespace VBNetBinding.Parser
public IResolver CreateResolver() public IResolver CreateResolver()
{ {
return new ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryResolver(ICSharpCode.NRefactory.Parser.SupportedLanguages.CSharp); return new ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryResolver(ICSharpCode.NRefactory.Parser.SupportedLanguages.VBNet);
} }
///////// IParser Interface END ///////// IParser Interface END
} }

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

@ -221,6 +221,7 @@ namespace VBNetBinding
{ {
this.Name = projectName; this.Name = projectName;
Language = "VBNet"; Language = "VBNet";
LanguageProperties = ICSharpCode.SharpDevelop.Dom.LanguageProperties.VBNet;
SetupProject(fileName); SetupProject(fileName);
IdGuid = BaseConfiguration["ProjectGuid"]; IdGuid = BaseConfiguration["ProjectGuid"];
} }
@ -228,6 +229,7 @@ namespace VBNetBinding
public VBNetProject(ProjectCreateInformation info) public VBNetProject(ProjectCreateInformation info)
{ {
Language = "VBNet"; Language = "VBNet";
LanguageProperties = ICSharpCode.SharpDevelop.Dom.LanguageProperties.VBNet;
Create(info); Create(info);
imports.Add(@"$(MSBuildBinPath)\Microsoft.VisualBasic.Targets"); imports.Add(@"$(MSBuildBinPath)\Microsoft.VisualBasic.Targets");
} }

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

@ -0,0 +1,19 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version value="$version"/>
// </file>
using System;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
namespace VBNetBinding
{
public class VBNetCompletionBinding : DefaultCodeCompletionBinding
{
public VBNetCompletionBinding() : base(".vb")
{
}
}
}

9
src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.addin

@ -53,8 +53,13 @@
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.Publish"/> class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.Publish"/>
</Path> </Path>
<Path name = "/AddIns/DefaultTextEditor/Formatter/VBNet"> <Path name = "/AddIns/DefaultTextEditor/CodeCompletion">
<Class id ="VBNetFormatter" insertbefore="DefaultFormatter" class = "CSharpBinding.FormattingStrategy.VBNetFormattingStrategy"/> <Class id = "VBNetCompletionBinding"
class = "VBNetBinding.VBNetCompletionBinding"/>
</Path>
<Path name = "/AddIns/DefaultTextEditor/Formatter/VBNET">
<Class id ="VBNetFormatter" insertbefore="DefaultFormatter" class = "VBNetBinding.FormattingStrategy.VBFormattingStrategy"/>
</Path> </Path>
<Path name = "/Workspace/Icons"> <Path name = "/Workspace/Icons">

1
src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj

@ -53,6 +53,7 @@
<None Include="VBNetBinding.addin"> <None Include="VBNetBinding.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<Compile Include="Src\VBNetCompletionBinding.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj"> <ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">

23
src/Libraries/NRefactory/Project/Src/Parser/Visitors/LookupTableVisitor.cs

@ -1,6 +1,6 @@
using System; using System;
using System.Drawing; using System.Drawing;
using System.Collections; using System.Collections.Generic;
using ICSharpCode.NRefactory.Parser.AST; using ICSharpCode.NRefactory.Parser.AST;
@ -38,18 +38,29 @@ namespace ICSharpCode.NRefactory.Parser
public class LookupTableVisitor : AbstractASTVisitor public class LookupTableVisitor : AbstractASTVisitor
{ {
public Hashtable variables = new Hashtable(); Dictionary<string, List<LocalLookupVariable>> variables;
public Dictionary<string, List<LocalLookupVariable>> Variables {
get {
return variables;
}
}
public LookupTableVisitor(StringComparer nameComparer)
{
variables = new Dictionary<string, List<LocalLookupVariable>>(nameComparer);
}
public void AddVariable(TypeReference typeRef, string name, Point startPos, Point endPos) public void AddVariable(TypeReference typeRef, string name, Point startPos, Point endPos)
{ {
if (name == null || name.Length == 0) { if (name == null || name.Length == 0) {
return; return;
} }
ArrayList list; List<LocalLookupVariable> list;
if (variables[name] == null) { if (!variables.ContainsKey(name)) {
variables[name] = list = new ArrayList(); variables[name] = list = new List<LocalLookupVariable>();
} else { } else {
list = (ArrayList)variables[name]; list = (List<LocalLookupVariable>)variables[name];
} }
list.Add(new LocalLookupVariable(typeRef, startPos, endPos)); list.Add(new LocalLookupVariable(typeRef, startPos, endPos));
} }

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -645,6 +645,7 @@
<Compile Include="Src\Dom\Implementations\GenericReturnType.cs" /> <Compile Include="Src\Dom\Implementations\GenericReturnType.cs" />
<Compile Include="Src\Dom\Implementations\ArrayReturnType.cs" /> <Compile Include="Src\Dom\Implementations\ArrayReturnType.cs" />
<Compile Include="Src\Dom\Implementations\SpecificReturnType.cs" /> <Compile Include="Src\Dom\Implementations\SpecificReturnType.cs" />
<Compile Include="Src\Dom\LanguageProperties.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj"> <ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

4
src/Main/Base/Project/Src/Dom/IClass.cs

@ -99,9 +99,9 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
IClass GetInnermostClass(int caretLine, int caretColumn); IClass GetInnermostClass(int caretLine, int caretColumn);
List<IClass> GetAccessibleTypes(IClass callingClass); //List<IClass> GetAccessibleTypes(IClass callingClass);
bool IsTypeInInheritanceTree(IClass possibleBaseClass); //bool IsTypeInInheritanceTree(IClass possibleBaseClass);
//IMember SearchMember(string memberName); //IMember SearchMember(string memberName);

6
src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs

@ -273,6 +273,7 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
} }
/*
public bool IsTypeInInheritanceTree(IClass possibleBaseClass) public bool IsTypeInInheritanceTree(IClass possibleBaseClass)
{ {
if (possibleBaseClass == null) { if (possibleBaseClass == null) {
@ -291,7 +292,7 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
return false; return false;
} }
*/
/* /*
public IMember SearchMember(string memberName) public IMember SearchMember(string memberName)
{ {
@ -358,6 +359,7 @@ namespace ICSharpCode.SharpDevelop.Dom
return this; return this;
} }
/*
public List<IClass> GetAccessibleTypes(IClass callingClass) public List<IClass> GetAccessibleTypes(IClass callingClass)
{ {
List<IClass> types = new List<IClass>(); List<IClass> types = new List<IClass>();
@ -376,7 +378,7 @@ namespace ICSharpCode.SharpDevelop.Dom
return types; return types;
} }
/*
public ArrayList GetAccessibleMembers(IClass callingClass, bool showStatic) public ArrayList GetAccessibleMembers(IClass callingClass, bool showStatic)
{ {
ArrayList members = new ArrayList(); ArrayList members = new ArrayList();

6
src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs

@ -34,8 +34,12 @@ namespace ICSharpCode.SharpDevelop.Dom
if (bc.ClassType == ClassType.Interface && c.ClassType != ClassType.Interface) if (bc.ClassType == ClassType.Interface && c.ClassType != ClassType.Interface)
continue; // ignore explicit interface implementations continue; // ignore explicit interface implementations
// do not add methods that were overridden
foreach (IMethod m in bc.Methods) { foreach (IMethod m in bc.Methods) {
// do not add base class constructors
if (m.IsConstructor && c != bc)
continue;
// do not add methods that were overridden
bool ok = true; bool ok = true;
foreach (IMethod oldMethod in l) { foreach (IMethod oldMethod in l) {
if (string.Equals(oldMethod.Name, m.Name, StringComparison.InvariantCultureIgnoreCase)) { if (string.Equals(oldMethod.Name, m.Name, StringComparison.InvariantCultureIgnoreCase)) {

45
src/Main/Base/Project/Src/Dom/LanguageProperties.cs

@ -0,0 +1,45 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version value="$version"/>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Dom
{
public class LanguageProperties
{
public readonly static LanguageProperties CSharp = new LanguageProperties(StringComparer.InvariantCulture);
public readonly static LanguageProperties VBNet = new VBNetProperties();
private class VBNetProperties : LanguageProperties
{
public VBNetProperties() : base(StringComparer.InvariantCultureIgnoreCase) {}
public override bool ShowMember(IMember member, bool showStatic)
{
return member.IsStatic || !showStatic;
}
}
StringComparer nameComparer;
public LanguageProperties(StringComparer nameComparer)
{
this.nameComparer = nameComparer;
}
public StringComparer NameComparer {
get {
return nameComparer;
}
}
public virtual bool ShowMember(IMember member, bool showStatic)
{
return member.IsStatic == showStatic;
}
}
}

5
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -37,7 +37,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
ModifierEnum ConvertModifier(AST.Modifier m) ModifierEnum ConvertModifier(AST.Modifier m)
{ {
return ConvertModifier(m, ModifierEnum.Private); if (currentClass.Count > 0 && currentClass.Peek().ClassType == ClassType.Interface)
return ConvertModifier(m, ModifierEnum.Public);
else
return ConvertModifier(m, ModifierEnum.Private);
} }
ModifierEnum ConvertModifier(AST.Modifier m, ModifierEnum defaultModifier) ModifierEnum ConvertModifier(AST.Modifier m, ModifierEnum defaultModifier)

95
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -25,8 +25,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
ICSharpCode.NRefactory.Parser.LookupTableVisitor lookupTableVisitor; ICSharpCode.NRefactory.Parser.LookupTableVisitor lookupTableVisitor;
IProjectContent projectContent = null; IProjectContent projectContent = null;
bool caseSensitive = true; SupportedLanguages language;
SupportedLanguages language = SupportedLanguages.CSharp;
int caretLine; int caretLine;
int caretColumn; int caretColumn;
@ -70,19 +69,25 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
} }
} }
LanguageProperties languageProperties;
public LanguageProperties LanguageProperties {
get {
return languageProperties;
}
}
public NRefactoryResolver(SupportedLanguages language) public NRefactoryResolver(SupportedLanguages language)
{ {
this.language = language; this.language = language;
this.projectContent = ParserService.CurrentProjectContent; this.projectContent = ParserService.CurrentProjectContent;
}
bool IsCaseSensitive(SupportedLanguages language)
{
switch (language) { switch (language) {
case SupportedLanguages.CSharp: case SupportedLanguages.CSharp:
return true; languageProperties = LanguageProperties.CSharp;
break;
case SupportedLanguages.VBNet: case SupportedLanguages.VBNet:
return false; languageProperties = LanguageProperties.VBNet;
break;
default: default:
throw new NotSupportedException("The language " + language + " is not supported in the resolver"); throw new NotSupportedException("The language " + language + " is not supported in the resolver");
} }
@ -93,15 +98,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
int caretColumn, int caretColumn,
string fileName) string fileName)
{ {
caseSensitive = IsCaseSensitive(language);
if (expression == null) { if (expression == null) {
expression = ""; expression = "";
} }
expression = expression.TrimStart(null); expression = expression.TrimStart(null);
if (!caseSensitive) {
expression = expression.ToLower();
}
this.caretLine = caretLineNumber; this.caretLine = caretLineNumber;
this.caretColumn = caretColumn; this.caretColumn = caretColumn;
@ -132,7 +132,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
} }
} }
} }
lookupTableVisitor = new LookupTableVisitor(); lookupTableVisitor = new LookupTableVisitor(languageProperties.NameComparer);
lookupTableVisitor.Visit(fileCompilationUnit, null); lookupTableVisitor.Visit(fileCompilationUnit, null);
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null); NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null);
@ -312,11 +312,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
bool IsSameName(string name1, string name2) bool IsSameName(string name1, string name2)
{ {
if (IsCaseSensitive(language)) { return languageProperties.NameComparer.Equals(name1, name2);
return name1 == name2;
} else {
return name1.ToLower() == name2.ToLower();
}
} }
bool IsInside(Point between, Point start, Point end) bool IsInside(Point between, Point start, Point end)
@ -406,34 +402,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
} }
#endregion #endregion
#region SearchIndexer
public ArrayList SearchIndexer(IReturnType type)
{
// TODO: indexer for arrays
IClass curType = SearchType(type.FullyQualifiedName, null, null);
return SearchIndexer(new ArrayList(), curType);
}
ArrayList SearchIndexer(ArrayList indexer, IClass curType)
{
if (curType == null)
return indexer;
bool isClassInInheritanceTree = false;
if (callingClass != null)
isClassInInheritanceTree = callingClass.IsTypeInInheritanceTree(curType);
foreach (IIndexer i in curType.Indexer) {
if (i.MustBeShown(callingClass, true, isClassInInheritanceTree) && !((i.Modifiers & ModifierEnum.Override) == ModifierEnum.Override)) {
indexer.Add(i);
}
}
IClass baseClass = curType.BaseClass;
if (baseClass != null) {
return SearchIndexer(indexer, baseClass);
}
return indexer;
}
#endregion
#region SearchMember #region SearchMember
// no methods or indexer // no methods or indexer
public IReturnType SearchMember(IReturnType type, string memberName) public IReturnType SearchMember(IReturnType type, string memberName)
@ -552,8 +520,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
LocalLookupVariable SearchVariable(string name) LocalLookupVariable SearchVariable(string name)
{ {
ArrayList variables = (ArrayList)lookupTableVisitor.variables[IsCaseSensitive(language) ? name : name.ToLower()]; if (!lookupTableVisitor.Variables.ContainsKey(name))
if (variables == null || variables.Count <= 0) { return null;
List<LocalLookupVariable> variables = lookupTableVisitor.Variables[name];
if (variables.Count <= 0) {
return null; return null;
} }
@ -569,16 +539,21 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
public ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName) public ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName)
{ {
if (!IsCaseSensitive(language)) { ArrayList result;
caseSensitive = false; if (language == SupportedLanguages.VBNet) {
result = new ArrayList();
foreach (string primitive in TypeReference.GetPrimitiveTypesVB()) {
result.Add(Char.ToUpper(primitive[0]) + primitive.Substring(1));
}
} else {
result = new ArrayList(TypeReference.GetPrimitiveTypes());
} }
ArrayList result = new ArrayList(TypeReference.GetPrimitiveTypes());
ParseInformation parseInfo = ParserService.GetParseInformation(fileName); ParseInformation parseInfo = ParserService.GetParseInformation(fileName);
ICSharpCode.NRefactory.Parser.AST.CompilationUnit fileCompilationUnit = parseInfo.MostRecentCompilationUnit.Tag as ICSharpCode.NRefactory.Parser.AST.CompilationUnit; ICSharpCode.NRefactory.Parser.AST.CompilationUnit fileCompilationUnit = parseInfo.MostRecentCompilationUnit.Tag as ICSharpCode.NRefactory.Parser.AST.CompilationUnit;
if (fileCompilationUnit == null) { if (fileCompilationUnit == null) {
return null; return null;
} }
lookupTableVisitor = new LookupTableVisitor(); lookupTableVisitor = new LookupTableVisitor(languageProperties.NameComparer);
lookupTableVisitor.Visit(fileCompilationUnit, null); lookupTableVisitor.Visit(fileCompilationUnit, null);
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null); NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null);
@ -602,20 +577,18 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
//} //}
} }
} }
foreach (string name in lookupTableVisitor.variables.Keys) { foreach (KeyValuePair<string, List<LocalLookupVariable>> pair in lookupTableVisitor.Variables) {
ArrayList variables = (ArrayList)lookupTableVisitor.variables[name]; if (pair.Value != null && pair.Value.Count > 0) {
if (variables != null && variables.Count > 0) { foreach (LocalLookupVariable v in pair.Value) {
foreach (LocalLookupVariable v in variables) {
if (IsInside(new Point(caretColumn, caretLine), v.StartPos, v.EndPos)) { if (IsInside(new Point(caretColumn, caretLine), v.StartPos, v.EndPos)) {
// LocalLookupVariable in no known Type in DisplayBindings.TextEditor // convert to a field for display
// so add Field for the Variables result.Add(new DefaultField(TypeVisitor.CreateReturnType(v.TypeRef, this), pair.Key, ModifierEnum.None, new DefaultRegion(v.StartPos, v.EndPos), callingClass));
result.Add(new DefaultField(TypeVisitor.CreateReturnType(v.TypeRef, this), name, ModifierEnum.None, new DefaultRegion(v.StartPos, v.EndPos), callingClass));
break; break;
} }
} }
} }
} }
result.AddRange(projectContent.GetNamespaceContents("")); projectContent.AddNamespaceContents(result, "", languageProperties, true);
foreach (IUsing u in cu.Usings) { foreach (IUsing u in cu.Usings) {
if (u != null) { if (u != null) {
foreach (string name in u.Usings) { foreach (string name in u.Usings) {

2
src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs

@ -377,7 +377,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
static IReturnType WrapArray(IReturnType t, TypeReference reference) static IReturnType WrapArray(IReturnType t, TypeReference reference)
{ {
if (reference.IsArrayType) { if (reference.IsArrayType) {
for (int i = 0; i < reference.RankSpecifier.Length; ++i) { for (int i = reference.RankSpecifier.Length - 1; i >= 0; --i) {
t = new ArrayReturnType(t, reference.RankSpecifier[i] + 1); t = new ArrayReturnType(t, reference.RankSpecifier[i] + 1);
} }
} }

12
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -121,6 +121,18 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
ICSharpCode.SharpDevelop.Dom.LanguageProperties languageProperties = ICSharpCode.SharpDevelop.Dom.LanguageProperties.CSharp;
[Browsable(false)]
public ICSharpCode.SharpDevelop.Dom.LanguageProperties LanguageProperties {
get {
return languageProperties;
}
set {
languageProperties = value;
}
}
[Browsable(false)] [Browsable(false)]
public string Configuration { public string Configuration {
get { get {

4
src/Main/Base/Project/Src/Project/IProject.cs

@ -32,6 +32,10 @@ namespace ICSharpCode.SharpDevelop.Project
get; get;
} }
ICSharpCode.SharpDevelop.Dom.LanguageProperties LanguageProperties {
get;
}
string FileName { string FileName {
get; get;
} }

227
src/Main/Base/Project/Src/Services/ParserService/CaseSensitiveProjectContent.cs

@ -22,23 +22,67 @@ using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.Core namespace ICSharpCode.Core
{ {
public class CaseSensitiveProjectContent : IProjectContent public class DefaultProjectContent : IProjectContent
{ {
List<IProjectContent> referencedContents = new List<IProjectContent>(); List<IProjectContent> referencedContents = new List<IProjectContent>();
Dictionary<string, IClass> classes = new Dictionary<string, IClass>(); List<Dictionary<string, IClass>> classLists = new List<Dictionary<string, IClass>>();
Hashtable namespaces = new Hashtable(); Hashtable namespaces = new Hashtable();
XmlDoc xmlDoc = new XmlDoc(); XmlDoc xmlDoc = new XmlDoc();
public List<Dictionary<string, IClass>> ClassLists {
get {
if (classLists.Count == 0) {
classLists.Add(new Dictionary<string, IClass>(language.NameComparer));
}
return classLists;
}
}
Dictionary<string, IClass> GetClasses(LanguageProperties language)
{
for (int i = 0; i < classLists.Count; ++i) {
if (classLists[i].Comparer == language.NameComparer)
return classLists[i];
}
Dictionary<string, IClass> d;
if (classLists.Count > 0) {
Dictionary<string, IClass> oldList = classLists[0];
d = new Dictionary<string, IClass>(oldList.Count, language.NameComparer);
foreach (KeyValuePair<string, IClass> pair in oldList) {
d.Add(pair.Key, pair.Value);
}
} else {
d = new Dictionary<string, IClass>(language.NameComparer);
}
classLists.Add(d);
return d;
}
public XmlDoc XmlDoc { public XmlDoc XmlDoc {
get { get {
return xmlDoc; return xmlDoc;
} }
} }
public ICollection<IClass> Classes { public ICollection<IClass> Classes {
get { get {
return classes.Values; return ClassLists[0].Values;
}
}
LanguageProperties language = LanguageProperties.CSharp;
/// <summary>
/// Gets the properties of the language this project content was written in.
/// </summary>
public LanguageProperties Language {
get {
return language;
}
set {
if (value == null) throw new ArgumentNullException();
language = value;
} }
} }
@ -70,13 +114,13 @@ namespace ICSharpCode.Core
public static IProjectContent Create(Assembly assembly) public static IProjectContent Create(Assembly assembly)
{ {
CaseSensitiveProjectContent newProjectContent = new CaseSensitiveProjectContent(); DefaultProjectContent newProjectContent = new DefaultProjectContent();
ICompilationUnit assemblyCompilationUnit = new DefaultCompilationUnit(newProjectContent); ICompilationUnit assemblyCompilationUnit = new DefaultCompilationUnit(newProjectContent);
foreach (Type type in assembly.GetTypes()) { foreach (Type type in assembly.GetTypes()) {
if (!type.FullName.StartsWith("<") && type.IsPublic) { if (!type.FullName.StartsWith("<") && type.IsPublic) {
newProjectContent.AddClassToNamespaceList(new ReflectionClass(assemblyCompilationUnit, type, null)); newProjectContent.AddClassToNamespaceListInternal(new ReflectionClass(assemblyCompilationUnit, type, null));
} }
} }
string fileName = LookupLocalizedXmlDoc(assembly.Location); string fileName = LookupLocalizedXmlDoc(assembly.Location);
@ -93,44 +137,78 @@ namespace ICSharpCode.Core
return newProjectContent; return newProjectContent;
} }
public static IProjectContent Create(IProject project) internal static IProjectContent CreateUninitalized(IProject project)
{ {
CaseSensitiveProjectContent newProjectContent = new CaseSensitiveProjectContent(); DefaultProjectContent newProjectContent = new DefaultProjectContent();
newProjectContent.project = project;
newProjectContent.language = project.LanguageProperties;
newProjectContent.referencedContents.Add(ProjectContentRegistry.GetMscorlibContent()); newProjectContent.referencedContents.Add(ProjectContentRegistry.GetMscorlibContent());
return newProjectContent;
}
public static IProjectContent Create(IProject project)
{
IProjectContent newProjectContent = CreateUninitalized(project);
if (newProjectContent is DefaultProjectContent) {
((DefaultProjectContent)newProjectContent).Initialize1();
((DefaultProjectContent)newProjectContent).Initialize2();
}
return newProjectContent;
}
IProject project;
// project is only used for initialization, the field is set to null after
// initialization has completed.
internal void Initialize1()
{
foreach (ProjectItem item in project.Items.ToArray()) { foreach (ProjectItem item in project.Items.ToArray()) {
switch (item.ItemType) { switch (item.ItemType) {
case ItemType.Reference: case ItemType.Reference:
case ItemType.ProjectReference: case ItemType.ProjectReference:
IProjectContent referencedContent = ProjectContentRegistry.GetProjectContentForReference(item as ReferenceProjectItem); IProjectContent referencedContent = ProjectContentRegistry.GetProjectContentForReference(item as ReferenceProjectItem);
if (referencedContent != null) { if (referencedContent != null) {
newProjectContent.referencedContents.Add(referencedContent); referencedContents.Add(referencedContent);
}
break;
case ItemType.Compile:
ParseInformation parseInfo = ParserService.ParseFile(item.FileName, null, true, false);
if (parseInfo != null) {
newProjectContent.UpdateCompilationUnit(null, parseInfo.BestCompilationUnit as ICompilationUnit, item.FileName, true);
} }
break; break;
} }
} }
}
return newProjectContent;
internal void Initialize2()
{
foreach (ProjectItem item in project.Items.ToArray()) {
if (item.ItemType == ItemType.Compile) {
ParseInformation parseInfo = ParserService.ParseFile(item.FileName, null, true, false);
if (parseInfo != null) {
UpdateCompilationUnit(null, parseInfo.BestCompilationUnit as ICompilationUnit, item.FileName, true);
}
}
}
project = null;
} }
public Hashtable AddClassToNamespaceList(IClass addClass) public Hashtable AddClassToNamespaceList(IClass addClass)
{ {
classes[addClass.FullyQualifiedName] = addClass; lock (namespaces) {
return AddClassToNamespaceListInternal(addClass);
}
}
Hashtable AddClassToNamespaceListInternal(IClass addClass)
{
foreach (Dictionary<string, IClass> classes in ClassLists) {
classes[addClass.FullyQualifiedName] = addClass;
}
string nSpace = addClass.Namespace; string nSpace = addClass.Namespace;
if (nSpace == null) { if (nSpace == null) {
nSpace = String.Empty; nSpace = String.Empty;
} }
string[] path = nSpace.Split('.'); Hashtable cur = namespaces;
lock (namespaces) { if (nSpace.Length > 0) {
Hashtable cur = namespaces; string[] path = nSpace.Split('.');
for (int i = 0; i < path.Length; ++i) { for (int i = 0; i < path.Length; ++i) {
object curPath = cur[path[i]]; object curPath = cur[path[i]];
if (curPath == null) { if (curPath == null) {
@ -143,12 +221,12 @@ namespace ICSharpCode.Core
} }
cur = (Hashtable)curPath; cur = (Hashtable)curPath;
} }
string name = addClass.Name == null ? "" : addClass.Name;
cur[name] = addClass;
return cur;
} }
string name = addClass.Name == null ? "" : addClass.Name;
cur[name] = addClass;
return cur;
} }
public void UpdateCompilationUnit(ICompilationUnit oldUnit, ICompilationUnit parserOutput, string fileName, bool updateCommentTags) public void UpdateCompilationUnit(ICompilationUnit oldUnit, ICompilationUnit parserOutput, string fileName, bool updateCommentTags)
@ -158,53 +236,66 @@ namespace ICSharpCode.Core
TaskService.UpdateCommentTags(fileName, parserOutput.TagComments); TaskService.UpdateCommentTags(fileName, parserOutput.TagComments);
} }
if (oldUnit != null) { lock (namespaces) {
RemoveClasses(oldUnit); if (oldUnit != null) {
} RemoveClasses(oldUnit);
}
ICompilationUnit cu = (ICompilationUnit)parserOutput;
foreach (IClass c in cu.Classes) { ICompilationUnit cu = (ICompilationUnit)parserOutput;
AddClassToNamespaceList(c); foreach (IClass c in cu.Classes) {
AddClassToNamespaceListInternal(c);
}
} }
} }
void RemoveClasses(ICompilationUnit cu) void RemoveClasses(ICompilationUnit cu)
{ {
if (cu != null) { if (cu != null) {
lock (classes) { foreach (IClass c in cu.Classes) {
foreach (IClass c in cu.Classes) { foreach (Dictionary<string, IClass> classes in ClassLists) {
classes.Remove(c.FullyQualifiedName); classes.Remove(c.FullyQualifiedName);
} }
} }
// TODO: remove classes from namespace lists
} }
} }
#region Default Parser Layer dependent functions #region Default Parser Layer dependent functions
public IClass GetClass(string typeName) public IClass GetClass(string typeName)
{ {
return GetClass(typeName, language, true);
}
public IClass GetClass(string typeName, LanguageProperties language, bool lookInReferences)
{
// Console.WriteLine("GetClass({0}) is known:{1}", typeName, classes.ContainsKey(typeName)); // Console.WriteLine("GetClass({0}) is known:{1}", typeName, classes.ContainsKey(typeName));
Dictionary<string, IClass> classes = GetClasses(language);
if (classes.ContainsKey(typeName)) { if (classes.ContainsKey(typeName)) {
return classes[typeName]; return classes[typeName];
} }
// Search in references: // Search in references:
foreach (IProjectContent content in referencedContents) { if (lookInReferences) {
IClass classFromContent = content.GetClass(typeName); foreach (IProjectContent content in referencedContents) {
if (classFromContent != null) { IClass classFromContent = content.GetClass(typeName, language, false);
return classFromContent; if (classFromContent != null) {
return classFromContent;
}
} }
} }
// not found -> maybe nested type -> trying to find class that contains this one. // not found -> maybe nested type -> trying to find class that contains this one.
int lastIndex = typeName.LastIndexOf('.'); int lastIndex = typeName.LastIndexOf('.');
if (lastIndex > 0) { if (lastIndex > 0) {
string innerName = typeName.Substring(lastIndex + 1);
string outerName = typeName.Substring(0, lastIndex); string outerName = typeName.Substring(0, lastIndex);
IClass upperClass = GetClass(outerName); if (classes.ContainsKey(outerName)) {
if (upperClass != null && upperClass.InnerClasses != null) { IClass upperClass = classes[outerName];
foreach (IClass c in upperClass.InnerClasses) { if (upperClass.InnerClasses != null) {
if (c.Name == innerName) { string innerName = typeName.Substring(lastIndex + 1);
return c; foreach (IClass c in upperClass.InnerClasses) {
if (language.NameComparer.Equals(c.Name, innerName)) {
return c;
}
} }
} }
} }
@ -215,18 +306,19 @@ namespace ICSharpCode.Core
public ArrayList GetNamespaceContents(string subNameSpace) public ArrayList GetNamespaceContents(string subNameSpace)
{ {
ArrayList namespaceList = new ArrayList(); ArrayList namespaceList = new ArrayList();
AddNamespaceContents(namespaceList, subNameSpace, language, true);
return namespaceList;
}
public void AddNamespaceContents(ArrayList list, string subNameSpace, LanguageProperties language, bool lookInReferences)
{
if (subNameSpace == null) { if (subNameSpace == null) {
return namespaceList; return;
} }
foreach (IProjectContent content in referencedContents) { if (lookInReferences) {
foreach (object o in content.GetNamespaceContents(subNameSpace)) { foreach (IProjectContent content in referencedContents) {
if (o is string) { content.AddNamespaceContents(list, subNameSpace, language, false);
if (!namespaceList.Contains(o))
namespaceList.Add(o);
} else {
namespaceList.Add(o);
}
} }
} }
@ -237,7 +329,7 @@ namespace ICSharpCode.Core
for (int i = 0; i < path.Length; ++i) { for (int i = 0; i < path.Length; ++i) {
if (!(cur[path[i]] is Hashtable)) { if (!(cur[path[i]] is Hashtable)) {
// namespace does not exist in this project content // namespace does not exist in this project content
return namespaceList; return;
} }
cur = (Hashtable)cur[path[i]]; cur = (Hashtable)cur[path[i]];
} }
@ -245,26 +337,31 @@ namespace ICSharpCode.Core
foreach (DictionaryEntry entry in cur) { foreach (DictionaryEntry entry in cur) {
if (entry.Value is Hashtable) { if (entry.Value is Hashtable) {
if (!namespaceList.Contains(entry.Key)) if (!list.Contains(entry.Key))
namespaceList.Add(entry.Key); list.Add(entry.Key);
} else { } else {
namespaceList.Add(entry.Value); if (!list.Contains(entry.Value))
list.Add(entry.Value);
} }
} }
return namespaceList;
} }
public bool NamespaceExists(string name) public bool NamespaceExists(string name)
{ {
// Console.WriteLine("NamespaceExists({0}) == ", name); return NamespaceExists(name, language, true);
}
public bool NamespaceExists(string name, LanguageProperties language, bool lookInReferences)
{
if (name == null) { if (name == null) {
return false; return false;
} }
foreach (IProjectContent content in referencedContents) { if (lookInReferences) {
if (content.NamespaceExists(name)) { foreach (IProjectContent content in referencedContents) {
return true; if (content.NamespaceExists(name, language, false)) {
return true;
}
} }
} }

11
src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs

@ -32,6 +32,13 @@ namespace ICSharpCode.Core
get; get;
} }
/// <summary>
/// Gets the properties of the language this project content was written in.
/// </summary>
LanguageProperties Language {
get;
}
string GetXmlDocumentation(string memberTag); string GetXmlDocumentation(string memberTag);
Hashtable AddClassToNamespaceList(IClass addClass); Hashtable AddClassToNamespaceList(IClass addClass);
@ -41,6 +48,10 @@ namespace ICSharpCode.Core
bool NamespaceExists(string name); bool NamespaceExists(string name);
ArrayList GetNamespaceContents(string subNameSpace); ArrayList GetNamespaceContents(string subNameSpace);
IClass GetClass(string typeName, LanguageProperties language, bool lookInReferences);
bool NamespaceExists(string name, LanguageProperties language, bool lookInReferences);
void AddNamespaceContents(ArrayList list, string subNameSpace, LanguageProperties language, bool lookInReferences);
string SearchNamespace(string name, ICompilationUnit unit, int caretLine, int caretColumn); string SearchNamespace(string name, ICompilationUnit unit, int caretLine, int caretColumn);
IClass SearchType(string name, IClass curType, int caretLine, int caretColumn); IClass SearchType(string name, IClass curType, int caretLine, int caretColumn);
IClass SearchType(string name, IClass curType, ICompilationUnit unit, int caretLine, int caretColumn); IClass SearchType(string name, IClass curType, ICompilationUnit unit, int caretLine, int caretColumn);

54
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -39,7 +39,7 @@ namespace ICSharpCode.Core
public static IProjectContent CurrentProjectContent { public static IProjectContent CurrentProjectContent {
get { get {
if (ProjectService.CurrentProject == null || !projectContents.ContainsKey(ProjectService.CurrentProject)) { if (ProjectService.CurrentProject == null || !projectContents.ContainsKey(ProjectService.CurrentProject)) {
return new CaseSensitiveProjectContent(); return defaultProjectContent;
} }
return projectContents[ProjectService.CurrentProject]; return projectContents[ProjectService.CurrentProject];
} }
@ -74,17 +74,37 @@ namespace ICSharpCode.Core
static void LoadSolutionProjects() static void LoadSolutionProjects()
{ {
List<DefaultProjectContent> createdContents = new List<DefaultProjectContent>();
foreach (IProject project in ProjectService.OpenSolution.Projects) { foreach (IProject project in ProjectService.OpenSolution.Projects) {
try { try {
IProjectContent newContent = CaseSensitiveProjectContent.Create(project); IProjectContent newContent = DefaultProjectContent.CreateUninitalized(project);
lock (projectContents) { lock (projectContents) {
projectContents[project] = newContent; projectContents[project] = newContent;
} }
if (newContent is DefaultProjectContent) {
createdContents.Add((DefaultProjectContent)newContent);
}
} catch (Exception e) { } catch (Exception e) {
Console.WriteLine("Error while retrieving project contents from {0}:", project); Console.WriteLine("Error while retrieving project contents from {0}:", project);
ICSharpCode.Core.MessageService.ShowError(e); ICSharpCode.Core.MessageService.ShowError(e);
} }
} }
foreach (DefaultProjectContent newContent in createdContents) {
try {
newContent.Initialize1();
} catch (Exception e) {
Console.WriteLine("Error while initializing project references:" + newContent);
ICSharpCode.Core.MessageService.ShowError(e);
}
}
foreach (DefaultProjectContent newContent in createdContents) {
try {
newContent.Initialize2();
} catch (Exception e) {
Console.WriteLine("Error while initializing project contents:" + newContent);
ICSharpCode.Core.MessageService.ShowError(e);
}
}
} }
public static IProjectContent GetProjectContent(IProject project) public static IProjectContent GetProjectContent(IProject project)
@ -190,7 +210,7 @@ namespace ICSharpCode.Core
return null; return null;
} }
static IProjectContent defaultProjectContent = new CaseSensitiveProjectContent(); static IProjectContent defaultProjectContent = new DefaultProjectContent();
public static ParseInformation ParseFile(string fileName, string fileContent, bool updateCommentTags, bool fireUpdate) public static ParseInformation ParseFile(string fileName, string fileContent, bool updateCommentTags, bool fireUpdate)
{ {
@ -256,8 +276,8 @@ namespace ICSharpCode.Core
if (fireEvent) { if (fireEvent) {
try { try {
OnParseInformationUpdated(new ParseInformationEventArgs(fileName, parseInformation, parserOutput)); OnParseInformationUpdated(new ParseInformationEventArgs(fileName, parseInformation, parserOutput));
} catch (Exception e) { } catch (Exception e) {
Console.WriteLine(e); Console.WriteLine(e);
} }
} }
@ -270,7 +290,7 @@ namespace ICSharpCode.Core
return parseInformation; return parseInformation;
} }
public static ParseInformation GetParseInformation(string fileName) public static ParseInformation GetParseInformation(string fileName)
{ {
@ -322,19 +342,19 @@ namespace ICSharpCode.Core
} }
public static ResolveResult Resolve(string expression, public static ResolveResult Resolve(string expression,
int caretLineNumber, int caretLineNumber,
int caretColumn, int caretColumn,
string fileName, string fileName,
string fileContent) string fileContent)
{ {
// added exception handling here to prevent silly parser exceptions from // added exception handling here to prevent silly parser exceptions from
// being thrown and corrupting the textarea control // being thrown and corrupting the textarea control
//try { //try {
IParser parser = GetParser(fileName); IParser parser = GetParser(fileName);
if (parser != null) { if (parser != null) {
return parser.CreateResolver().Resolve(expression, caretLineNumber, caretColumn, fileName); return parser.CreateResolver().Resolve(expression, caretLineNumber, caretColumn, fileName);
} }
return null; return null;
//} catch { //} catch {
// return null; // return null;
//} //}
@ -355,13 +375,13 @@ namespace ICSharpCode.Core
// { // {
// List<IComment> miscComments = new List<IComment>(); // List<IComment> miscComments = new List<IComment>();
// List<IComment> dokuComments = new List<IComment>(); // List<IComment> dokuComments = new List<IComment>();
// //
// public override List<IComment> MiscComments { // public override List<IComment> MiscComments {
// get { // get {
// return miscComments; // return miscComments;
// } // }
// } // }
// //
// public override List<IComment> DokuComments { // public override List<IComment> DokuComments {
// get { // get {
// return dokuComments; // return dokuComments;

9
src/Main/Base/Project/Src/Services/ParserService/ProjectContentRegistry.cs

@ -31,7 +31,7 @@ namespace ICSharpCode.Core
if (contents.ContainsKey("mscorlib")) { if (contents.ContainsKey("mscorlib")) {
return contents["mscorlib"]; return contents["mscorlib"];
} }
contents["mscorlib"] = CaseSensitiveProjectContent.Create(typeof(object).Assembly); contents["mscorlib"] = DefaultProjectContent.Create(typeof(object).Assembly);
return contents["mscorlib"]; return contents["mscorlib"];
} }
@ -47,24 +47,27 @@ namespace ICSharpCode.Core
return contents[item.Include]; return contents[item.Include];
} }
int time = Environment.TickCount;
Assembly assembly = null; Assembly assembly = null;
try { try {
assembly = Assembly.ReflectionOnlyLoadFrom(item.FileName); assembly = Assembly.ReflectionOnlyLoadFrom(item.FileName);
if (assembly != null) { if (assembly != null) {
contents[item.FileName] = CaseSensitiveProjectContent.Create(assembly); contents[item.FileName] = DefaultProjectContent.Create(assembly);
return contents[item.FileName]; return contents[item.FileName];
} }
} catch (Exception) { } catch (Exception) {
try { try {
assembly = LoadGACAssembly(item.Include, true); assembly = LoadGACAssembly(item.Include, true);
if (assembly != null) { if (assembly != null) {
contents[item.Include] = CaseSensitiveProjectContent.Create(assembly); contents[item.Include] = DefaultProjectContent.Create(assembly);
return contents[item.Include]; return contents[item.Include];
} }
} catch (Exception e) { } catch (Exception e) {
Console.WriteLine("Can't load assembly '{0}' : " + e.Message, item.Include); Console.WriteLine("Can't load assembly '{0}' : " + e.Message, item.Include);
} }
} finally {
Console.WriteLine("Loaded {0} in {1}ms", item.Include, Environment.TickCount - time);
} }
return null; return null;

5
src/Main/Base/Project/Src/TextEditor/Gui/Editor/InsightWindow/MethodInsightDataProvider.cs

@ -77,7 +77,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
if (result == null) if (result == null)
return; return;
foreach (IMethod method in result.ResolvedType.GetMethods()) { foreach (IMethod method in result.ResolvedType.GetMethods()) {
if (method.IsConstructor) { if (method.IsConstructor && !method.IsStatic) {
methods.Add(method); methods.Add(method);
} }
} }
@ -85,8 +85,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
MethodResolveResult result = results as MethodResolveResult; MethodResolveResult result = results as MethodResolveResult;
if (result == null) if (result == null)
return; return;
IProjectContent p = ParserService.CurrentProjectContent;
foreach (IMethod method in result.ContainingType.GetMethods()) { foreach (IMethod method in result.ContainingType.GetMethods()) {
if (method.Name == result.Name) { if (p.Language.NameComparer.Equals(method.Name, result.Name)) {
methods.Add(method); methods.Add(method);
} }
} }

4
src/Main/Base/Test/NRefactoryResolverTests.cs

@ -16,7 +16,7 @@ namespace ICSharpCode.SharpDevelop.Tests
{ {
ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(ICSharpCode.NRefactory.Parser.SupportedLanguages.CSharp, new StringReader(fileContent)); ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(ICSharpCode.NRefactory.Parser.SupportedLanguages.CSharp, new StringReader(fileContent));
p.Parse(); p.Parse();
IProjectContent pc = new CaseSensitiveProjectContent(); IProjectContent pc = new DefaultProjectContent();
lastPC = pc; lastPC = pc;
NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor(pc); NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor(pc);
visitor.Visit(p.CompilationUnit, null); visitor.Visit(p.CompilationUnit, null);
@ -36,7 +36,7 @@ namespace ICSharpCode.SharpDevelop.Tests
{ {
ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(ICSharpCode.NRefactory.Parser.SupportedLanguages.VBNet, new StringReader(fileContent)); ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(ICSharpCode.NRefactory.Parser.SupportedLanguages.VBNet, new StringReader(fileContent));
p.Parse(); p.Parse();
IProjectContent pc = new CaseSensitiveProjectContent(); IProjectContent pc = new DefaultProjectContent();
lastPC = pc; lastPC = pc;
NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor(pc); NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor(pc);
visitor.Visit(p.CompilationUnit, null); visitor.Visit(p.CompilationUnit, null);

82
src/SharpDevelop.sln

@ -1,35 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 9.00 Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.1 # SharpDevelop 2.0.0.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.framework.dll", "Tools\NUnit\src\NUnitFramework\framework\nunit.framework.dll.csproj", "{83DD7E12-A705-4DBA-9D71-09C8973D9382}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.core.dll", "Tools\NUnit\src\NUnitFramework\core\nunit.core.dll.csproj", "{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsUI", "Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj", "{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.extensions.dll", "Tools\NUnit\src\NUnitFramework\extensions\nunit.extensions.dll.csproj", "{98B10E98-003C-45A0-9587-119142E39986}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
@ -76,6 +46,36 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\St
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.framework.dll", "Tools\NUnit\src\NUnitFramework\framework\nunit.framework.dll.csproj", "{83DD7E12-A705-4DBA-9D71-09C8973D9382}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.core.dll", "Tools\NUnit\src\NUnitFramework\core\nunit.core.dll.csproj", "{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsUI", "Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj", "{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.extensions.dll", "Tools\NUnit\src\NUnitFramework\extensions\nunit.extensions.dll.csproj", "{98B10E98-003C-45A0-9587-119142E39986}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -157,17 +157,6 @@ Global
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{4980B743-B32F-4aba-AABD-45E2CAD3568D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{98B10E98-003C-45A0-9587-119142E39986} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{83DD7E12-A705-4DBA-9D71-09C8973D9382} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
@ -185,5 +174,16 @@ Global
{B08385CD-F0CC-488C-B4F4-EEB34B6D2688} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} {B08385CD-F0CC-488C-B4F4-EEB34B6D2688} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{98B10E98-003C-45A0-9587-119142E39986} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{83DD7E12-A705-4DBA-9D71-09C8973D9382} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{4980B743-B32F-4aba-AABD-45E2CAD3568D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

Loading…
Cancel
Save