Browse Source

The refactoring of the upper code completion layer has begun ...

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@34 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Mike Krüger 21 years ago
parent
commit
3538eae26a
  1. 22
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs
  2. 3
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  3. 13
      src/Main/Base/Project/Src/Dom/IClass.cs
  4. 22
      src/Main/Base/Project/Src/Dom/ICompilationUnit.cs
  5. 30
      src/Main/Base/Project/Src/Dom/ICompilationUnitBase.cs
  6. 4
      src/Main/Base/Project/Src/Dom/IParser.cs
  7. 51
      src/Main/Base/Project/Src/Dom/Implementations/AbstractClass.cs
  8. 14
      src/Main/Base/Project/Src/Dom/Implementations/AbstractCompilationUnit.cs
  9. 11
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/Class.cs
  10. 15
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  11. 13
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  12. 2
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
  13. 14
      src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
  14. 2
      src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ReferenceFolderNode.cs
  15. 2
      src/Main/Base/Project/Src/Services/AmbienceService/AmbienceReflectionDecorator.cs
  16. 34
      src/Main/Base/Project/Src/Services/ParserService/CaseSensitiveProjectContent.cs
  17. 3
      src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs
  18. 12
      src/Main/Base/Project/Src/Services/ParserService/ParseInformation.cs
  19. 63
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

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

@ -77,20 +77,14 @@ namespace CSharpBinding.Parser @@ -77,20 +77,14 @@ namespace CSharpBinding.Parser
}
}
public ICompilationUnitBase Parse(string fileName)
public ICompilationUnit Parse(IProjectContent projectContent, string fileName)
{
// ICSharpCode.NRefactory.Parser.Parser p = new ICSharpCode.NRefactory.Parser.Parser();
//
// Lexer lexer = new Lexer(new FileReader(fileName));
// lexer.SpecialCommentTags = lexerTags;
// p.Parse(lexer);
Properties textEditorProperties = ((Properties)PropertyService.Get("ICSharpCode.TextEditor.Document.Document.DefaultDocumentAggregatorProperties", new Properties()));
ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(fileName, Encoding.GetEncoding(textEditorProperties.Get("Encoding", 1252)));
p.Lexer.SpecialCommentTags = lexerTags;
p.Parse();
NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor();
NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor(projectContent);
visitor.Visit(p.CompilationUnit, null);
visitor.Cu.FileName = fileName;
visitor.Cu.ErrorsDuringCompile = p.Errors.count > 0;
@ -99,19 +93,13 @@ namespace CSharpBinding.Parser @@ -99,19 +93,13 @@ namespace CSharpBinding.Parser
return visitor.Cu;
}
public ICompilationUnitBase Parse(string fileName, string fileContent)
{
// ICSharpCode.NRefactory.Parser.Parser p = new ICSharpCode.NRefactory.Parser.Parser();
//
// Lexer lexer = new Lexer(new StringReader(fileContent));
// lexer.SpecialCommentTags = lexerTags;
// p.Parse(lexer);
public ICompilationUnit Parse(IProjectContent projectContent, string fileName, string fileContent)
{
ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(ICSharpCode.NRefactory.Parser.SupportedLanguages.CSharp, new StringReader(fileContent));
p.Lexer.SpecialCommentTags = lexerTags;
p.Parse();
NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor();
NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor(projectContent);
visitor.Visit(p.CompilationUnit, null);
visitor.Cu.FileName = fileName;
visitor.Cu.ErrorsDuringCompile = p.Errors.count > 0;

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

@ -126,7 +126,6 @@ @@ -126,7 +126,6 @@
<Compile Include="Src\Services\AmbienceService\NetAmbience.cs" />
<Compile Include="Src\Services\AmbienceService\AmbienceReflectionDecorator.cs" />
<Compile Include="Src\Services\AmbienceService\AbstractAmbience.cs" />
<Compile Include="Src\Dom\ICompilationUnitBase.cs" />
<Compile Include="Src\Services\ParserService\ParseInformation.cs" />
<Compile Include="Src\Services\ParserService\AssemblyInformation.cs" />
<Compile Include="Src\Services\AmbienceService\AmbienceService.cs" />
@ -644,4 +643,4 @@ @@ -644,4 +643,4 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>
</Project>

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

@ -9,6 +9,7 @@ using System; @@ -9,6 +9,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Dom
{
@ -30,6 +31,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -30,6 +31,13 @@ namespace ICSharpCode.SharpDevelop.Dom
get;
}
/// <summary>
/// The project content in which this class is defined.
/// </summary>
IProjectContent ProjectContent {
get;
}
ICompilationUnit CompilationUnit {
get;
}
@ -77,5 +85,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -77,5 +85,10 @@ namespace ICSharpCode.SharpDevelop.Dom
object DeclaredIn {
get;
}
IClass BaseClass {
get;
}
}
}

