Browse Source

Fixed SD2-1530: protected inner classes are not visible

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3893 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
d665141232
  1. 13
      src/Main/Base/Project/Src/Util/WorkerThread.cs
  2. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs
  3. 9
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionClass.cs

13
src/Main/Base/Project/Src/Util/WorkerThread.cs

@ -13,6 +13,9 @@ namespace ICSharpCode.SharpDevelop.Util @@ -13,6 +13,9 @@ namespace ICSharpCode.SharpDevelop.Util
{
/// <summary>
/// A worker thread that normally sleeps, but can run a queue of commands.
///
/// This class does not create a worker thread on its own, it merely manages tasks for
/// the worker thread that calls <see cref="RunLoop"/>.
/// </summary>
public class WorkerThread
{
@ -64,7 +67,8 @@ namespace ICSharpCode.SharpDevelop.Util @@ -64,7 +67,8 @@ namespace ICSharpCode.SharpDevelop.Util
readonly object lockObject = new object();
Queue<AsyncTask> taskQueue = new Queue<AsyncTask>();
bool workerRunning = false;
bool workerRunning;
bool exitWorker;
/// <summary>
/// Runs the worker thread loop on the current thread.
@ -77,7 +81,8 @@ namespace ICSharpCode.SharpDevelop.Util @@ -77,7 +81,8 @@ namespace ICSharpCode.SharpDevelop.Util
workerRunning = true;
}
try {
while (workerRunning) {
exitWorker = false;
while (!exitWorker) {
AsyncTask task;
lock (lockObject) {
while (taskQueue.Count == 0)
@ -95,11 +100,11 @@ namespace ICSharpCode.SharpDevelop.Util @@ -95,11 +100,11 @@ namespace ICSharpCode.SharpDevelop.Util
}
/// <summary>
/// Exits running the worker thread.
/// Exits running the worker thread after executing all currently enqueued methods.
/// </summary>
public void ExitWorkerThread()
{
Enqueue(delegate { workerRunning = false; });
Enqueue(delegate { exitWorker = true; });
}
}
}

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop.Dom
{
public const long FileMagic = 0x11635233ED2F428C;
public const long IndexFileMagic = 0x11635233ED2F427D;
public const short FileVersion = 16;
public const short FileVersion = 17;
ProjectContentRegistry registry;
string cacheDirectory;

9
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionClass.cs

@ -22,9 +22,12 @@ namespace ICSharpCode.SharpDevelop.Dom.ReflectionLayer @@ -22,9 +22,12 @@ namespace ICSharpCode.SharpDevelop.Dom.ReflectionLayer
void InitMembers(Type type)
{
foreach (Type nestedType in type.GetNestedTypes(flags)) {
if (!nestedType.IsVisible) continue;
string name = nestedType.FullName.Replace('+', '.');
InnerClasses.Add(new ReflectionClass(CompilationUnit, nestedType, name, this));
// We cannot use nestedType.IsVisible - that only checks for public types,
// but we also need to load protected types.
if (nestedType.IsPublic || nestedType.IsNestedFamily || nestedType.IsNestedFamORAssem) {
string name = nestedType.FullName.Replace('+', '.');
InnerClasses.Add(new ReflectionClass(CompilationUnit, nestedType, name, this));
}
}
foreach (FieldInfo field in type.GetFields(flags)) {

Loading…
Cancel
Save