Browse Source

- added ClassInheritanceTreeClassesOnly to IClass

- LocalizeExtension does not crash if resource is not found
- added PositionChanged to ITextEditorCaret

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4382 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Siegfried Pammer 17 years ago
parent
commit
73360cb6cd
  1. 6
      src/AddIns/Misc/UnitTesting/Test/Utils/MockClass.cs
  2. 5
      src/Main/Base/Project/Src/Editor/AvalonEdit/AvalonEditTextEditorAdapter.cs
  3. 5
      src/Main/Base/Project/Src/Editor/ITextEditor.cs
  4. 5
      src/Main/Base/Project/Src/TextEditor/Gui/TextEditorAdapter.cs
  5. 6
      src/Main/Base/Test/Utils/MockClass.cs
  6. 12
      src/Main/ICSharpCode.Core.Presentation/LocalizeExtension.cs
  7. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
  8. 46
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultClass.cs
  9. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IClass.cs

6
src/AddIns/Misc/UnitTesting/Test/Utils/MockClass.cs

@ -179,6 +179,12 @@ namespace UnitTesting.Tests.Utils @@ -179,6 +179,12 @@ namespace UnitTesting.Tests.Utils
}
}
public IEnumerable<IClass> ClassInheritanceTreeClassesOnly {
get {
throw new NotImplementedException();
}
}
public IReturnType BaseType {
get {
throw new NotImplementedException();

5
src/Main/Base/Project/Src/Editor/AvalonEdit/AvalonEditTextEditorAdapter.cs

@ -103,6 +103,11 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -103,6 +103,11 @@ namespace ICSharpCode.SharpDevelop.Editor
get { return AvalonEditDocumentAdapter.ToLocation(caret.Location); }
set { caret.Location = AvalonEditDocumentAdapter.ToPosition(value); }
}
public event EventHandler PositionChanged {
add { caret.PositionChanged += value; }
remove { caret.PositionChanged -= value; }
}
}
sealed class OptionsAdapter : ITextEditorOptions

5
src/Main/Base/Project/Src/Editor/ITextEditor.cs

@ -141,5 +141,10 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -141,5 +141,10 @@ namespace ICSharpCode.SharpDevelop.Editor
/// Gets/sets the caret position.
/// </summary>
Location Position { get; set; }
/// <summary>
/// Is raised whenever the position of the caret has changed.
/// </summary>
event EventHandler PositionChanged;
}
}

5
src/Main/Base/Project/Src/TextEditor/Gui/TextEditorAdapter.cs

@ -72,6 +72,11 @@ namespace ICSharpCode.SharpDevelop @@ -72,6 +72,11 @@ namespace ICSharpCode.SharpDevelop
caret.Position = ToPosition(value);
}
}
public event EventHandler PositionChanged {
add { caret.PositionChanged += value; }
remove { caret.PositionChanged -= value; }
}
}
sealed class OptionsAdapter : ITextEditorOptions

6
src/Main/Base/Test/Utils/MockClass.cs

@ -127,6 +127,12 @@ namespace ICSharpCode.SharpDevelop.Tests.Utils @@ -127,6 +127,12 @@ namespace ICSharpCode.SharpDevelop.Tests.Utils
}
}
public IEnumerable<IClass> ClassInheritanceTreeClassesOnly {
get {
throw new NotImplementedException();
}
}
public IClass BaseClass {
get {
return BaseType.GetUnderlyingClass();

12
src/Main/ICSharpCode.Core.Presentation/LocalizeExtension.cs

@ -31,10 +31,14 @@ namespace ICSharpCode.Core.Presentation @@ -31,10 +31,14 @@ namespace ICSharpCode.Core.Presentation
public override object ProvideValue(IServiceProvider serviceProvider)
{
string result = ResourceService.GetString(key);
if (UsesAccessors)
result = MenuService.ConvertLabel(result);
return result;
try {
string result = ResourceService.GetString(key);
if (UsesAccessors)
result = MenuService.ConvertLabel(result);
return result;
} catch (ResourceNotFoundException) {
return "{Localize:" + key + "}";
}
}
}
}

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj

