# HG changeset patch # User Frank Benoit # Date 1220975073 -7200 # Node ID 3b8f773f35e49fc9760d1139821e59da34d62e4e # Parent cef27f6635734feffaf4735ca629e80117e55c4e# Parent 71ec57b4c8f387c74801f14f5ecf6f5ef561a7f3 merge diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/Deadlock.d --- a/dwtx/core/internal/jobs/Deadlock.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/Deadlock.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,7 +12,7 @@ *******************************************************************************/ module dwtx.core.internal.jobs.Deadlock; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwt.dwthelper.utils; @@ -26,13 +26,13 @@ */ class Deadlock { //all the threads which are involved in the deadlock - private Thread[] threads; + private JThread[] threads; //the thread whose locks will be suspended to resolve deadlock - private Thread candidate; + private JThread candidate; //the locks that will be suspended private ISchedulingRule[] locks; - public this(Thread[] threads, ISchedulingRule[] locks, Thread candidate) { + public this(JThread[] threads, ISchedulingRule[] locks, JThread candidate) { this.threads = threads; this.locks = locks; this.candidate = candidate; @@ -42,11 +42,11 @@ return locks; } - public Thread getCandidate() { + public JThread getCandidate() { return candidate; } - public Thread[] getThreads() { + public JThread[] getThreads() { return threads; } } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/DeadlockDetector.d --- a/dwtx/core/internal/jobs/DeadlockDetector.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/DeadlockDetector.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,7 +12,7 @@ *******************************************************************************/ module dwtx.core.internal.jobs.DeadlockDetector; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.io.Stdout; import tango.text.convert.Format; @@ -101,9 +101,9 @@ * are actually deadlocked with the current thread. * Add the threads that form deadlock to the deadlockedThreads list. */ - private bool addCycleThreads(ArrayList deadlockedThreads, Thread next) { + private bool addCycleThreads(ArrayList deadlockedThreads, JThread next) { //get the thread that block the given thread from running - Thread[] blocking = blockingThreads(next); + JThread[] blocking = blockingThreads(next); //if the thread is not blocked by other threads, then it is not part of a deadlock if (blocking.length is 0) return false; @@ -128,7 +128,7 @@ /** * Get the thread(s) that own the lock this thread is waiting for. */ - private Thread[] blockingThreads(Thread current) { + private JThread[] blockingThreads(JThread current) { //find the lock this thread is waiting for ISchedulingRule lock = cast(ISchedulingRule) getWaitingLock(current); return getThreadsOwningLock(lock); @@ -167,7 +167,7 @@ * Returns true IFF the matrix contains a row for the given thread. * (meaning the given thread either owns locks or is waiting for locks) */ - bool contains(Thread t) { + bool contains(JThread t) { return lockThreads.contains(t); } @@ -200,7 +200,7 @@ /** * Returns all the locks owned by the given thread */ - private Object[] getOwnedLocks(Thread current) { + private Object[] getOwnedLocks(JThread current) { ArrayList ownedLocks = new ArrayList(1); int index = indexOf(current, false); @@ -216,7 +216,7 @@ /** * Returns an array of threads that form the deadlock (usually 2). */ - private Thread[] getThreadsInDeadlock(Thread cause) { + private JThread[] getThreadsInDeadlock(JThread cause) { ArrayList deadlockedThreads = new ArrayList(2); /** * if the thread that caused deadlock doesn't own any locks, then it is not part @@ -225,15 +225,15 @@ if (ownsLocks(cause)) deadlockedThreads.add(cause); addCycleThreads(deadlockedThreads, cause); - return arraycast!(Thread)( deadlockedThreads.toArray()); + return arraycast!(JThread)( deadlockedThreads.toArray()); } /** * Returns the thread(s) that own the given lock. */ - private Thread[] getThreadsOwningLock(ISchedulingRule rule) { + private JThread[] getThreadsOwningLock(ISchedulingRule rule) { if (rule is null) - return new Thread[0]; + return new JThread[0]; int lockIndex = indexOf(rule, false); ArrayList blocking = new ArrayList(1); for (int i = 0; i < graph.length; i++) { @@ -244,13 +244,13 @@ Stdout.formatln(Format("Lock {} is involved in deadlock but is not owned by any thread.", rule )); //$NON-NLS-1$ //$NON-NLS-2$ if ((blocking.size() > 1) && (cast(ILock)rule ) && (JobManager.DEBUG_LOCKS)) Stdout.formatln(Format("Lock {} is owned by more than 1 thread, but it is not a rule.", rule )); //$NON-NLS-1$ //$NON-NLS-2$ - return arraycast!(Thread)( blocking.toArray()); + return arraycast!(JThread)( blocking.toArray()); } /** * Returns the lock the given thread is waiting for. */ - private Object getWaitingLock(Thread current) { + private Object getWaitingLock(JThread current) { int index = indexOf(current, false); //find the lock that this thread is waiting for for (int j = 0; j < graph[index].length; j++) { @@ -279,7 +279,7 @@ * Returns the index of the given thread in the thread array. If the thread * is not present in the array, it is added to the end. */ - private int indexOf(Thread owner, bool add) { + private int indexOf(JThread owner, bool add) { int index = lockThreads.indexOf(owner); if ((index < 0) && add) { lockThreads.add(owner); @@ -299,7 +299,7 @@ /** * The given lock was acquired by the given thread. */ - void lockAcquired(Thread owner, ISchedulingRule lock) { + void lockAcquired(JThread owner, ISchedulingRule lock) { int lockIndex = indexOf(lock, true); int threadIndex = indexOf(owner, true); if (resize) @@ -333,18 +333,18 @@ /** * The given lock was released by the given thread. Update the graph. */ - void lockReleased(Thread owner, ISchedulingRule lock) { + void lockReleased(JThread owner, ISchedulingRule lock) { int lockIndex = indexOf(lock, false); int threadIndex = indexOf(owner, false); //make sure the lock and thread exist in the graph if (threadIndex < 0) { if (JobManager.DEBUG_LOCKS) - Stdout.formatln("[lockReleased] Lock {} was already released by thread {}", lock, owner.name()); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("[lockReleased] Lock {} was already released by thread {}", lock, owner.getName()); //$NON-NLS-1$ //$NON-NLS-2$ return; } if (lockIndex < 0) { if (JobManager.DEBUG_LOCKS) - Stdout.formatln("[lockReleased] Thread {} already released lock {}", owner.name(), lock); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("[lockReleased] Thread {} already released lock {}", owner.getName(), lock); //$NON-NLS-1$ //$NON-NLS-2$ return; } //if this lock was suspended, set it to NO_STATE @@ -358,7 +358,7 @@ if ((lock.isConflicting(cast(ISchedulingRule) locks.get(j))) || (!(cast(ILock)lock ) && !(cast(ILock)locks.get(j)) && (graph[threadIndex][j] > NO_STATE))) { if (graph[threadIndex][j] is NO_STATE) { if (JobManager.DEBUG_LOCKS) - Stdout.formatln("[lockReleased] More releases than acquires for thread {} and lock {}", owner.name(), lock); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("[lockReleased] More releases than acquires for thread {} and lock {}", owner.getName(), lock); //$NON-NLS-1$ //$NON-NLS-2$ } else { graph[threadIndex][j]--; } @@ -373,18 +373,18 @@ * The given scheduling rule is no longer used because the job that invoked it is done. * Release this rule regardless of how many times it was acquired. */ - void lockReleasedCompletely(Thread owner, ISchedulingRule rule) { + void lockReleasedCompletely(JThread owner, ISchedulingRule rule) { int ruleIndex = indexOf(rule, false); int threadIndex = indexOf(owner, false); //need to make sure that the given thread and rule were not already removed from the graph if (threadIndex < 0) { if (JobManager.DEBUG_LOCKS) - Stdout.formatln("[lockReleasedCompletely] Lock {} was already released by thread {}", rule, owner.name()); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("[lockReleasedCompletely] Lock {} was already released by thread {}", rule, owner.getName()); //$NON-NLS-1$ //$NON-NLS-2$ return; } if (ruleIndex < 0) { if (JobManager.DEBUG_LOCKS) - Stdout.formatln("[lockReleasedCompletely] Thread {} already released lock {}", owner.name(), rule); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("[lockReleasedCompletely] Thread {} already released lock {}", owner.getName(), rule); //$NON-NLS-1$ //$NON-NLS-2$ return; } /** @@ -403,7 +403,7 @@ * The given thread could not get the given lock and is waiting for it. * Update the graph. */ - Deadlock lockWaitStart(Thread client, ISchedulingRule lock) { + Deadlock lockWaitStart(JThread client, ISchedulingRule lock) { setToWait(client, lock, false); int lockIndex = indexOf(lock, false); int[] temp = new int[lockThreads.size()]; @@ -411,15 +411,15 @@ if (!checkWaitCycles(temp, lockIndex)) return null; //there is a deadlock in the graph - Thread[] threads = getThreadsInDeadlock(client); - Thread candidate = resolutionCandidate(threads); + JThread[] threads = getThreadsInDeadlock(client); + JThread candidate = resolutionCandidate(threads); ISchedulingRule[] locksToSuspend = realLocksForThread(candidate); Deadlock deadlock = new Deadlock(threads, locksToSuspend, candidate); //find a thread whose locks can be suspended to resolve the deadlock if (JobManager.DEBUG_LOCKS) reportDeadlock(deadlock); if (JobManager.DEBUG_DEADLOCK) - throw new IllegalStateException(Format("Deadlock detected. Caused by thread {}.", client.name())); //$NON-NLS-1$ + throw new IllegalStateException(Format("Deadlock detected. Caused by thread {}.", client.getName())); //$NON-NLS-1$ // Update the graph to indicate that the locks will now be suspended. // To indicate that the lock will be suspended, we set the thread to wait for the lock. // When the lock is forced to be released, the entry will be cleared. @@ -432,13 +432,13 @@ * The given thread has stopped waiting for the given lock. * Update the graph. */ - void lockWaitStop(Thread owner, ISchedulingRule lock) { + void lockWaitStop(JThread owner, ISchedulingRule lock) { int lockIndex = indexOf(lock, false); int threadIndex = indexOf(owner, false); //make sure the thread and lock exist in the graph if (threadIndex < 0) { if (JobManager.DEBUG_LOCKS) - Stdout.formatln("Thread {} was already removed.", owner.name() ); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("Thread {} was already removed.", owner.getName() ); //$NON-NLS-1$ //$NON-NLS-2$ return; } if (lockIndex < 0) { @@ -447,7 +447,7 @@ return; } if (graph[threadIndex][lockIndex] !is WAITING_FOR_LOCK) - Assert.isTrue(false, Format("Thread {} was not waiting for lock {} so it could not time out.", owner.name(), (cast(Object)lock).toString())); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + Assert.isTrue(false, Format("Thread {} was not waiting for lock {} so it could not time out.", owner.getName(), (cast(Object)lock).toString())); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ graph[threadIndex][lockIndex] = NO_STATE; reduceGraph(threadIndex, lock); } @@ -455,7 +455,7 @@ /** * Returns true IFF the given thread owns a single lock */ - private bool ownsLocks(Thread cause) { + private bool ownsLocks(JThread cause) { int threadIndex = indexOf(cause, false); for (int j = 0; j < graph[threadIndex].length; j++) { if (graph[threadIndex][j] > NO_STATE) @@ -468,7 +468,7 @@ * Returns true IFF the given thread owns a single real lock. * A real lock is a lock that can be suspended. */ - private bool ownsRealLocks(Thread owner) { + private bool ownsRealLocks(JThread owner) { int threadIndex = indexOf(owner, false); for (int j = 0; j < graph[threadIndex].length; j++) { if (graph[threadIndex][j] > NO_STATE) { @@ -484,7 +484,7 @@ * Return true IFF this thread owns rule locks (i.e. implicit locks which * cannot be suspended) */ - private bool ownsRuleLocks(Thread owner) { + private bool ownsRuleLocks(JThread owner) { int threadIndex = indexOf(owner, false); for (int j = 0; j < graph[threadIndex].length; j++) { if (graph[threadIndex][j] > NO_STATE) { @@ -500,7 +500,7 @@ * Returns an array of real locks that are owned by the given thread. * Real locks are locks that implement the ILock interface and can be suspended. */ - private ISchedulingRule[] realLocksForThread(Thread owner) { + private ISchedulingRule[] realLocksForThread(JThread owner) { int threadIndex = indexOf(owner, false); ArrayList ownedLocks = new ArrayList(1); for (int j = 0; j < graph[threadIndex].length; j++) { @@ -607,14 +607,14 @@ * Adds a 'deadlock detected' message to the log with a stack trace. */ private void reportDeadlock(Deadlock deadlock) { - String msg = "Deadlock detected. All locks owned by thread " ~ deadlock.getCandidate().name() ~ " will be suspended."; //$NON-NLS-1$ //$NON-NLS-2$ + String msg = "Deadlock detected. All locks owned by thread " ~ deadlock.getCandidate().getName() ~ " will be suspended."; //$NON-NLS-1$ //$NON-NLS-2$ MultiStatus main = new MultiStatus(JobManager.PI_JOBS, JobManager.PLUGIN_ERROR, msg, new IllegalStateException()); - Thread[] threads = deadlock.getThreads(); + JThread[] threads = deadlock.getThreads(); for (int i = 0; i < threads.length; i++) { Object[] ownedLocks = getOwnedLocks(threads[i]); Object waitLock = getWaitingLock(threads[i]); StringBuffer buf = new StringBuffer("Thread "); //$NON-NLS-1$ - buf.append(threads[i].name()); + buf.append(threads[i].getName()); buf.append(" has locks: "); //$NON-NLS-1$ for (int j = 0; j < ownedLocks.length; j++) { buf.append(Format("{}",ownedLocks[j])); @@ -654,7 +654,7 @@ * Get the thread whose locks can be suspended. (i.e. all locks it owns are * actual locks and not rules). Return the first thread in the array by default. */ - private Thread resolutionCandidate(Thread[] candidates) { + private JThread resolutionCandidate(JThread[] candidates) { //first look for a candidate that has no scheduling rules for (int i = 0; i < candidates.length; i++) { if (!ownsRuleLocks(candidates[i])) @@ -672,7 +672,7 @@ /** * The given thread is waiting for the given lock. Update the graph. */ - private void setToWait(Thread owner, ISchedulingRule lock, bool suspend) { + private void setToWait(JThread owner, ISchedulingRule lock, bool suspend) { bool needTransfer = false; /** * if we are adding an entry where a thread is waiting on a scheduling rule, @@ -706,7 +706,7 @@ sb.append("\n"); for (int i = 0; i < graph.length; i++) { sb.append(" "); - sb.append( (cast(Thread) lockThreads.get(i)).name() ); + sb.append( (cast(JThread) lockThreads.get(i)).getName() ); sb.append(" : "); for (int j = 0; j < graph[i].length; j++) { sb.append(" "); diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/ImplicitJobs.d --- a/dwtx/core/internal/jobs/ImplicitJobs.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/ImplicitJobs.d Tue Sep 09 17:44:33 2008 +0200 @@ -13,7 +13,7 @@ module dwtx.core.internal.jobs.ImplicitJobs; import tango.text.convert.Format; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.io.Stdout; import dwt.dwthelper.utils; import dwtx.dwtxhelper.Collection; @@ -65,7 +65,7 @@ void begin(ISchedulingRule rule, IProgressMonitor monitor, bool suspend) { if (JobManager.DEBUG_BEGIN_END) JobManager.debug_(Format("Begin rule: {}", rule)); //$NON-NLS-1$ - final Thread getThis = Thread.getThis(); + final JThread getThis = JThread.currentThread(); ThreadJob threadJob; synchronized (this) { threadJob = cast(ThreadJob) threadJobs.get(getThis); @@ -98,7 +98,7 @@ if (threadJob.acquireRule) { //no need to re-acquire any locks because the thread did not wait to get this lock if (manager.runNow_package(threadJob)) - manager.getLockManager().addLockThread(Thread.getThis(), rule); + manager.getLockManager().addLockThread(JThread.currentThread(), rule); else threadJob = threadJob.joinRun(monitor); } @@ -124,7 +124,7 @@ synchronized void end(ISchedulingRule rule, bool resume) { if (JobManager.DEBUG_BEGIN_END) JobManager.debug_(Format("End rule: {}", rule)); //$NON-NLS-1$ - ThreadJob threadJob = cast(ThreadJob) threadJobs.get(Thread.getThis()); + ThreadJob threadJob = cast(ThreadJob) threadJobs.get(JThread.currentThread()); if (threadJob is null) Assert.isLegal(rule is null, Format("endRule without matching beginRule: {}", rule)); //$NON-NLS-1$ else if (threadJob.pop(rule)) { @@ -138,7 +138,7 @@ * @param lastJob The last job to run in this thread */ void endJob(InternalJob lastJob) { - final Thread getThis = Thread.getThis(); + final JThread getThis = JThread.currentThread(); IStatus error; synchronized (this) { ThreadJob threadJob = cast(ThreadJob) threadJobs.get(getThis); @@ -161,7 +161,7 @@ } private void endThreadJob(ThreadJob threadJob, bool resume) { - Thread getThis = Thread.getThis(); + JThread getThis = JThread.currentThread(); //clean up when last rule scope exits threadJobs.remove(getThis); ISchedulingRule rule = threadJob.getRule(); @@ -251,11 +251,11 @@ /** * Implements IJobManager#transferRule(ISchedulingRule, Thread) */ - synchronized void transfer(ISchedulingRule rule, Thread destinationThread) { + synchronized void transfer(ISchedulingRule rule, JThread destinationThread) { //nothing to do for null if (rule is null) return; - Thread getThis = Thread.getThis(); + JThread getThis = JThread.currentThread(); //nothing to do if transferring to the same thread if (getThis is destinationThread) return; diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/InternalJob.d --- a/dwtx/core/internal/jobs/InternalJob.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/InternalJob.d Tue Sep 09 17:44:33 2008 +0200 @@ -13,6 +13,7 @@ module dwtx.core.internal.jobs.InternalJob; import dwt.dwthelper.utils; +import dwtx.dwtxhelper.JThread; import dwtx.dwtxhelper.Collection; import dwtx.core.runtime.Assert; @@ -29,7 +30,6 @@ import dwtx.core.internal.jobs.JobManager; import dwtx.core.internal.jobs.ObjectMap; -import tango.core.Thread; import tango.text.convert.Format; /** @@ -128,7 +128,7 @@ /* * The thread that is currently running this job */ - private /+volatile+/ Thread thread = null; + private /+volatile+/ JThread thread = null; protected this(String name) { Assert.isNotNull(name); @@ -293,10 +293,10 @@ /* (non-javadoc) * @see Job.getThread */ - protected Thread getThread() { + protected JThread getThread() { return thread; } - package Thread getThread_package() { + package JThread getThread_package() { return getThread(); } @@ -564,10 +564,10 @@ /* (non-javadoc) * @see Job.setThread */ - protected void setThread(Thread thread) { + protected void setThread(JThread thread) { this.thread = thread; } - package void setThread_package(Thread thread) { + package void setThread_package(JThread thread) { setThread(thread); } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/JobManager.d --- a/dwtx/core/internal/jobs/JobManager.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/JobManager.d Tue Sep 09 17:44:33 2008 +0200 @@ -18,7 +18,7 @@ import tango.text.convert.Format; import tango.time.WallClock; import tango.time.Time; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.text.convert.Format; //don't use ICU because this is used for debugging only (see bug 135785) @@ -193,7 +193,7 @@ msgBuf.append('-'); } msgBuf.append('['); - msgBuf.append(Thread.getThis().toString()); + msgBuf.append(JThread.currentThread().toString()); msgBuf.append(']'); msgBuf.append(msg); Stdout.formatln( "{}", msgBuf.toString()); @@ -466,7 +466,7 @@ * @see dwtx.core.runtime.jobs.IJobManager#currentJob() */ public Job currentJob() { - Thread current = Thread.getThis(); + JThread current = JThread.currentThread(); if (cast(Worker)current ) return (cast(Worker) current).currentJob(); synchronized (lock) { @@ -550,7 +550,7 @@ } for (int waitAttempts = 0; waitAttempts < 3; waitAttempts++) { - Thread.yield(); + JThread.yield(); synchronized (lock) { if (running.isEmpty()) break; @@ -568,11 +568,11 @@ } } try { - Thread.sleep(0.100); + JThread.sleep(100); } catch (InterruptedException e) { //ignore } - Thread.yield(); + JThread.yield(); } synchronized (lock) { // retrieve list of the jobs that are still running @@ -773,7 +773,7 @@ if (suspended && state !is Job.RUNNING) return; //it's an error for a job to join itself - if (state is Job.RUNNING && job.getThread_package() is Thread.getThis()) + if (state is Job.RUNNING && job.getThread_package() is JThread.currentThread()) throw new IllegalStateException("Job attempted to join itself"); //$NON-NLS-1$ //the semaphore will be released when the job is done barrier = new Semaphore(null); @@ -877,15 +877,14 @@ reportedWorkDone = actualWorkDone; monitor.subTask(NLS.bind(JobMessages.jobs_waitFamSub, Integer.toString(jobsLeft))); } - implMissing(__FILE__, __LINE__ ); -// DWT -// if (Thread.interrupted()) -// throw new InterruptedException(); + + if (JThread.interrupted()) + throw new InterruptedException(); if (monitor.isCanceled()) throw new OperationCanceledException(); //notify hook to service pending syncExecs before falling asleep lockManager.aboutToWait(null); - Thread.sleep(0.100); + JThread.sleep(100); } } finally { lockManager.aboutToRelease(); @@ -1300,7 +1299,7 @@ /* non-Javadoc) * @see dwtx.core.runtime.jobs.IJobManager#transferRule() */ - public void transferRule(ISchedulingRule rule, Thread destinationThread) { + public void transferRule(ISchedulingRule rule, JThread destinationThread) { implicitJobs.transfer(rule, destinationThread); } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/JobMessages.d --- a/dwtx/core/internal/jobs/JobMessages.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/JobMessages.d Tue Sep 09 17:44:33 2008 +0200 @@ -11,7 +11,7 @@ **********************************************************************/ module dwtx.core.internal.jobs.JobMessages; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.io.Stdout; import tango.time.WallClock; import tango.text.convert.TimeStamp; @@ -41,6 +41,7 @@ // } public static void reloadMessages() { + implMissing(__FILE__,__LINE__); // NLS.initializeMessages(BUNDLE_NAME, import(BUNDLE_NAME~".properties")); } @@ -53,7 +54,7 @@ char[30] buf; buffer.append(tango.text.convert.TimeStamp.format( buf, WallClock.now())); buffer.append(" - ["); //$NON-NLS-1$ - buffer.append(Thread.getThis().name()); + buffer.append(JThread.currentThread().getName()); buffer.append("] "); //$NON-NLS-1$ buffer.append(message); Stdout.formatln(buffer.toString()); diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/LockManager.d --- a/dwtx/core/internal/jobs/LockManager.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/LockManager.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,7 +12,7 @@ *******************************************************************************/ module dwtx.core.internal.jobs.LockManager; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwt.dwthelper.utils; import dwtx.dwtxhelper.Collection; @@ -115,7 +115,7 @@ /* (non-Javadoc) * Method declared on LockListener */ - public bool aboutToWait(Thread lockOwner) { + public bool aboutToWait(JThread lockOwner) { if (lockListener is null) return false; try { @@ -131,7 +131,7 @@ /** * This thread has just acquired a lock. Update graph. */ - void addLockThread(Thread thread, ISchedulingRule lock) { + void addLockThread(JThread thread, ISchedulingRule lock) { if (locks is null) return; try { @@ -146,7 +146,7 @@ /** * This thread has just been refused a lock. Update graph and check for deadlock. */ - void addLockWaitThread(Thread thread, ISchedulingRule lock) { + void addLockWaitThread(JThread thread, ISchedulingRule lock) { if (locks is null) return; try { @@ -220,13 +220,13 @@ public bool isLockOwner() { //all job threads have to be treated as lock owners because UI thread //may try to join a job - Thread current = Thread.getThis(); + JThread current = JThread.currentThread(); if (cast(Worker)current ) return true; if (locks is null) return false; synchronized (locks) { - return locks.contains(Thread.getThis()); + return locks.contains(JThread.currentThread()); } } @@ -240,7 +240,7 @@ /** * Releases all the acquires that were called on the given rule. Needs to be called only once. */ - void removeLockCompletely(Thread thread, ISchedulingRule rule) { + void removeLockCompletely(JThread thread, ISchedulingRule rule) { if (locks is null) return; try { @@ -255,7 +255,7 @@ /** * This thread has just released a lock. Update graph. */ - void removeLockThread(Thread thread, ISchedulingRule lock) { + void removeLockThread(JThread thread, ISchedulingRule lock) { try { synchronized (locks) { locks.lockReleased(thread, lock); @@ -268,7 +268,7 @@ /** * This thread has just stopped waiting for a lock. Update graph. */ - void removeLockWaitThread(Thread thread, ISchedulingRule lock) { + void removeLockWaitThread(JThread thread, ISchedulingRule lock) { try { synchronized (locks) { locks.lockWaitStop(thread, lock); @@ -281,7 +281,7 @@ /** * Resumes all the locks that were suspended while this thread was waiting to acquire another lock. */ - void resumeSuspendedLocks(Thread owner) { + void resumeSuspendedLocks(JThread owner) { LockState[] toResume; synchronized (suspendedLocks) { Stack prevLocks = cast(Stack) suspendedLocks.get(owner); diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/OrderedLock.d --- a/dwtx/core/internal/jobs/OrderedLock.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/OrderedLock.d Tue Sep 09 17:44:33 2008 +0200 @@ -13,7 +13,7 @@ module dwtx.core.internal.jobs.OrderedLock; import tango.text.convert.Format; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.io.Stdout; import dwt.dwthelper.utils; @@ -53,7 +53,7 @@ /** * The thread of the operation that currently owns the lock. */ - private /+volatile+/ Thread currentOperationThread; + private /+volatile+/ JThread currentOperationThread; /** * Records the number of successive acquires in the same * thread. The lock is released only when the depth @@ -116,13 +116,13 @@ if (semaphore is null) return true; if (DEBUG) - Stdout.formatln("[{}] Operation waiting to be executed... ", Thread.getThis(), this); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("[{}] Operation waiting to be executed... ", JThread.currentThread(), this); //$NON-NLS-1$ //$NON-NLS-2$ success = doAcquire(semaphore, delay); - manager.resumeSuspendedLocks(Thread.getThis()); + manager.resumeSuspendedLocks(JThread.currentThread()); if (DEBUG && success) - Stdout.formatln("[{}] Operation started... ", Thread.getThis(), this); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("[{}] Operation started... ", JThread.currentThread(), this); //$NON-NLS-1$ //$NON-NLS-2$ else if (DEBUG) - Stdout.formatln("[{}] Operation timed out... ", Thread.getThis(), this); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln("[{}] Operation timed out... ", JThread.currentThread(), this); //$NON-NLS-1$ //$NON-NLS-2$ return success; } @@ -133,9 +133,9 @@ private synchronized bool attempt() { //return true if we already own the lock //also, if nobody is waiting, grant the lock immediately - if ((currentOperationThread is Thread.getThis()) || (currentOperationThread is null && operations.isEmpty())) { + if ((currentOperationThread is JThread.currentThread()) || (currentOperationThread is null && operations.isEmpty())) { depth++; - setCurrentOperationThread(Thread.getThis()); + setCurrentOperationThread(JThread.currentThread()); return true; } return false; @@ -154,7 +154,7 @@ * otherwise a new semaphore will be created, enqueued, and returned. */ private synchronized Semaphore createSemaphore() { - return attempt() ? null : enqueue(new Semaphore(Thread.getThis())); + return attempt() ? null : enqueue(new Semaphore(JThread.currentThread())); } /** @@ -179,12 +179,12 @@ semaphore = createSemaphore(); if (semaphore is null) return true; - manager.addLockWaitThread(Thread.getThis(), this); + manager.addLockWaitThread(JThread.currentThread(), this); try { success = semaphore.acquire(delay); } catch (InterruptedException e) { if (DEBUG) - Stdout.formatln(Format("[{}] Operation interrupted while waiting... :-|", Thread.getThis())); //$NON-NLS-1$ //$NON-NLS-2$ + Stdout.formatln(Format("[{}] Operation interrupted while waiting... :-|", JThread.currentThread())); //$NON-NLS-1$ //$NON-NLS-2$ throw e; } if (success) { @@ -192,7 +192,7 @@ updateCurrentOperation(); } else { removeFromQueue(semaphore); - manager.removeLockWaitThread(Thread.getThis(), this); + manager.removeLockWaitThread(JThread.currentThread(), this); } return success; } @@ -278,7 +278,7 @@ * If newThread is null, release this lock from its previous owner. * If newThread is not null, grant this lock to newThread. */ - private void setCurrentOperationThread(Thread newThread) { + private void setCurrentOperationThread(JThread newThread) { if ((currentOperationThread !is null) && (newThread is null)) manager.removeLockThread(currentOperationThread, this); this.currentOperationThread = newThread; @@ -313,6 +313,6 @@ */ private synchronized void updateCurrentOperation() { operations.dequeue(); - setCurrentOperationThread(Thread.getThis()); + setCurrentOperationThread(JThread.currentThread()); } } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/Semaphore.d --- a/dwtx/core/internal/jobs/Semaphore.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/Semaphore.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,7 +12,7 @@ *******************************************************************************/ module dwtx.core.internal.jobs.Semaphore; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.core.sync.Mutex; import tango.core.sync.Condition; import dwt.dwthelper.utils; @@ -21,12 +21,12 @@ public class Semaphore { protected long notifications; - protected Thread runnable; + protected JThread runnable; private Mutex mutex; private Condition condition; - public this(Thread runnable) { + public this(JThread runnable) { mutex = new Mutex; condition = new Condition(mutex); this.runnable = runnable; diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/ThreadJob.d --- a/dwtx/core/internal/jobs/ThreadJob.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/ThreadJob.d Tue Sep 09 17:44:33 2008 +0200 @@ -15,7 +15,7 @@ import dwt.dwthelper.utils; import tango.text.convert.Format; import tango.io.Stdout; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.core.sync.Mutex; import tango.core.sync.Condition; @@ -178,7 +178,7 @@ throw new OperationCanceledException(); //check if there is a blocking thread before waiting InternalJob blockingJob = manager.findBlockingJob_package(this); - Thread blocker = blockingJob is null ? null : blockingJob.getThread_package(); + JThread blocker = blockingJob is null ? null : blockingJob.getThread_package(); ThreadJob result = this; try { //just return if lock listener decided to grant immediate access @@ -186,7 +186,7 @@ return this; try { waitStart(monitor, blockingJob); - final Thread getThis = Thread.getThis(); + final JThread getThis = JThread.currentThread(); while (true) { if (isCanceled(monitor)) throw new OperationCanceledException(); @@ -322,7 +322,7 @@ */ private void waitEnd(IProgressMonitor monitor) { final LockManager lockManager = manager.getLockManager(); - final Thread getThis = Thread.getThis(); + final JThread getThis = JThread.currentThread(); if (isRunning()) { lockManager.addLockThread(getThis, getRule()); //need to re-acquire any locks that were suspended while this thread was blocked on the rule @@ -340,7 +340,7 @@ * @param blockingJob The job that is blocking this thread, or null */ private void waitStart(IProgressMonitor monitor, InternalJob blockingJob) { - manager.getLockManager().addLockWaitThread(Thread.getThis(), getRule()); + manager.getLockManager().addLockWaitThread(JThread.currentThread(), getRule()); isBlocked = true; manager.reportBlocked(monitor, blockingJob); } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/Worker.d --- a/dwtx/core/internal/jobs/Worker.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/Worker.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,7 +12,7 @@ *******************************************************************************/ module dwtx.core.internal.jobs.Worker; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.text.convert.Format; import dwt.dwthelper.utils; @@ -32,15 +32,15 @@ * A worker thread processes jobs supplied to it by the worker pool. When * the worker pool gives it a null job, the worker dies. */ -public class Worker : Thread { +public class Worker : JThread { //worker number used for debugging purposes only private static int nextWorkerNumber = 0; private /+volatile+/ InternalJob currentJob_; private final WorkerPool pool; public this(WorkerPool pool) { - super(&run); - this.name = Format("Worker-{}", nextWorkerNumber++); //$NON-NLS-1$ + super(); + this.setName( Format("Worker-{}", nextWorkerNumber++)); //$NON-NLS-1$ this.pool = pool; //set the context loader to avoid leaking the current context loader //for the thread that spawns this worker (bug 98376) @@ -60,8 +60,8 @@ return new Status(IStatus.ERROR, JobManager.PI_JOBS, JobManager.PLUGIN_ERROR, message, t); } - public void run() { - this.priority((PRIORITY_MAX-PRIORITY_MIN)/2); // DWT normal priority + public override void run() { + this.setPriority(NORM_PRIORITY); try { while ((currentJob_ = pool.startJob_package(this)) !is null) { currentJob_.setThread_package(this); @@ -80,10 +80,7 @@ // result = handleException(currentJob_, e); } finally { //clear interrupted state for this thread - implMissing( __FILE__, __LINE__ ); -// DWT -// Thread.interrupted(); - + JThread.interrupted(); //result must not be null if (result is null) diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/internal/jobs/WorkerPool.d --- a/dwtx/core/internal/jobs/WorkerPool.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/internal/jobs/WorkerPool.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,7 +12,7 @@ *******************************************************************************/ module dwtx.core.internal.jobs.WorkerPool; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.core.sync.Mutex; import tango.core.sync.Condition; import tango.text.convert.Format; @@ -125,7 +125,7 @@ //do not become the owners of the same rule in the graph if ((job.getRule_package() !is null) && !(cast(ThreadJob)job )) { //remove any locks this thread may be owning on that rule - manager.getLockManager().removeLockCompletely(Thread.getThis(), job.getRule_package()); + manager.getLockManager().removeLockCompletely(JThread.currentThread(), job.getRule_package()); } manager.endJob_package(job, result, true); //ensure this thread no longer owns any scheduling rules @@ -174,7 +174,7 @@ //create a thread if all threads are busy if (busyThreads >= numThreads) { Worker worker = new Worker(this); - worker.isDaemon(isDaemon); + worker.setDaemon(isDaemon); add(worker); if (JobManager.DEBUG) JobManager.debug_(Format("worker added to pool: {}", worker)); //$NON-NLS-1$ @@ -277,7 +277,7 @@ if ((job.getRule() !is null) && !(cast(ThreadJob)job )) { //don't need to re-aquire locks because it was not recorded in the graph //that this thread waited to get this rule - manager.getLockManager().addLockThread(Thread.getThis(), job.getRule()); + manager.getLockManager().addLockThread(JThread.currentThread(), job.getRule()); } //see if we need to wake another worker if (manager.sleepHint_package() <= 0) diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/runtime/jobs/IJobManager.d --- a/dwtx/core/runtime/jobs/IJobManager.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/runtime/jobs/IJobManager.d Tue Sep 09 17:44:33 2008 +0200 @@ -23,7 +23,7 @@ import dwtx.core.runtime.jobs.LockListener; import dwtx.core.runtime.jobs.ProgressProvider; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; /** * The job manager provides facilities for scheduling, querying, and maintaining jobs @@ -407,7 +407,7 @@ * @param destinationThread The new owner for the transferred rule. * @since 3.1 */ - public void transferRule(ISchedulingRule rule, Thread destinationThread); + public void transferRule(ISchedulingRule rule, JThread destinationThread); /** * Resumes scheduling of all sleeping jobs in the given family. This method diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/runtime/jobs/Job.d --- a/dwtx/core/runtime/jobs/Job.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/runtime/jobs/Job.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,7 +12,7 @@ *******************************************************************************/ module dwtx.core.runtime.jobs.Job; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwt.dwthelper.utils; import dwtx.core.internal.jobs.InternalJob; @@ -335,7 +335,7 @@ * @return the thread this job is running in, or null * if this job is not running or the thread is unknown. */ - public final Thread getThread() { + public final JThread getThread() { return super.getThread(); } @@ -609,7 +609,7 @@ * @see #ASYNC_FINISH * @see #run(IProgressMonitor) */ - public final void setThread(Thread thread) { + public final void setThread(JThread thread) { super.setThread(thread); } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/core/runtime/jobs/LockListener.d --- a/dwtx/core/runtime/jobs/LockListener.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/core/runtime/jobs/LockListener.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,7 +12,7 @@ *******************************************************************************/ module dwtx.core.runtime.jobs.LockListener; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwt.dwthelper.utils; import dwtx.core.internal.jobs.JobManager; @@ -49,7 +49,7 @@ * @return true if the thread should be granted immediate access, * and false if it should wait for the lock to be available */ - public bool aboutToWait(Thread lockOwner) { + public bool aboutToWait(JThread lockOwner) { return false; } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/dwtxhelper/JThread.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtx/dwtxhelper/JThread.d Tue Sep 09 17:44:33 2008 +0200 @@ -0,0 +1,122 @@ +module dwtx.dwtxhelper.JThread; + +import tango.core.Thread; +import dwt.dwthelper.utils; + +class JThread { + + private Thread thread; + private Runnable runnable; + + private alias ThreadLocal!(JThread) TTLS; + private static TTLS tls; + + public static const int MAX_PRIORITY = 10; + public static const int MIN_PRIORITY = 1; + public static const int NORM_PRIORITY = 5; + + private static TTLS getTls(){ + if( tls is null ){ + synchronized( JThread.classinfo ){ + if( tls is null ){ + tls = new TTLS(); + } + } + } + return tls; + } + + public this(){ + thread = new Thread(&internalRun); + } + public this( void delegate() dg ){ + thread = new Thread(&internalRun); + runnable = dgRunnable( dg ); + } + public this(Runnable runnable){ + thread = new Thread(&internalRun); + this.runnable = runnable; + } + public this(Runnable runnable, String name){ + thread = new Thread(&internalRun); + this.runnable = runnable; + thread.name = name; + } + public this(String name){ + thread = new Thread(&internalRun); + thread.name = name; + } + + public void start(){ + thread.start(); + } + + public static JThread currentThread(){ + return getTls().val(); + } + public int getPriority() { + return (thread.priority-Thread.PRIORITY_MIN) * (MAX_PRIORITY-MIN_PRIORITY) / (Thread.PRIORITY_MAX-Thread.PRIORITY_MIN) + MIN_PRIORITY; + } + public void setPriority( int newPriority ) { + thread.priority( (newPriority-MIN_PRIORITY) * (Thread.PRIORITY_MAX-Thread.PRIORITY_MIN) / (MAX_PRIORITY-MIN_PRIORITY) +Thread.PRIORITY_MIN ); + } + + private void internalRun(){ + getTls().val( this ); + if( runnable !is null ){ + runnable.run(); + } + else { + run(); + } + } + + public bool isAlive(){ + return thread.isRunning(); + } + + public bool isDaemon() { + return thread.isDaemon(); + } + + public void join(){ + thread.join(); + } + + public void setDaemon(bool on) { + thread.isDaemon(on); + } + + public void setName(String name){ + thread.name = name; + } + public String getName(){ + return thread.name; + } + + void interrupt() { + implMissing(__FILE__,__LINE__); + } + + static bool interrupted() { + implMissing(__FILE__,__LINE__); + return false; + } + + public void run(){ + // default impl, do nothing + } + public static void sleep( int time ){ + Thread.sleep(time/1000.0); + } + public Thread nativeThread(){ + return thread; + } + public override char[] toString(){ + return "JThread "~thread.name; + } + public static void yield(){ + Thread.yield(); + } +} + diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/dwtxhelper/Timer.d --- a/dwtx/dwtxhelper/Timer.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/dwtxhelper/Timer.d Tue Sep 09 17:44:33 2008 +0200 @@ -2,7 +2,7 @@ import dwtx.dwtxhelper.TimerTask; import tango.util.container.CircularList; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.core.sync.Mutex; import tango.core.sync.Condition; import tango.time.Time; @@ -12,7 +12,7 @@ alias CircularList!( TimerTask ) ListType; - private Thread thread; + private JThread thread; private ListType schedules; private Mutex mutex; private Condition cond; @@ -26,8 +26,8 @@ cond = new Condition( mutex ); schedules = new ListType(); - thread = new Thread( &run ); - thread.isDaemon = isDaemon; + thread = new JThread( &run ); + thread.setDaemon( isDaemon ); thread.start(); } private void run(){ diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/action/ActionContributionItem.d --- a/dwtx/jface/action/ActionContributionItem.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/action/ActionContributionItem.d Tue Sep 09 17:44:33 2008 +0200 @@ -51,7 +51,7 @@ import dwt.dwthelper.utils; import dwt.dwthelper.Runnable; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.io.Stdout; /** @@ -187,18 +187,12 @@ if (isVisible() && widget !is null) { Display display = widget.getDisplay(); - if (display.getThread() is Thread.getThis()) { + if (display.getThread() is JThread.currentThread().nativeThread()) { update(e.getProperty()); } else { - display.asyncExec(new class(e) Runnable { - PropertyChangeEvent e_; - this(PropertyChangeEvent e__){ - e_=e__; - } - public void run() { - update(e_.getProperty()); - } - }); + display.asyncExec(dgRunnable( (PropertyChangeEvent e_) { + update(e_.getProperty()); + }, e)); } } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/fieldassist/ContentProposalAdapter.d --- a/dwtx/jface/fieldassist/ContentProposalAdapter.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/fieldassist/ContentProposalAdapter.d Tue Sep 09 17:44:33 2008 +0200 @@ -51,7 +51,7 @@ import dwt.dwthelper.utils; import dwt.dwthelper.Runnable; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; static import tango.text.Text; import tango.io.Stdout; import tango.text.convert.Format; @@ -936,7 +936,7 @@ pendingDescriptionUpdate = true; try { - Thread.sleep( POPUP_DELAY / 1000.0 ); + JThread.sleep( POPUP_DELAY ); } catch (InterruptedException e) { } @@ -978,7 +978,7 @@ }); } }; - Thread t = new Thread(&r.run); + JThread t = new JThread(r); t.start(); } } @@ -2021,7 +2021,7 @@ public void run(){ receivedKeyDown = false; try { - Thread.sleep(autoActivationDelay); + JThread.sleep(autoActivationDelay); } catch (InterruptedException e) { } if (!isValid() || receivedKeyDown) { @@ -2034,7 +2034,7 @@ }); } }; - Thread t = new Thread(&r.run); + JThread t = new JThread(r); t.start(); } else { // Since we do not sleep, we must open the popup diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/internal/text/link/contentassist/AdditionalInfoController2.d --- a/dwtx/jface/internal/text/link/contentassist/AdditionalInfoController2.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/internal/text/link/contentassist/AdditionalInfoController2.d Tue Sep 09 17:44:33 2008 +0200 @@ -25,7 +25,9 @@ import dwtx.jface.internal.text.link.contentassist.ContentAssistant2; // packageimport import dwt.dwthelper.utils; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; +import tango.core.sync.Mutex; +import tango.core.sync.Condition; import dwt.events.SelectionEvent; import dwt.events.SelectionListener; @@ -42,7 +44,6 @@ import dwtx.jface.text.contentassist.ICompletionProposalExtension3; - /** * Displays the additional information available for a completion proposal. * @@ -73,15 +74,17 @@ /** The proposal table */ private Table fProposalTable; /** The thread controlling the delayed display of the additional info */ - private Thread fThread; + private JThread fThread; /** Indicates whether the display delay has been reset */ private bool fIsReset= false; /** Object to synchronize display thread and table selection changes */ - private const Object fMutex; + private const Mutex fMutex; + private const Condition fMutex_cond; /** Thread access lock. */ private const Object fThreadAccess; /** Object to synchronize initial display of additional info */ - private Object fStartSignal; + private Mutex fStartSignal; + private Condition fStartSignal_cond; /** The table selection listener */ private SelectionListener fSelectionListener; /** The delay after which additional information is displayed */ @@ -97,7 +100,8 @@ this(IInformationControlCreator creator, int delay) { fSelectionListener= new TableSelectionListener(); fThreadAccess= new Object(); - fMutex= new Object(); + fMutex= new Mutex(); + fMutex_cond= new Condition(fMutex); super(creator); fDelay= delay; setAnchor(ANCHOR_RIGHT); @@ -122,14 +126,15 @@ synchronized (fThreadAccess) { if (fThread !is null) fThread.interrupt(); - fThread= new Thread(this, ContentAssistMessages.getString("InfoPopup.info_delay_timer_name")); //$NON-NLS-1$ + fThread= new JThread(this, ContentAssistMessages.getString("InfoPopup.info_delay_timer_name")); //$NON-NLS-1$ - fStartSignal= new Object(); + fStartSignal= new Mutex(); + fStartSignal_cond= new Condition(fStartSignal); synchronized (fStartSignal) { fThread.start(); try { // wait until thread is ready - fStartSignal.wait(); + fStartSignal_cond.wait(); } catch (InterruptedException x) { } } @@ -167,18 +172,19 @@ if (fStartSignal !is null) { synchronized (fStartSignal) { - fStartSignal.notifyAll(); + fStartSignal_cond.notifyAll(); fStartSignal= null; + fStartSignal_cond = null; } } // Wait for a selection event to occur. - fMutex.wait(); + fMutex_cond.wait(); while (true) { fIsReset= false; // Delay before showing the popup. - fMutex.wait(fDelay); + fMutex_cond.wait(fDelay); if (!fIsReset) break; } @@ -199,7 +205,7 @@ synchronized (fThreadAccess) { // only null fThread if it is us! - if (Thread.currentThread() is fThread) + if (JThread.currentThread() is fThread) fThread= null; } } @@ -212,7 +218,7 @@ if (fProposalTable !is null && !fProposalTable.isDisposed() && fProposalTable.isVisible()) { synchronized (fMutex) { fIsReset= true; - fMutex.notifyAll(); + fMutex_cond.notifyAll(); } } } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/internal/text/link/contentassist/ContentAssistant2.d --- a/dwtx/jface/internal/text/link/contentassist/ContentAssistant2.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/internal/text/link/contentassist/ContentAssistant2.d Tue Sep 09 17:44:33 2008 +0200 @@ -24,7 +24,9 @@ import dwt.dwthelper.utils; import dwtx.dwtxhelper.Collection; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; +import tango.core.sync.Mutex; +import tango.core.sync.Condition; import dwt.DWT; import dwt.DWTError; @@ -230,30 +232,33 @@ */ class AutoAssistListener : VerifyKeyListener, Runnable { - private Thread fThread; + private JThread fThread; private bool fIsReset= false; - private Object fMutex= new Object(); + private Mutex fMutex; + private Condition fMutex_cond; private int fShowStyle; private const static int SHOW_PROPOSALS= 1; private const static int SHOW_CONTEXT_INFO= 2; protected this() { + fMutex = new Mutex(); + fMutex_cond = new Condition(fMutex); } protected void start(int showStyle) { fShowStyle= showStyle; - fThread= new Thread(&run); - fThread.name = ContentAssistMessages.getString("ContentAssistant.assist_delay_timer_name"); //$NON-NLS-1$ + fThread= new JThread(this); + fThread.setName( ContentAssistMessages.getString("ContentAssistant.assist_delay_timer_name")); //$NON-NLS-1$ fThread.start(); } - public void run() { + public override void run() { try { while (true) { synchronized (fMutex) { if (fAutoActivationDelay !is 0) - fMutex.wait(fAutoActivationDelay); + fMutex_cond.wait(fAutoActivationDelay); if (fIsReset) { fIsReset= false; continue; @@ -271,12 +276,12 @@ synchronized (fMutex) { fShowStyle= showStyle; fIsReset= true; - fMutex.notifyAll(); + fMutex_cond.notifyAll(); } } protected void stop() { - Thread threadToStop= fThread; + JThread threadToStop= fThread; if (threadToStop !is null) threadToStop.interrupt(); } @@ -357,8 +362,13 @@ public const static int LAYOUT_CONTEXT_INFO_POPUP= 2; int fContextType= LAYOUT_CONTEXT_SELECTOR; - Shell[] fShells= new Shell[3]; - Object[] fPopups= new Object[3]; + Shell[] fShells; + Object[] fPopups; + + this(){ + fShells= new Shell[3]; + fPopups= new Object[3]; + } protected void add(Object popup, Shell shell, int type, int offset) { Assert.isNotNull(popup); @@ -632,7 +642,7 @@ * @see VerifyKeyListener#verifyKey(dwt.events.VerifyEvent) */ public void verifyKey(VerifyEvent e) { - IContentAssistListener2[] listeners= arraycast!(IContentAssistListener2)( fListeners.clone()); + IContentAssistListener2[] listeners= arraycast!(IContentAssistListener2)( fListeners.dup ); for (int i= 0; i < listeners.length; i++) { if (listeners[i] !is null) { if (!listeners[i].verifyKey(e) || !e.doit) @@ -648,7 +658,7 @@ installKeyListener(); - IContentAssistListener2[] listeners= arraycast!(IContentAssistListener2)(fListeners.clone()); + IContentAssistListener2[] listeners= arraycast!(IContentAssistListener2)( fListeners.dup ); for (int i= 0; i < listeners.length; i++) { if (listeners[i] !is null) { listeners[i].processEvent(event); @@ -661,9 +671,9 @@ // Content-Assist Listener types - final static int CONTEXT_SELECTOR= 0; - final static int PROPOSAL_SELECTOR= 1; - final static int CONTEXT_INFO_POPUP= 2; + const static int CONTEXT_SELECTOR= 0; + const static int PROPOSAL_SELECTOR= 1; + const static int CONTEXT_INFO_POPUP= 2; /** * The popup priority: > info pop-ups, < standard content assist. @@ -701,11 +711,11 @@ private ContextInformationPopup2 fContextInfoPopup; private bool fKeyListenerHooked= false; - private IContentAssistListener2[] fListeners= new IContentAssistListener2[4]; + private IContentAssistListener2[] fListeners; private int fCompletionPosition; private String[] fProposalStrings; private ICompletionProposal[] fProposals; - private const List fProposalListeners= new ArrayList(); + private const List fProposalListeners; /** * Tells whether colored label support is enabled. @@ -722,6 +732,9 @@ * is activated after a 500 ms delay. It uses the default partitioning. */ public this() { + fListeners= new IContentAssistListener2[4]; + fProposalListeners= new ArrayList(); + setContextInformationPopupOrientation(CONTEXT_INFO_ABOVE); setInformationControlCreator(getInformationControlCreator()); @@ -786,7 +799,7 @@ if (processor is null) fProcessors.remove(contentType); else - fProcessors.put(contentType, processor); + fProcessors.put(contentType, cast(Object)processor); } /* @@ -1014,7 +1027,7 @@ * @see IContentAssist#install */ public void install(ITextViewer textViewer) { - Assert.isNotNull(textViewer); + Assert.isNotNull(cast(Object)textViewer); fViewer= textViewer; @@ -1026,7 +1039,7 @@ int delay= fAutoActivationDelay; if (delay is 0) delay= DEFAULT_AUTO_ACTIVATION_DELAY; - delay= Math.round(delay * 1.5f); + delay= cast(int)Math.round(delay * 1.5f); controller= new AdditionalInfoController2(fInformationControlCreator, delay); } fContextInfoPopup= new ContextInformationPopup2(this, fViewer); @@ -1568,14 +1581,14 @@ * @param listener */ public void removeProposalListener(IProposalListener listener) { - fProposalListeners.remove(listener); + fProposalListeners.remove(cast(Object)listener); } /** * @param listener */ public void addProposalListener(IProposalListener listener) { - fProposalListeners.add(listener); + fProposalListeners.add(cast(Object)listener); } /** diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/operation/IThreadListener.d --- a/dwtx/jface/operation/IThreadListener.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/operation/IThreadListener.d Tue Sep 09 17:44:33 2008 +0200 @@ -13,7 +13,7 @@ module dwtx.jface.operation.IThreadListener; import dwt.dwthelper.utils; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; /** * A thread listener is an object that is interested in receiving notifications @@ -29,5 +29,5 @@ * * @param thread The new thread */ - public void threadChange(Thread thread); + public void threadChange(JThread thread); } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/operation/ModalContext.d --- a/dwtx/jface/operation/ModalContext.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/operation/ModalContext.d Tue Sep 09 17:44:33 2008 +0200 @@ -27,7 +27,7 @@ import dwt.dwthelper.utils; import dwt.dwthelper.Runnable; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import tango.io.Stdout; /** @@ -67,7 +67,7 @@ /** * Thread which runs the modal context. */ - private static class ModalContextThread : Thread { + private static class ModalContextThread : JThread { /** * The operation to be run. */ @@ -98,7 +98,7 @@ * * @since 3.1 */ - private Thread callingThread; + private JThread callingThread; /** * Creates a new modal context. @@ -113,18 +113,18 @@ */ private this(IRunnableWithProgress operation, IProgressMonitor monitor, Display display) { - super(&run2); //$NON-NLS-1$ + super(); //$NON-NLS-1$ Assert.isTrue(monitor !is null && display !is null); runnable = operation; progressMonitor = new AccumulatingProgressMonitor(monitor, display); this.display = display; - this.callingThread = Thread.getThis(); + this.callingThread = JThread.currentThread(); } /* * (non-Javadoc) Method declared on Thread. */ - public /+override+/ void run2() { + public override void run() { try { if (runnable !is null) { runnable.run(progressMonitor); @@ -156,11 +156,9 @@ // Make sure that all events in the asynchronous event queue // are dispatched. - display.syncExec(new class() Runnable { - public void run() { - // do nothing - } - }); + display.syncExec(dgRunnable( { + // do nothing + } )); // Stop event dispatching continueEventDispatching = false; @@ -276,7 +274,7 @@ * context is active. */ private static ModalContextThread getCurrentModalContextThread() { - Thread t = Thread.getThis(); + JThread t = JThread.currentThread(); if ( auto r = cast(ModalContextThread)t ) { return r; } @@ -307,7 +305,7 @@ * @return true if the given thread is running a modal * context, false if not */ - public static bool isModalContextThread(Thread thread) { + public static bool isModalContextThread(JThread thread) { return (cast(ModalContextThread)thread) !is null; } @@ -428,7 +426,7 @@ * the {@link Thread} being switched to */ static Exception invokeThreadListener(IThreadListener listener, - Thread switchingThread) { + JThread switchingThread) { try { listener.threadChange(switchingThread); // } catch (ThreadDeath e) { diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/ITextOperationTarget.d --- a/dwtx/jface/text/ITextOperationTarget.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/ITextOperationTarget.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,147 +12,6 @@ *******************************************************************************/ module dwtx.jface.text.ITextOperationTarget; -import dwtx.jface.text.IDocumentPartitioningListener; // packageimport -import dwtx.jface.text.DefaultTextHover; // packageimport -import dwtx.jface.text.AbstractInformationControl; // packageimport -import dwtx.jface.text.TextUtilities; // packageimport -import dwtx.jface.text.IInformationControlCreatorExtension; // packageimport -import dwtx.jface.text.AbstractInformationControlManager; // packageimport -import dwtx.jface.text.ITextViewerExtension2; // packageimport -import dwtx.jface.text.IDocumentPartitioner; // packageimport -import dwtx.jface.text.DefaultIndentLineAutoEditStrategy; // packageimport -import dwtx.jface.text.ITextSelection; // packageimport -import dwtx.jface.text.Document; // packageimport -import dwtx.jface.text.FindReplaceDocumentAdapterContentProposalProvider; // packageimport -import dwtx.jface.text.ITextListener; // packageimport -import dwtx.jface.text.BadPartitioningException; // packageimport -import dwtx.jface.text.ITextViewerExtension5; // packageimport -import dwtx.jface.text.IDocumentPartitionerExtension3; // packageimport -import dwtx.jface.text.IUndoManager; // packageimport -import dwtx.jface.text.ITextHoverExtension2; // packageimport -import dwtx.jface.text.IRepairableDocument; // packageimport -import dwtx.jface.text.IRewriteTarget; // packageimport -import dwtx.jface.text.DefaultPositionUpdater; // packageimport -import dwtx.jface.text.RewriteSessionEditProcessor; // packageimport -import dwtx.jface.text.TextViewerHoverManager; // packageimport -import dwtx.jface.text.DocumentRewriteSession; // packageimport -import dwtx.jface.text.TextViewer; // packageimport -import dwtx.jface.text.ITextViewerExtension8; // packageimport -import dwtx.jface.text.RegExMessages; // packageimport -import dwtx.jface.text.IDelayedInputChangeProvider; // packageimport -import dwtx.jface.text.ITextOperationTargetExtension; // packageimport -import dwtx.jface.text.IWidgetTokenOwner; // packageimport -import dwtx.jface.text.IViewportListener; // packageimport -import dwtx.jface.text.GapTextStore; // packageimport -import dwtx.jface.text.MarkSelection; // packageimport -import dwtx.jface.text.IDocumentPartitioningListenerExtension; // packageimport -import dwtx.jface.text.IDocumentAdapterExtension; // packageimport -import dwtx.jface.text.IInformationControlExtension; // packageimport -import dwtx.jface.text.IDocumentPartitioningListenerExtension2; // packageimport -import dwtx.jface.text.DefaultDocumentAdapter; // packageimport -import dwtx.jface.text.ITextViewerExtension3; // packageimport -import dwtx.jface.text.IInformationControlCreator; // packageimport -import dwtx.jface.text.TypedRegion; // packageimport -import dwtx.jface.text.ISynchronizable; // packageimport -import dwtx.jface.text.IMarkRegionTarget; // packageimport -import dwtx.jface.text.TextViewerUndoManager; // packageimport -import dwtx.jface.text.IRegion; // packageimport -import dwtx.jface.text.IInformationControlExtension2; // packageimport -import dwtx.jface.text.IDocumentExtension4; // packageimport -import dwtx.jface.text.IDocumentExtension2; // packageimport -import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport -import dwtx.jface.text.Assert; // packageimport -import dwtx.jface.text.DefaultInformationControl; // packageimport -import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport -import dwtx.jface.text.DocumentClone; // packageimport -import dwtx.jface.text.DefaultUndoManager; // packageimport -import dwtx.jface.text.IFindReplaceTarget; // packageimport -import dwtx.jface.text.IAutoEditStrategy; // packageimport -import dwtx.jface.text.ILineTrackerExtension; // packageimport -import dwtx.jface.text.IUndoManagerExtension; // packageimport -import dwtx.jface.text.TextSelection; // packageimport -import dwtx.jface.text.DefaultAutoIndentStrategy; // packageimport -import dwtx.jface.text.IAutoIndentStrategy; // packageimport -import dwtx.jface.text.IPainter; // packageimport -import dwtx.jface.text.IInformationControl; // packageimport -import dwtx.jface.text.IInformationControlExtension3; // packageimport -import dwtx.jface.text.ITextViewerExtension6; // packageimport -import dwtx.jface.text.IInformationControlExtension4; // packageimport -import dwtx.jface.text.DefaultLineTracker; // packageimport -import dwtx.jface.text.IDocumentInformationMappingExtension; // packageimport -import dwtx.jface.text.IRepairableDocumentExtension; // packageimport -import dwtx.jface.text.ITextHover; // packageimport -import dwtx.jface.text.FindReplaceDocumentAdapter; // packageimport -import dwtx.jface.text.ILineTracker; // packageimport -import dwtx.jface.text.Line; // packageimport -import dwtx.jface.text.ITextViewerExtension; // packageimport -import dwtx.jface.text.IDocumentAdapter; // packageimport -import dwtx.jface.text.TextEvent; // packageimport -import dwtx.jface.text.BadLocationException; // packageimport -import dwtx.jface.text.AbstractDocument; // packageimport -import dwtx.jface.text.AbstractLineTracker; // packageimport -import dwtx.jface.text.TreeLineTracker; // packageimport -import dwtx.jface.text.ITextPresentationListener; // packageimport -import dwtx.jface.text.Region; // packageimport -import dwtx.jface.text.ITextViewer; // packageimport -import dwtx.jface.text.IDocumentInformationMapping; // packageimport -import dwtx.jface.text.MarginPainter; // packageimport -import dwtx.jface.text.IPaintPositionManager; // packageimport -import dwtx.jface.text.TextPresentation; // packageimport -import dwtx.jface.text.IFindReplaceTargetExtension; // packageimport -import dwtx.jface.text.ISlaveDocumentManagerExtension; // packageimport -import dwtx.jface.text.ISelectionValidator; // packageimport -import dwtx.jface.text.IDocumentExtension; // packageimport -import dwtx.jface.text.PropagatingFontFieldEditor; // packageimport -import dwtx.jface.text.ConfigurableLineTracker; // packageimport -import dwtx.jface.text.SlaveDocumentEvent; // packageimport -import dwtx.jface.text.IDocumentListener; // packageimport -import dwtx.jface.text.PaintManager; // packageimport -import dwtx.jface.text.IFindReplaceTargetExtension3; // packageimport -import dwtx.jface.text.ITextDoubleClickStrategy; // packageimport -import dwtx.jface.text.IDocumentExtension3; // packageimport -import dwtx.jface.text.Position; // packageimport -import dwtx.jface.text.TextMessages; // packageimport -import dwtx.jface.text.CopyOnWriteTextStore; // packageimport -import dwtx.jface.text.WhitespaceCharacterPainter; // packageimport -import dwtx.jface.text.IPositionUpdater; // packageimport -import dwtx.jface.text.DefaultTextDoubleClickStrategy; // packageimport -import dwtx.jface.text.ListLineTracker; // packageimport -import dwtx.jface.text.ITextInputListener; // packageimport -import dwtx.jface.text.BadPositionCategoryException; // packageimport -import dwtx.jface.text.IWidgetTokenKeeperExtension; // packageimport -import dwtx.jface.text.IInputChangedListener; // packageimport -import dwtx.jface.text.IDocumentInformationMappingExtension2; // packageimport -import dwtx.jface.text.ITextViewerExtension7; // packageimport -import dwtx.jface.text.IInformationControlExtension5; // packageimport -import dwtx.jface.text.IDocumentRewriteSessionListener; // packageimport -import dwtx.jface.text.JFaceTextUtil; // packageimport -import dwtx.jface.text.AbstractReusableInformationControlCreator; // packageimport -import dwtx.jface.text.TabsToSpacesConverter; // packageimport -import dwtx.jface.text.CursorLinePainter; // packageimport -import dwtx.jface.text.ITextHoverExtension; // packageimport -import dwtx.jface.text.IEventConsumer; // packageimport -import dwtx.jface.text.IDocument; // packageimport -import dwtx.jface.text.IWidgetTokenKeeper; // packageimport -import dwtx.jface.text.DocumentCommand; // packageimport -import dwtx.jface.text.TypedPosition; // packageimport -import dwtx.jface.text.IEditingSupportRegistry; // packageimport -import dwtx.jface.text.IDocumentPartitionerExtension; // packageimport -import dwtx.jface.text.AbstractHoverInformationControlManager; // packageimport -import dwtx.jface.text.IEditingSupport; // packageimport -import dwtx.jface.text.IMarkSelection; // packageimport -import dwtx.jface.text.ISlaveDocumentManager; // packageimport -import dwtx.jface.text.DocumentEvent; // packageimport -import dwtx.jface.text.DocumentPartitioningChangedEvent; // packageimport -import dwtx.jface.text.ITextStore; // packageimport -import dwtx.jface.text.JFaceTextMessages; // packageimport -import dwtx.jface.text.DocumentRewriteSessionEvent; // packageimport -import dwtx.jface.text.SequentialRewriteTextStore; // packageimport -import dwtx.jface.text.DocumentRewriteSessionType; // packageimport -import dwtx.jface.text.TextAttribute; // packageimport -import dwtx.jface.text.ITextViewerExtension4; // packageimport -import dwtx.jface.text.ITypedRegion; // packageimport - import dwt.dwthelper.utils; diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/ITextViewer.d --- a/dwtx/jface/text/ITextViewer.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/ITextViewer.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,152 +12,23 @@ *******************************************************************************/ module dwtx.jface.text.ITextViewer; -import dwtx.jface.text.IDocumentPartitioningListener; // packageimport -import dwtx.jface.text.DefaultTextHover; // packageimport -import dwtx.jface.text.AbstractInformationControl; // packageimport -import dwtx.jface.text.TextUtilities; // packageimport -import dwtx.jface.text.IInformationControlCreatorExtension; // packageimport -import dwtx.jface.text.AbstractInformationControlManager; // packageimport -import dwtx.jface.text.ITextViewerExtension2; // packageimport -import dwtx.jface.text.IDocumentPartitioner; // packageimport -import dwtx.jface.text.DefaultIndentLineAutoEditStrategy; // packageimport -import dwtx.jface.text.ITextSelection; // packageimport -import dwtx.jface.text.Document; // packageimport -import dwtx.jface.text.FindReplaceDocumentAdapterContentProposalProvider; // packageimport import dwtx.jface.text.ITextListener; // packageimport -import dwtx.jface.text.BadPartitioningException; // packageimport -import dwtx.jface.text.ITextViewerExtension5; // packageimport -import dwtx.jface.text.IDocumentPartitionerExtension3; // packageimport import dwtx.jface.text.IUndoManager; // packageimport import dwtx.jface.text.ITextHoverExtension2; // packageimport -import dwtx.jface.text.IRepairableDocument; // packageimport -import dwtx.jface.text.IRewriteTarget; // packageimport -import dwtx.jface.text.DefaultPositionUpdater; // packageimport -import dwtx.jface.text.RewriteSessionEditProcessor; // packageimport -import dwtx.jface.text.TextViewerHoverManager; // packageimport -import dwtx.jface.text.DocumentRewriteSession; // packageimport -import dwtx.jface.text.TextViewer; // packageimport -import dwtx.jface.text.ITextViewerExtension8; // packageimport -import dwtx.jface.text.RegExMessages; // packageimport -import dwtx.jface.text.IDelayedInputChangeProvider; // packageimport -import dwtx.jface.text.ITextOperationTargetExtension; // packageimport -import dwtx.jface.text.IWidgetTokenOwner; // packageimport import dwtx.jface.text.IViewportListener; // packageimport -import dwtx.jface.text.GapTextStore; // packageimport -import dwtx.jface.text.MarkSelection; // packageimport -import dwtx.jface.text.IDocumentPartitioningListenerExtension; // packageimport -import dwtx.jface.text.IDocumentAdapterExtension; // packageimport -import dwtx.jface.text.IInformationControlExtension; // packageimport -import dwtx.jface.text.IDocumentPartitioningListenerExtension2; // packageimport -import dwtx.jface.text.DefaultDocumentAdapter; // packageimport -import dwtx.jface.text.ITextViewerExtension3; // packageimport -import dwtx.jface.text.IInformationControlCreator; // packageimport -import dwtx.jface.text.TypedRegion; // packageimport -import dwtx.jface.text.ISynchronizable; // packageimport -import dwtx.jface.text.IMarkRegionTarget; // packageimport -import dwtx.jface.text.TextViewerUndoManager; // packageimport import dwtx.jface.text.IRegion; // packageimport -import dwtx.jface.text.IInformationControlExtension2; // packageimport -import dwtx.jface.text.IDocumentExtension4; // packageimport -import dwtx.jface.text.IDocumentExtension2; // packageimport -import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport -import dwtx.jface.text.Assert; // packageimport -import dwtx.jface.text.DefaultInformationControl; // packageimport -import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport -import dwtx.jface.text.DocumentClone; // packageimport -import dwtx.jface.text.DefaultUndoManager; // packageimport import dwtx.jface.text.IFindReplaceTarget; // packageimport -import dwtx.jface.text.IAutoEditStrategy; // packageimport -import dwtx.jface.text.ILineTrackerExtension; // packageimport -import dwtx.jface.text.IUndoManagerExtension; // packageimport -import dwtx.jface.text.TextSelection; // packageimport -import dwtx.jface.text.DefaultAutoIndentStrategy; // packageimport import dwtx.jface.text.IAutoIndentStrategy; // packageimport -import dwtx.jface.text.IPainter; // packageimport -import dwtx.jface.text.IInformationControl; // packageimport -import dwtx.jface.text.IInformationControlExtension3; // packageimport -import dwtx.jface.text.ITextViewerExtension6; // packageimport -import dwtx.jface.text.IInformationControlExtension4; // packageimport -import dwtx.jface.text.DefaultLineTracker; // packageimport -import dwtx.jface.text.IDocumentInformationMappingExtension; // packageimport -import dwtx.jface.text.IRepairableDocumentExtension; // packageimport import dwtx.jface.text.ITextHover; // packageimport -import dwtx.jface.text.FindReplaceDocumentAdapter; // packageimport -import dwtx.jface.text.ILineTracker; // packageimport -import dwtx.jface.text.Line; // packageimport -import dwtx.jface.text.ITextViewerExtension; // packageimport -import dwtx.jface.text.IDocumentAdapter; // packageimport -import dwtx.jface.text.TextEvent; // packageimport -import dwtx.jface.text.BadLocationException; // packageimport -import dwtx.jface.text.AbstractDocument; // packageimport -import dwtx.jface.text.AbstractLineTracker; // packageimport -import dwtx.jface.text.TreeLineTracker; // packageimport -import dwtx.jface.text.ITextPresentationListener; // packageimport -import dwtx.jface.text.Region; // packageimport -import dwtx.jface.text.IDocumentInformationMapping; // packageimport -import dwtx.jface.text.MarginPainter; // packageimport -import dwtx.jface.text.IPaintPositionManager; // packageimport import dwtx.jface.text.TextPresentation; // packageimport -import dwtx.jface.text.IFindReplaceTargetExtension; // packageimport -import dwtx.jface.text.ISlaveDocumentManagerExtension; // packageimport -import dwtx.jface.text.ISelectionValidator; // packageimport -import dwtx.jface.text.IDocumentExtension; // packageimport -import dwtx.jface.text.PropagatingFontFieldEditor; // packageimport -import dwtx.jface.text.ConfigurableLineTracker; // packageimport -import dwtx.jface.text.SlaveDocumentEvent; // packageimport -import dwtx.jface.text.IDocumentListener; // packageimport -import dwtx.jface.text.PaintManager; // packageimport -import dwtx.jface.text.IFindReplaceTargetExtension3; // packageimport import dwtx.jface.text.ITextDoubleClickStrategy; // packageimport -import dwtx.jface.text.IDocumentExtension3; // packageimport -import dwtx.jface.text.Position; // packageimport -import dwtx.jface.text.TextMessages; // packageimport -import dwtx.jface.text.CopyOnWriteTextStore; // packageimport -import dwtx.jface.text.WhitespaceCharacterPainter; // packageimport -import dwtx.jface.text.IPositionUpdater; // packageimport -import dwtx.jface.text.DefaultTextDoubleClickStrategy; // packageimport -import dwtx.jface.text.ListLineTracker; // packageimport import dwtx.jface.text.ITextInputListener; // packageimport -import dwtx.jface.text.BadPositionCategoryException; // packageimport -import dwtx.jface.text.IWidgetTokenKeeperExtension; // packageimport -import dwtx.jface.text.IInputChangedListener; // packageimport import dwtx.jface.text.ITextOperationTarget; // packageimport -import dwtx.jface.text.IDocumentInformationMappingExtension2; // packageimport -import dwtx.jface.text.ITextViewerExtension7; // packageimport -import dwtx.jface.text.IInformationControlExtension5; // packageimport -import dwtx.jface.text.IDocumentRewriteSessionListener; // packageimport -import dwtx.jface.text.JFaceTextUtil; // packageimport -import dwtx.jface.text.AbstractReusableInformationControlCreator; // packageimport -import dwtx.jface.text.TabsToSpacesConverter; // packageimport -import dwtx.jface.text.CursorLinePainter; // packageimport -import dwtx.jface.text.ITextHoverExtension; // packageimport import dwtx.jface.text.IEventConsumer; // packageimport import dwtx.jface.text.IDocument; // packageimport -import dwtx.jface.text.IWidgetTokenKeeper; // packageimport -import dwtx.jface.text.DocumentCommand; // packageimport -import dwtx.jface.text.TypedPosition; // packageimport -import dwtx.jface.text.IEditingSupportRegistry; // packageimport -import dwtx.jface.text.IDocumentPartitionerExtension; // packageimport -import dwtx.jface.text.AbstractHoverInformationControlManager; // packageimport -import dwtx.jface.text.IEditingSupport; // packageimport -import dwtx.jface.text.IMarkSelection; // packageimport -import dwtx.jface.text.ISlaveDocumentManager; // packageimport -import dwtx.jface.text.DocumentEvent; // packageimport -import dwtx.jface.text.DocumentPartitioningChangedEvent; // packageimport -import dwtx.jface.text.ITextStore; // packageimport -import dwtx.jface.text.JFaceTextMessages; // packageimport -import dwtx.jface.text.DocumentRewriteSessionEvent; // packageimport -import dwtx.jface.text.SequentialRewriteTextStore; // packageimport -import dwtx.jface.text.DocumentRewriteSessionType; // packageimport -import dwtx.jface.text.TextAttribute; // packageimport -import dwtx.jface.text.ITextViewerExtension4; // packageimport -import dwtx.jface.text.ITypedRegion; // packageimport - import dwt.dwthelper.utils; - - import dwt.custom.StyledText; import dwt.graphics.Color; import dwt.graphics.Point; @@ -611,7 +482,7 @@ /** * Sets the selection to the specified range. - * + * * @param offset the offset of the selection range * @param length the length of the selection range. A negative length places * the caret at the visual start of the selection. diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/TextViewer.d --- a/dwtx/jface/text/TextViewer.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/TextViewer.d Tue Sep 09 17:44:33 2008 +0200 @@ -156,7 +156,7 @@ import dwtx.dwtxhelper.Collection; import dwtx.dwtxhelper.regex; import tango.text.convert.Format; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwt.DWT; import dwt.custom.LineBackgroundEvent; diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/TextViewerHoverManager.d --- a/dwtx/jface/text/TextViewerHoverManager.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/TextViewerHoverManager.d Tue Sep 09 17:44:33 2008 +0200 @@ -154,7 +154,7 @@ import dwtx.jface.text.ITypedRegion; // packageimport import dwt.dwthelper.utils; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwt.custom.StyledText; import dwt.events.MouseEvent; @@ -192,7 +192,7 @@ /** The text viewer */ private TextViewer fTextViewer; /** The hover information computation thread */ - private Thread fThread; + private JThread fThread; /** The stopper of the computation thread */ private ITextListener fStopper; /** Internal monitor */ diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/contentassist/AdditionalInfoController.d --- a/dwtx/jface/text/contentassist/AdditionalInfoController.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/contentassist/AdditionalInfoController.d Tue Sep 09 17:44:33 2008 +0200 @@ -45,7 +45,7 @@ import dwtx.jface.text.contentassist.JFaceTextMessages; // packageimport import dwt.dwthelper.utils; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwt.events.SelectionEvent; import dwt.events.SelectionListener; @@ -259,7 +259,7 @@ } /** The timer thread. */ - private const Thread fThread; + private const JThread fThread; /** The currently waiting / active task. */ private Task fTask; @@ -292,15 +292,15 @@ long current= System.currentTimeMillis(); schedule(IDLE, current); - void threadrun() { - try { - loop(); - } catch (InterruptedException x) { - } + fThread= new JThread( &threadrun ); + fThread.serName( JFaceTextMessages.getString("InfoPopup.info_delay_timer_name")); //$NON-NLS-1$ + fThread.start(); + } + void threadrun() { + try { + loop(); + } catch (InterruptedException x) { } - fThread= new Thread( &threadrun ); - fThread.name = JFaceTextMessages.getString("InfoPopup.info_delay_timer_name"); //$NON-NLS-1$ - fThread.start(); } /** diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/contentassist/ContentAssistant.d --- a/dwtx/jface/text/contentassist/ContentAssistant.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/contentassist/ContentAssistant.d Tue Sep 09 17:44:33 2008 +0200 @@ -48,7 +48,9 @@ import dwt.dwthelper.utils; import dwtx.dwtxhelper.Collection; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; +import tango.core.sync.Mutex; +import tango.core.sync.Condition; import dwt.DWT; import dwt.DWTError; @@ -276,30 +278,38 @@ */ protected class AutoAssistListener : KeyAdapter , KeyListener, Runnable, VerifyKeyListener { - private Thread fThread; + // DWT intf impl + public void keyReleased(KeyEvent e) { + super.keyReleased(e); + } + + private JThread fThread; private bool fIsReset= false; - private Object fMutex= new Object(); + private Mutex fMutex; + private Condition fMutex_cond; private int fShowStyle; private const static int SHOW_PROPOSALS= 1; private const static int SHOW_CONTEXT_INFO= 2; protected this() { + fMutex = new Mutex(); + fMutex_cond = new Condition(fMutex); } protected void start(int showStyle) { fShowStyle= showStyle; - fThread= new Thread(&run); - fThread.name = JFaceTextMessages.getString("ContentAssistant.assist_delay_timer_name"); //$NON-NLS-1$ + fThread= new JThread(this); + fThread.setName( JFaceTextMessages.getString("ContentAssistant.assist_delay_timer_name")); //$NON-NLS-1$ fThread.start(); } - public void run() { + public override void run() { try { while (true) { synchronized (fMutex) { if (fAutoActivationDelay !is 0) - fMutex.wait(fAutoActivationDelay); + fMutex_cond.wait(fAutoActivationDelay); if (fIsReset) { fIsReset= false; continue; @@ -317,12 +327,12 @@ synchronized (fMutex) { fShowStyle= showStyle; fIsReset= true; - fMutex.notifyAll(); + fMutex_cond.notifyAll(); } } protected void stop() { - Thread threadToStop= fThread; + JThread threadToStop= fThread; if (threadToStop !is null && threadToStop.isAlive()) threadToStop.interrupt(); } @@ -432,8 +442,13 @@ public const static int LAYOUT_CONTEXT_INFO_POPUP= 2; int fContextType= LAYOUT_CONTEXT_SELECTOR; - Shell[] fShells= new Shell[3]; - Object[] fPopups= new Object[3]; + Shell[] fShells; + Object[] fPopups; + + this(){ + fShells= new Shell[3]; + fPopups= new Object[3]; + } protected void add(Object popup, Shell shell, int type, int offset) { Assert.isNotNull(popup); @@ -668,7 +683,7 @@ Control subjectControl= fContentAssistSubjectControlAdapter.getControl(); Display display= subjectControl.getDisplay(); Rectangle caret= getCaretRectangle(offset); - Monitor monitor= getClosestMonitor(display, caret); + dwt.widgets.Monitor.Monitor monitor= getClosestMonitor(display, caret); Rectangle bounds= monitor.getClientArea(); Geometry.moveInside(caret, bounds); @@ -708,7 +723,7 @@ Control subjectControl= fContentAssistSubjectControlAdapter.getControl(); Display display= subjectControl.getDisplay(); Rectangle caret= getCaretRectangle(offset); - Monitor monitor= getClosestMonitor(display, caret); + dwt.widgets.Monitor.Monitor monitor= getClosestMonitor(display, caret); Rectangle bounds= monitor.getClientArea(); Geometry.moveInside(caret, bounds); @@ -761,7 +776,7 @@ p= parent.toDisplay(p); Point shellSize= shell.getSize(); - Monitor monitor= getClosestMonitor(parent.getDisplay(), new Rectangle(p.x, p.y, 0, 0)); + dwt.widgets.Monitor.Monitor monitor= getClosestMonitor(parent.getDisplay(), new Rectangle(p.x, p.y, 0, 0)); Rectangle displayBounds= monitor.getClientArea(); constrainLocation(p, shellSize, displayBounds); @@ -800,15 +815,15 @@ * @return the monitor closest to the given point * @since 3.3 */ - private Monitor getClosestMonitor(Display toSearch, Rectangle rectangle) { + private dwt.widgets.Monitor.Monitor getClosestMonitor(Display toSearch, Rectangle rectangle) { int closest = Integer.MAX_VALUE; Point toFind= Geometry.centerPoint(rectangle); - Monitor[] monitors = toSearch.getMonitors(); - Monitor result = monitors[0]; + dwt.widgets.Monitor.Monitor[] monitors = toSearch.getMonitors(); + dwt.widgets.Monitor.Monitor result = monitors[0]; for (int idx = 0; idx < monitors.length; idx++) { - Monitor current = monitors[idx]; + dwt.widgets.Monitor.Monitor current = monitors[idx]; Rectangle clientArea = current.getClientArea(); @@ -840,7 +855,7 @@ * @see VerifyKeyListener#verifyKey(dwt.events.VerifyEvent) */ public void verifyKey(VerifyEvent e) { - IContentAssistListener[] listeners= arraycast!(IContentAssistListener)( fListeners.clone() ); + IContentAssistListener[] listeners= arraycast!(IContentAssistListener)( fListeners.dup ); for (int i= 0; i < listeners.length; i++) { if (listeners[i] !is null) { if (!listeners[i].verifyKey(e) || !e.doit) @@ -858,7 +873,7 @@ installKeyListener(); - IContentAssistListener[] listeners= arraycast!(IContentAssistListener)( fListeners.clone() ); + IContentAssistListener[] listeners= arraycast!(IContentAssistListener)( fListeners.dup ); for (int i= 0; i < listeners.length; i++) { if (listeners[i] !is null) { listeners[i].processEvent(event); @@ -878,9 +893,9 @@ public static const String STORE_SIZE_Y= "size.y"; //$NON-NLS-1$ // Content-Assist Listener types - final static int CONTEXT_SELECTOR= 0; - final static int PROPOSAL_SELECTOR= 1; - final static int CONTEXT_INFO_POPUP= 2; + const static int CONTEXT_SELECTOR= 0; + const static int PROPOSAL_SELECTOR= 1; + const static int CONTEXT_INFO_POPUP= 2; /** * The popup priority: > linked position proposals and hover pop-ups. Default value: @@ -1075,7 +1090,7 @@ if (processor is null) fProcessors.remove(contentType); else - fProcessors.put(contentType, processor); + fProcessors.put(contentType, cast(Object)processor); } /* @@ -1101,7 +1116,7 @@ StringBuffer buf= new StringBuffer(5); Iterator iter= fProcessors.entrySet().iterator(); while (iter.hasNext()) { - Entry entry= cast(Entry) iter.next(); + Map.Entry entry= cast(Map.Entry) iter.next(); IContentAssistProcessor processor= cast(IContentAssistProcessor) entry.getValue(); char[] triggers= processor.getCompletionProposalAutoActivationCharacters(); if (triggers !is null) @@ -1414,7 +1429,7 @@ int delay= fAutoActivationDelay; if (delay is 0) delay= DEFAULT_AUTO_ACTIVATION_DELAY; - delay= Math.round(delay * 1.5f); + delay= cast(int)Math.round(delay * 1.5f); controller= new AdditionalInfoController(fInformationControlCreator, delay); } @@ -2241,7 +2256,7 @@ */ public void addCompletionListener(ICompletionListener listener) { Assert.isLegal(listener !is null); - fCompletionListeners.add(listener); + fCompletionListeners.add(cast(Object)listener); } /* @@ -2249,7 +2264,7 @@ * @since 3.2 */ public void removeCompletionListener(ICompletionListener listener) { - fCompletionListeners.remove(listener); + fCompletionListeners.remove(cast(Object)listener); } /** @@ -2478,7 +2493,7 @@ protected final void registerHandler(String commandId, IHandler handler) { if (fHandlers is null) fHandlers= new HashMap(2); - fHandlers.put(commandId, handler); + fHandlers.put(commandId, cast(Object)handler); } /** diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/reconciler/AbstractReconciler.d --- a/dwtx/jface/text/reconciler/AbstractReconciler.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/reconciler/AbstractReconciler.d Tue Sep 09 17:44:33 2008 +0200 @@ -27,7 +27,7 @@ import dwt.dwthelper.utils; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwtx.core.runtime.Assert; import dwtx.core.runtime.IProgressMonitor; @@ -69,7 +69,7 @@ * Background thread for the reconciling activity. */ class BackgroundThread { - Thread thread; + JThread thread; /** Has the reconciler been canceled. */ private bool fCanceled= false; @@ -99,7 +99,7 @@ public bool isAlive(){ return thread.isRunning(); } - public Thread getThread(){ + public JThread getThread(){ return thread; } /** diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/source/AnnotationModel.d --- a/dwtx/jface/text/source/AnnotationModel.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/source/AnnotationModel.d Tue Sep 09 17:44:33 2008 +0200 @@ -77,7 +77,7 @@ import dwt.dwthelper.utils; import dwtx.dwtxhelper.Collection; import tango.core.Exception; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwtx.core.runtime.Assert; import dwtx.jface.text.AbstractDocument; diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/source/ISourceViewer.d --- a/dwtx/jface/text/source/ISourceViewer.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/source/ISourceViewer.d Tue Sep 09 17:44:33 2008 +0200 @@ -12,68 +12,10 @@ *******************************************************************************/ module dwtx.jface.text.source.ISourceViewer; -import dwtx.jface.text.source.ISharedTextColors; // packageimport -import dwtx.jface.text.source.ILineRange; // packageimport -import dwtx.jface.text.source.IAnnotationPresentation; // packageimport -import dwtx.jface.text.source.IVerticalRulerInfoExtension; // packageimport -import dwtx.jface.text.source.ICharacterPairMatcher; // packageimport -import dwtx.jface.text.source.TextInvocationContext; // packageimport -import dwtx.jface.text.source.LineChangeHover; // packageimport -import dwtx.jface.text.source.IChangeRulerColumn; // packageimport -import dwtx.jface.text.source.IAnnotationMap; // packageimport -import dwtx.jface.text.source.IAnnotationModelListenerExtension; // packageimport -import dwtx.jface.text.source.ISourceViewerExtension2; // packageimport -import dwtx.jface.text.source.IAnnotationHover; // packageimport -import dwtx.jface.text.source.ContentAssistantFacade; // packageimport -import dwtx.jface.text.source.IAnnotationAccess; // packageimport -import dwtx.jface.text.source.IVerticalRulerExtension; // packageimport -import dwtx.jface.text.source.IVerticalRulerColumn; // packageimport -import dwtx.jface.text.source.LineNumberRulerColumn; // packageimport -import dwtx.jface.text.source.MatchingCharacterPainter; // packageimport -import dwtx.jface.text.source.IAnnotationModelExtension; // packageimport -import dwtx.jface.text.source.ILineDifferExtension; // packageimport -import dwtx.jface.text.source.DefaultCharacterPairMatcher; // packageimport -import dwtx.jface.text.source.LineNumberChangeRulerColumn; // packageimport -import dwtx.jface.text.source.IAnnotationAccessExtension; // packageimport -import dwtx.jface.text.source.AnnotationModel; // packageimport -import dwtx.jface.text.source.ILineDifferExtension2; // packageimport -import dwtx.jface.text.source.IAnnotationModelListener; // packageimport -import dwtx.jface.text.source.IVerticalRuler; // packageimport -import dwtx.jface.text.source.DefaultAnnotationHover; // packageimport -import dwtx.jface.text.source.SourceViewer; // packageimport -import dwtx.jface.text.source.SourceViewerConfiguration; // packageimport -import dwtx.jface.text.source.AnnotationBarHoverManager; // packageimport -import dwtx.jface.text.source.CompositeRuler; // packageimport -import dwtx.jface.text.source.ImageUtilities; // packageimport -import dwtx.jface.text.source.VisualAnnotationModel; // packageimport -import dwtx.jface.text.source.IAnnotationModel; // packageimport -import dwtx.jface.text.source.ISourceViewerExtension3; // packageimport -import dwtx.jface.text.source.ILineDiffInfo; // packageimport -import dwtx.jface.text.source.VerticalRulerEvent; // packageimport -import dwtx.jface.text.source.ChangeRulerColumn; // packageimport -import dwtx.jface.text.source.ILineDiffer; // packageimport -import dwtx.jface.text.source.AnnotationModelEvent; // packageimport -import dwtx.jface.text.source.AnnotationColumn; // packageimport -import dwtx.jface.text.source.AnnotationRulerColumn; // packageimport -import dwtx.jface.text.source.IAnnotationHoverExtension; // packageimport -import dwtx.jface.text.source.AbstractRulerColumn; // packageimport -import dwtx.jface.text.source.ISourceViewerExtension; // packageimport -import dwtx.jface.text.source.AnnotationMap; // packageimport -import dwtx.jface.text.source.IVerticalRulerInfo; // packageimport -import dwtx.jface.text.source.IAnnotationModelExtension2; // packageimport -import dwtx.jface.text.source.LineRange; // packageimport -import dwtx.jface.text.source.IAnnotationAccessExtension2; // packageimport -import dwtx.jface.text.source.VerticalRuler; // packageimport -import dwtx.jface.text.source.JFaceTextMessages; // packageimport -import dwtx.jface.text.source.IOverviewRuler; // packageimport -import dwtx.jface.text.source.Annotation; // packageimport -import dwtx.jface.text.source.IVerticalRulerListener; // packageimport -import dwtx.jface.text.source.ISourceViewerExtension4; // packageimport -import dwtx.jface.text.source.AnnotationPainter; // packageimport -import dwtx.jface.text.source.IAnnotationHoverExtension2; // packageimport -import dwtx.jface.text.source.OverviewRuler; // packageimport -import dwtx.jface.text.source.OverviewRulerHoverManager; // packageimport - +import dwtx.jface.text.source.SourceViewerConfiguration; +import dwtx.jface.text.source.IAnnotationHover; +import dwtx.jface.text.source.IAnnotationModel; +import dwtx.jface.text.source.Annotation; import dwt.dwthelper.utils; diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/source/projection/ProjectionSummary.d --- a/dwtx/jface/text/source/projection/ProjectionSummary.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/source/projection/ProjectionSummary.d Tue Sep 09 17:44:33 2008 +0200 @@ -25,7 +25,7 @@ import dwt.dwthelper.utils; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; import dwtx.dwtxhelper.Collection; @@ -55,7 +55,7 @@ private class Summarizer { - Thread thread; + JThread thread; private bool fReset= true; /** diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/templates/persistence/TemplatePersistenceMessages.properties --- a/dwtx/jface/text/templates/persistence/TemplatePersistenceMessages.properties Mon Sep 08 01:38:10 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2005 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -TemplateReaderWriter.duplicate.id= Duplicate template id -TemplateReaderWriter.error.missing_attribute= Missing required attribute -TemplateReaderWriter.error.illegal_boolean_attribute= Illegal boolean attribute, must be "true" or "false". diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/text/templates/persistence/TemplateReaderWriter.d --- a/dwtx/jface/text/templates/persistence/TemplateReaderWriter.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/text/templates/persistence/TemplateReaderWriter.d Tue Sep 09 17:44:33 2008 +0200 @@ -19,6 +19,7 @@ import dwt.dwthelper.utils; import dwt.dwthelper.InputStream; +import dwt.dwthelper.OutputStream; import dwtx.dwtxhelper.Collection; import dwt.dwthelper.ResourceBundle; @@ -102,9 +103,10 @@ * @since 3.1 */ public TemplatePersistenceData readSingle(Reader reader, String id) { - TemplatePersistenceData[] datas= read(new InputSource(reader), null, id); + implMissing(__FILE__,__LINE__); +/+ TemplatePersistenceData[] datas= read(new InputSource(reader), null, id); if (datas.length > 0) - return datas[0]; + return datas[0];+/ return null; } @@ -117,7 +119,9 @@ * @throws IOException if reading from the stream fails */ public TemplatePersistenceData[] read(Reader reader, ResourceBundle bundle) { - return read(new InputSource(reader), bundle, null); + implMissing(__FILE__,__LINE__); + return null; +// return read(new InputSource(reader), bundle, null); } /** @@ -129,9 +133,11 @@ * @throws IOException if reading from the stream fails */ public TemplatePersistenceData[] read(InputStream stream, ResourceBundle bundle) { - return read(new InputSource(stream), bundle, null); + implMissing(__FILE__,__LINE__); + return null; +// return read(new InputSource(stream), bundle, null); } - +/++ /** * Reads templates from an InputSource and adds them to the templates. * @@ -219,7 +225,7 @@ return null; // dummy } - +++/ /** * Saves the templates as XML, encoded as UTF-8 onto the given byte stream. * @@ -228,7 +234,8 @@ * @throws IOException if writing the templates fails */ public void save(TemplatePersistenceData[] templates, OutputStream stream) { - save(templates, new StreamResult(stream)); + implMissing(__FILE__,__LINE__); +// save(templates, new StreamResult(stream)); } /** @@ -239,9 +246,11 @@ * @throws IOException if writing the templates fails */ public void save(TemplatePersistenceData[] templates, Writer writer) { - save(templates, new StreamResult(writer)); + implMissing(__FILE__,__LINE__); +// save(templates, new StreamResult(writer)); } +/++ /** * Saves the templates as XML. * @@ -386,5 +395,6 @@ } return TemplatePersistenceMessages.getString(key); // default messages } +++/ } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/viewers/deferred/BackgroundContentProvider.d --- a/dwtx/jface/viewers/deferred/BackgroundContentProvider.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/viewers/deferred/BackgroundContentProvider.d Tue Sep 09 17:44:33 2008 +0200 @@ -29,7 +29,7 @@ import dwtx.jface.viewers.IFilter; import dwt.dwthelper.utils; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; /** * Contains the algorithm for performing background sorting and filtering in a virtual @@ -141,7 +141,7 @@ private ConcurrentTableUpdator updator; private IProgressMonitor sortingProgressMonitor; - private Thread sortThread = null; + private JThread sortThread = null; private /+volatile+/ FastProgressReporter sortMon; @@ -475,12 +475,12 @@ */ private bool sortScheduled = false; - private final class SortThread : Thread { + private final class SortThread : JThread { private this(String name) { - super(/+name+/); + super(name); } - public /+override+/ void run() { + public override void run() { loop: while (true) { synchronized (lock) { sortScheduled = false; @@ -514,8 +514,8 @@ if (!sortThreadStarted) { sortThreadStarted = true; sortThread = new SortThread(SORTING); - sortThread.isDaemon = true; - sortThread.priority = sortThread.priority - 1; + sortThread.setDaemon( true ); + sortThread.setPriority( sortThread.getPriority() - 1 ); sortThread.start(); } } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/jface/window/ToolTip.d --- a/dwtx/jface/window/ToolTip.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/jface/window/ToolTip.d Tue Sep 09 17:44:33 2008 +0200 @@ -35,7 +35,7 @@ import dwt.dwthelper.utils; import dwtx.dwtxhelper.Collection; import dwt.dwthelper.Runnable; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; /** * This class gives implementors to provide customized tooltips for any control. * @@ -495,7 +495,7 @@ display.asyncExec(dgRunnable( delegate(Display display_, Event newEvent_) { if (IS_OSX) { try { - Thread.sleep(0.300); + JThread.sleep(300); } catch (InterruptedException e) { } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 dwtx/ui/internal/forms/widgets/BusyIndicator.d --- a/dwtx/ui/internal/forms/widgets/BusyIndicator.d Mon Sep 08 01:38:10 2008 +0200 +++ b/dwtx/ui/internal/forms/widgets/BusyIndicator.d Tue Sep 09 17:44:33 2008 +0200 @@ -35,13 +35,13 @@ import dwt.dwthelper.Runnable; import tango.util.Convert; -import tango.core.Thread; +import dwtx.dwtxhelper.JThread; public final class BusyIndicator : Canvas { alias Canvas.computeSize computeSize; - class BusyThread : Thread { + class BusyThread : JThread { Rectangle bounds; Display display; GC offScreenImageGC; @@ -56,7 +56,7 @@ this.offScreenImage = offScreenImage; } - public void run() { + public override void run() { try { /* * Create an off-screen image to draw on, and fill it with @@ -125,7 +125,7 @@ * Sleep for the specified delay time */ try { - Thread.sleep(MILLISECONDS_OF_DELAY/1000.0); + JThread.sleep(MILLISECONDS_OF_DELAY); } catch (InterruptedException e) { ExceptionPrintStackTrace(e); } @@ -221,8 +221,8 @@ Image offScreenImage = new Image(display, bounds.width, bounds.height); GC offScreenImageGC = new GC(offScreenImage); busyThread = new BusyThread(bounds, display, offScreenImageGC, offScreenImage); - busyThread.priority((Thread.PRIORITY_MIN + Thread.PRIORITY_MAX )/2 + 2); - busyThread.isDaemon(true); + busyThread.setPriority(JThread.NORM_PRIORITY + 2); + busyThread.setDaemon(true); busyThread.start(); } diff -r 71ec57b4c8f3 -r 3b8f773f35e4 res/dwtx.jface.text.templates.persistence.TemplatePersistenceMessages.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/res/dwtx.jface.text.templates.persistence.TemplatePersistenceMessages.properties Tue Sep 09 17:44:33 2008 +0200 @@ -0,0 +1,14 @@ +############################################################################### +# Copyright (c) 2000, 2005 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +TemplateReaderWriter.duplicate.id= Duplicate template id +TemplateReaderWriter.error.missing_attribute= Missing required attribute +TemplateReaderWriter.error.illegal_boolean_attribute= Illegal boolean attribute, must be "true" or "false".