22
src/Main/Base/Project/Src/Dom/ICompilationUnit.cs

@ -6,11 +6,31 @@ @@ -6,11 +6,31 @@
// </file>
using System.Collections.Generic;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Dom
{
public interface ICompilationUnit : ICompilationUnitBase
public interface ICompilationUnit
{
string FileName {
get;
set;
}
bool ErrorsDuringCompile {
get;
set;
}
object Tag {
get;
set;
}
IProjectContent ProjectContent {
get;
}
List<IUsing> Usings {
get;
}

30
src/Main/Base/Project/Src/Dom/ICompilationUnitBase.cs

@ -1,30 +0,0 @@ @@ -1,30 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System.Collections;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Dom
{
public interface ICompilationUnitBase
{
string FileName {
get;
set;
}
bool ErrorsDuringCompile {
get;
set;
}
object Tag {
get;
set;
}
}
}

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

@ -138,8 +138,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -138,8 +138,8 @@ namespace ICSharpCode.SharpDevelop.Dom
/// </summary>
bool CanParse(IProject project);
ICompilationUnitBase Parse(string fileName);
ICompilationUnitBase Parse(string fileName, string fileContent);
ICompilationUnit Parse(IProjectContent projectContent, string fileName);
ICompilationUnit Parse(IProjectContent projectContent, string fileName, string fileContent);
IResolver CreateResolver();
}

51
src/Main/Base/Project/Src/Dom/Implementations/AbstractClass.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using System.Diagnostics;
using System.Reflection;
using System.Collections;
using System.Collections.Generic;
@ -22,6 +23,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -22,6 +23,8 @@ namespace ICSharpCode.SharpDevelop.Dom
protected IRegion bodyRegion;
protected object declaredIn;
ICompilationUnit compilationUnit;
List<string> baseTypes = null;
List<IClass> innerClasses = null;
@ -37,10 +40,24 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -37,10 +40,24 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public abstract ICompilationUnit CompilationUnit {
get;
protected AbstractClass(ICompilationUnit compilationUnit)
{
this.compilationUnit = compilationUnit;
}
public ICompilationUnit CompilationUnit {
get {
return compilationUnit;
}
}
public IProjectContent ProjectContent {
get {
return CompilationUnit.ProjectContent;
}
}
public virtual ClassType ClassType {
get {
return classType;
@ -128,7 +145,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -128,7 +145,6 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public virtual int CompareTo(IClass value)
{
int cmp;
@ -195,6 +211,35 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -195,6 +211,35 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public IClass BaseClass {
get {
Debug.Assert(ProjectContent != null);
if (BaseTypes.Count > 0) {
IClass baseClass = ProjectContent.SearchType(BaseTypes[0], this, Region != null ? Region.BeginLine : 0, Region != null ? Region.BeginColumn : 0);
if (baseClass != null && baseClass.ClassType != ClassType.Interface) {
return baseClass;
}
}
// no baseType found
switch (ClassType) {
case ClassType.Enum:
return ProjectContent.GetClass("System.Enum");
case ClassType.Class:
if (FullyQualifiedName != "System.Object") {
return ProjectContent.GetClass("System.Object");
}
break;
case ClassType.Delegate:
return ProjectContent.GetClass("System.Delegate");
case ClassType.Struct:
return ProjectContent.GetClass("System.ValueType");
}
return null;
}
}
public class ClassInheritanceEnumerator : IEnumerator, IEnumerable
{
IClass topLevelClass;

14
src/Main/Base/Project/Src/Dom/Implementations/AbstractCompilationUnit.cs

@ -8,6 +8,7 @@ using System; @@ -8,6 +8,7 @@ using System;
using System.Collections;
using System.Diagnostics;
using System.Collections.Generic;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Dom
{
@ -22,6 +23,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -22,6 +23,7 @@ namespace ICSharpCode.SharpDevelop.Dom
protected List<FoldingRegion> foldingRegions = new List<FoldingRegion>();
protected string fileName = "";
protected List<Tag> tagComments = new List<Tag>();
IProjectContent projectContent;
public string FileName {
get {
@ -33,6 +35,12 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -33,6 +35,12 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public IProjectContent ProjectContent {
get {
return projectContent;
}
}
public bool ErrorsDuringCompile {
get {
return errorsDuringCompile;
@ -88,6 +96,12 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -88,6 +96,12 @@ namespace ICSharpCode.SharpDevelop.Dom
return tagComments;
}
}
protected AbstractCompilationUnit(IProjectContent projectContent)
{
this.projectContent = projectContent;
}
public override string ToString() {
return String.Format("[AbstractCompilationUnit: classes = {0}, fileName = {1}]",
classes.Count,

11
src/Main/Base/Project/Src/Dom/NRefactoryResolver/Class.cs

@ -10,11 +10,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -10,11 +10,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
{
public class Class : AbstractClass
{
ICompilationUnit cu;
public Class(ICompilationUnit cu, ClassType t, Modifier m, IRegion region)
public Class(ICompilationUnit cu, ClassType t, Modifier m, IRegion region) : base(cu)
{
this.cu = cu;
classType = t;
this.region = region;
modifiers = (ModifierEnum)m;
@ -57,11 +54,5 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -57,11 +54,5 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
}
public override ICompilationUnit CompilationUnit {
get {
return cu;
}
}
}
}

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

@ -9,6 +9,7 @@ using System.Collections.Generic; @@ -9,6 +9,7 @@ using System.Collections.Generic;
using RefParser = ICSharpCode.NRefactory.Parser;
using AST = ICSharpCode.NRefactory.Parser.AST;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
{
@ -18,7 +19,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -18,7 +19,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
public class NRefactoryASTConvertVisitor : RefParser.AbstractASTVisitor
{
ICompilationUnit cu = new CompilationUnit();
ICompilationUnit cu;
Stack currentNamespace = new Stack();
Stack currentClass = new Stack();
@ -28,8 +29,18 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -28,8 +29,18 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
}
class CompilationUnit : AbstractCompilationUnit
public NRefactoryASTConvertVisitor(IProjectContent projectContent)
{
cu = new CompilationUnit(projectContent);
}
// TODO: kill abstract compilation unit, replace with implementation. Maybe the whole Abstract layer ?
public class CompilationUnit : AbstractCompilationUnit
{
public CompilationUnit(IProjectContent projectContent) : base(projectContent)
{
}
public override List<IComment> MiscComments {
get {
return null;

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

@ -144,7 +144,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -144,7 +144,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
lookupTableVisitor = new LookupTableVisitor();
lookupTableVisitor.Visit(fileCompilationUnit, null);
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor();
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null);
cu = (ICompilationUnit)cSharpVisitor.Visit(fileCompilationUnit, null);
if (cu != null) {
callingClass = projectContent.GetInnermostClass(cu, caretLine, caretColumn);
@ -353,7 +354,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -353,7 +354,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
methods.Add(m);
}
}
IClass baseClass = projectContent.BaseClass(curType);
IClass baseClass = curType.BaseClass;
if (baseClass != null) {
return SearchMethod(methods, baseClass, memberName);
}
@ -378,7 +379,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -378,7 +379,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
indexer.Add(i);
}
}
IClass baseClass = projectContent.BaseClass(curType);
IClass baseClass = curType.BaseClass;
if (baseClass != null) {
return SearchIndexer(indexer, baseClass);
}
@ -674,7 +675,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -674,7 +675,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (fileCompilationUnit == null) {
return null;
}
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor();
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null);
cu = (ICompilationUnit)cSharpVisitor.Visit(fileCompilationUnit, null);
if (cu != null) {
callingClass = projectContent.GetInnermostClass(cu, caretLine, caretColumn);
@ -709,7 +711,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -709,7 +711,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
lookupTableVisitor = new LookupTableVisitor();
lookupTableVisitor.Visit(fileCompilationUnit, null);
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor();
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null);
cu = (ICompilationUnit)cSharpVisitor.Visit(fileCompilationUnit, null);
if (cu != null) {
callingClass = projectContent.GetInnermostClass(cu, caretLine, caretColumn);

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

@ -282,7 +282,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -282,7 +282,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (resolver.CallingClass == null) {
return null;
}
IClass baseClass = resolver.ProjectContent.BaseClass(resolver.CallingClass);
IClass baseClass = resolver.CallingClass.BaseClass;
if (baseClass == null) {
return null;
}

14
src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs

@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Dom
get {
List<IClass> innerClasses = new List<IClass>();
foreach (Type nestedType in type.GetNestedTypes(flags)) {
innerClasses.Add(new ReflectionClass(nestedType));
innerClasses.Add(new ReflectionClass(CompilationUnit, nestedType));
}
return innerClasses;
}
@ -123,16 +123,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -123,16 +123,6 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
/// <value>
/// A reflection class doesn't have a compilation unit (because
/// it is not parsed the information is gathered using reflection)
/// </value>
public override ICompilationUnit CompilationUnit {
get {
return null;
}
}
public static bool IsDelegate(Type type)
{
return type.IsSubclassOf(typeof(Delegate)) && type != typeof(MulticastDelegate);
@ -144,7 +134,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -144,7 +134,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public ReflectionClass(Type type)
public ReflectionClass(ICompilationUnit compilationUnit, Type type) : base(compilationUnit)
{
this.type = type;
FullyQualifiedName = type.FullName.Replace("+", ".");

2
src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ReferenceFolderNode.cs

@ -97,7 +97,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -97,7 +97,7 @@ namespace ICSharpCode.SharpDevelop.Gui
Nodes.Clear();
foreach (Type type in assembly.GetTypes()) {
if (!type.FullName.StartsWith("<") && type.IsPublic) {
IClass c = new ReflectionClass(type);
IClass c = new ReflectionClass(null, type);
TreeNode node = GetNodeByPath(c.Namespace, true);
new ClassNode(item.Project, c).AddTo(node);
}

2
src/Main/Base/Project/Src/Services/AmbienceService/AmbienceReflectionDecorator.cs

@ -94,7 +94,7 @@ namespace ICSharpCode.Core @@ -94,7 +94,7 @@ namespace ICSharpCode.Core
public string Convert(Type type)
{
return conv.Convert(new ReflectionClass(type));
return conv.Convert(new ReflectionClass(null, type));
}
public string Convert(FieldInfo field)

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

@ -71,9 +71,12 @@ namespace ICSharpCode.Core @@ -71,9 +71,12 @@ namespace ICSharpCode.Core
public static IProjectContent Create(Assembly assembly)
{
CaseSensitiveProjectContent newProjectContent = new CaseSensitiveProjectContent();
ICompilationUnit assemblyCompilationUnit = new ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryASTConvertVisitor.CompilationUnit(newProjectContent);
foreach (Type type in assembly.GetTypes()) {
if (!type.FullName.StartsWith("<") && type.IsPublic) {
newProjectContent.AddClassToNamespaceList(new ReflectionClass(type));
newProjectContent.AddClassToNamespaceList(new ReflectionClass(assemblyCompilationUnit, type));
}
}
string fileName = LookupLocalizedXmlDoc(assembly.Location);
@ -486,29 +489,6 @@ namespace ICSharpCode.Core @@ -486,29 +489,6 @@ namespace ICSharpCode.Core
return false;
}
public IClass BaseClass(IClass curClass)
{
foreach (string s in curClass.BaseTypes) {
IClass baseClass = SearchType(s, curClass, curClass.Region != null ? curClass.Region.BeginLine : 0, curClass.Region != null ? curClass.Region.BeginColumn : 0);
if (baseClass != null && baseClass.ClassType != ClassType.Interface) {
return baseClass;
}
}
// no baseType found
if (curClass.ClassType == ClassType.Enum) {
return GetClass("System.Enum");
} else if (curClass.ClassType == ClassType.Class) {
if (curClass.FullyQualifiedName != "System.Object") {
return GetClass("System.Object");
}
} else if (curClass.ClassType == ClassType.Delegate) {
return GetClass("System.Delegate");
} else if (curClass.ClassType == ClassType.Struct) {
return GetClass("System.ValueType");
}
return null;
}
bool IsInnerClass(IClass c, IClass possibleInnerClass)
{
foreach (IClass inner in c.InnerClasses) {
@ -563,7 +543,7 @@ namespace ICSharpCode.Core @@ -563,7 +543,7 @@ namespace ICSharpCode.Core
types.Add(c);
}
}
IClass baseClass = BaseClass(curType);
IClass baseClass = curType.BaseClass;
if (baseClass != null) {
ListTypes(types, baseClass, callingClass);
}
@ -629,7 +609,7 @@ namespace ICSharpCode.Core @@ -629,7 +609,7 @@ namespace ICSharpCode.Core
}
}
} else {
IClass baseClass = BaseClass(curType);
IClass baseClass = curType.BaseClass;
if (baseClass != null) {
ListMembers(members, baseClass, callingClass, showStatic);
}
@ -682,7 +662,7 @@ namespace ICSharpCode.Core @@ -682,7 +662,7 @@ namespace ICSharpCode.Core
}
}
} else {
IClass c = BaseClass(declaringType);
IClass c = declaringType.BaseClass;
return SearchMember(c, memberName);
}
return null;

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

@ -44,8 +44,9 @@ namespace ICSharpCode.Core @@ -44,8 +44,9 @@ namespace ICSharpCode.Core
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, ICompilationUnit unit, int caretLine, int caretColumn);
bool IsClassInInheritanceTree(IClass possibleBaseClass, IClass c);
IClass BaseClass(IClass curClass);
bool IsAccessible(IClass c, IDecoration member, IClass callingClass, bool isClassInInheritanceTree);
bool MustBeShown(IClass c, IDecoration member, IClass callingClass, bool showStatic, bool isClassInInheritanceTree);
ArrayList ListTypes(ArrayList types, IClass curType, IClass callingClass);

12
src/Main/Base/Project/Src/Services/ParserService/ParseInformation.cs

@ -28,10 +28,10 @@ namespace ICSharpCode.Core @@ -28,10 +28,10 @@ namespace ICSharpCode.Core
/// </summary>
public class ParseInformation
{
ICompilationUnitBase validCompilationUnit;
ICompilationUnitBase dirtyCompilationUnit;
ICompilationUnit validCompilationUnit;
ICompilationUnit dirtyCompilationUnit;
public ICompilationUnitBase ValidCompilationUnit {
public ICompilationUnit ValidCompilationUnit {
get {
return validCompilationUnit;
}
@ -40,7 +40,7 @@ namespace ICSharpCode.Core @@ -40,7 +40,7 @@ namespace ICSharpCode.Core
}
}
public ICompilationUnitBase DirtyCompilationUnit {
public ICompilationUnit DirtyCompilationUnit {
get {
return dirtyCompilationUnit;
}
@ -49,13 +49,13 @@ namespace ICSharpCode.Core @@ -49,13 +49,13 @@ namespace ICSharpCode.Core
}
}
public ICompilationUnitBase BestCompilationUnit {
public ICompilationUnit BestCompilationUnit {
get {
return validCompilationUnit == null ? dirtyCompilationUnit : validCompilationUnit;
}
}
public ICompilationUnitBase MostRecentCompilationUnit {
public ICompilationUnit MostRecentCompilationUnit {
get {
return dirtyCompilationUnit == null ? validCompilationUnit : dirtyCompilationUnit;
}

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

@ -163,6 +163,18 @@ namespace ICSharpCode.Core @@ -163,6 +163,18 @@ namespace ICSharpCode.Core
return ParseFile(fileName, fileContent, true, true);
}
static IProjectContent GetProjectContent(string fileName)
{
foreach (KeyValuePair<IProject, IProjectContent> projectContent in projectContents) {
if (projectContent.Key.IsFileInProject(fileName)) {
return projectContent.Value;
}
}
return null;
}
static IProjectContent defaultProjectContent = new CaseSensitiveProjectContent();
public static ParseInformation ParseFile(string fileName, string fileContent, bool updateCommentTags, bool fireUpdate)
{
IParser parser = GetParser(fileName);
@ -170,7 +182,7 @@ namespace ICSharpCode.Core @@ -170,7 +182,7 @@ namespace ICSharpCode.Core
return null;
}
ICompilationUnitBase parserOutput = null;
ICompilationUnit parserOutput = null;
if (fileContent == null) {
if (ProjectService.OpenSolution != null) {
@ -183,13 +195,18 @@ namespace ICSharpCode.Core @@ -183,13 +195,18 @@ namespace ICSharpCode.Core
}
}
try {
IProjectContent fileProjectContent = GetProjectContent(fileName);
if (fileProjectContent == null) {
fileProjectContent = defaultProjectContent;
}
if (fileContent != null) {
parserOutput = parser.Parse(fileName, fileContent);
parserOutput = parser.Parse(fileProjectContent, fileName, fileContent);
} else {
if (!File.Exists(fileName)) {
return null;
}
parserOutput = parser.Parse(fileName);
parserOutput = parser.Parse(fileProjectContent, fileName);
}
lock (projectContents) {
@ -197,9 +214,9 @@ namespace ICSharpCode.Core @@ -197,9 +214,9 @@ namespace ICSharpCode.Core
if (projectContent.Key.IsFileInProject(fileName)) {
if (parsings.ContainsKey(fileName)) {
ParseInformation parseInformation = parsings[fileName];
projectContent.Value.UpdateCompilationUnit(parseInformation.MostRecentCompilationUnit as ICompilationUnit, parserOutput as ICompilationUnit, fileName, updateCommentTags);
projectContent.Value.UpdateCompilationUnit(parseInformation.MostRecentCompilationUnit, parserOutput as ICompilationUnit, fileName, updateCommentTags);
} else {
projectContent.Value.UpdateCompilationUnit(null, parserOutput as ICompilationUnit, fileName, updateCommentTags);
projectContent.Value.UpdateCompilationUnit(null, parserOutput, fileName, updateCommentTags);
}
}
}
@ -316,22 +333,22 @@ namespace ICSharpCode.Core @@ -316,22 +333,22 @@ namespace ICSharpCode.Core
public static event ParseInformationEventHandler ParseInformationUpdated;
}
[Serializable]
public class DummyCompilationUnit : AbstractCompilationUnit
{
List<IComment> miscComments = new List<IComment>();
List<IComment> dokuComments = new List<IComment>();
public override List<IComment> MiscComments {
get {
return miscComments;
}
}
public override List<IComment> DokuComments {
get {
return dokuComments;
}
}
}
// [Serializable]
// public class DummyCompilationUnit : AbstractCompilationUnit
// {
// List<IComment> miscComments = new List<IComment>();
// List<IComment> dokuComments = new List<IComment>();
//
// public override List<IComment> MiscComments {
// get {
// return miscComments;
// }
// }
//
// public override List<IComment> DokuComments {
// get {
// return dokuComments;
// }
// }
// }
}

Loading…
Cancel
Save