@ -203,5 +203,9 @@ @@ -203,5 +203,9 @@
<Folder Include="Src\CSharp" />
<Folder Include="Src\VBNet" />
</ItemGroup>
<ItemGroup>
<Content Include="ProfilingSessions\Session20090702_124951.sdps" />
<Content Include="ProfilingSessions\Session20090702_131909.sdps" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

46
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultClass.cs

@ -369,6 +369,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -369,6 +369,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
volatile IClass[] inheritanceTreeCache;
volatile IClass[] inheritanceTreeClassesOnlyCache;
public IEnumerable<IClass> ClassInheritanceTree {
get {
@ -398,7 +399,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -398,7 +399,7 @@ namespace ICSharpCode.SharpDevelop.Dom
return inheritanceTree;
}
inheritanceTree = CalculateClassInheritanceTree();
inheritanceTree = CalculateClassInheritanceTree(false);
this.inheritanceTreeCache = inheritanceTree;
if (!KeepInheritanceTree)
@ -408,12 +409,51 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -408,12 +409,51 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public IEnumerable<IClass> ClassInheritanceTreeClassesOnly {
get {
// Notes:
// the ClassInheritanceTree must work even if the following things happen:
// - cyclic inheritance
// - multithreaded calls
// Recursive calls are possible if the SearchType request done by GetUnderlyingClass()
// uses ClassInheritanceTree.
// Such recursive calls are tricky, they have caused incorrect behavior (SD2-1474)
// or performance problems (SD2-1510) in the past.
// As of revision 3769, NRefactoryAstConvertVisitor sets up the SearchClassReturnType
// used for base types so that it does not look up inner classes in the class itself,
// so the ClassInheritanceTree is not used created in those cases.
// However, other language bindings might not set up base types correctly, so it's
// still possible that ClassInheritanceTree is called recursivly.
// In that case, we'll return an invalid inheritance tree because of
// ProxyReturnType's automatic stack overflow prevention.
// We do not use locks to protect against multithreaded calls because
// resolving one class's base types can cause getting the inheritance tree
// of another class -> beware of deadlocks
IClass[] inheritanceTreeClassesOnly = this.inheritanceTreeClassesOnlyCache;
if (inheritanceTreeClassesOnly != null) {
return inheritanceTreeClassesOnly;
}
inheritanceTreeClassesOnly = CalculateClassInheritanceTree(true);
this.inheritanceTreeClassesOnlyCache = inheritanceTreeClassesOnly;
if (!KeepInheritanceTree)
DomCache.RegisterForClear(ClearCachedInheritanceTree);
return inheritanceTreeClassesOnly;
}
}
void ClearCachedInheritanceTree()
{
inheritanceTreeClassesOnlyCache = null;
inheritanceTreeCache = null;
}
IClass[] CalculateClassInheritanceTree()
IClass[] CalculateClassInheritanceTree(bool ignoreInterfaces)
{
List<IClass> visitedList = new List<IClass>();
Queue<IReturnType> typesToVisit = new Queue<IReturnType>();
@ -422,7 +462,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -422,7 +462,7 @@ namespace ICSharpCode.SharpDevelop.Dom
IReturnType nextType;
do {
if (currentClass != null) {
if (!visitedList.Contains(currentClass)) {
if ((!ignoreInterfaces || currentClass.ClassType != ClassType.Interface) && !visitedList.Contains(currentClass)) {
visitedList.Add(currentClass);
foreach (IReturnType type in currentClass.BaseTypes) {
typesToVisit.Enqueue(type);

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IClass.cs

@ -74,6 +74,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -74,6 +74,10 @@ namespace ICSharpCode.SharpDevelop.Dom
get;
}
IEnumerable<IClass> ClassInheritanceTreeClassesOnly {
get;
}
IClass BaseClass {
get;
}

Loading…
Cancel
Save